ABCPDFは非常に有能だと思います。ただし、これまでのところ、ある PDF を別の PDF に丸みのある角で描画する方法を見つけることができませんでした - 今まで. しかし、私が発見したアプローチは、挿入された PDF ストリームの正しい PDF オブジェクト ID を取得することに依存しており、ここにこの質問の理由があります。
ABCPDF を知っている人なら誰でも、なぜそれが問題なのかと尋ねるでしょう。ある PDF を別の PDF 内に埋め込む addImageDoc() 関数は、PDF オブジェクト ID を返しませんか? いいえ - それは別のものを返します - 挿入された PDF は孤立したオブジェクトとしてドキュメント カタログに入る可能性が高く、返された ID で得られるのはそれを参照するオブジェクトです。ドキュメントストリームを解凍すると、これが裏付けられるようです。
簡単に言えば、私の実験では、ストリームに「Do」呼び出しを挿入する必要があることがわかりました。そのターゲットは次のように導出されます。
imgObjId = addImageDoc(some pdf object) // inserted off-page
insert into stream "/Iabc<imgObjId + 1> Do"
たとえば、返された imgObjId 値が 5 の場合、6 にする必要があります。
/Iabc6 Do
質問: これは問題なく動作しますが、返された値に 1 を追加することに頼っています。または、これを達成する正しい方法はありますか?
詳細: 質問は簡潔にしましたが、読者はなぜ上記のことが重要なのか疑問に思うかもしれません。角を丸くするには、クリッピング領域が定義された PDF コマンドのストリームを構築する必要があるためです。角にベジエ曲線がある四角形のパスを考えてみてください。それを取得したら、クリッピング効果を得るために、画像、または私の場合は別の PDF を同じコンテキストに描画する必要があります。その後、グラフィックス状態を閉じてリセットし、PDF スタックの良き市民になることができます。ただし、上記の私のアプローチ以外に、ABCPDF で見つけて、カタログに挿入された PDF doc ストリームのハンドルを取得して、別の場所に描画するように要求できる手段はありません。
画像の挿入は、getinfo() 関数がピックスマップを検出できることを除いて、同様のプロセスのようです。埋め込まれた PDF のようなアプローチはないようです。