31

iTextSharpを使用して、表示されていない(または少なくとも表示されていない)オブジェクトをPDFドキュメントから削除することはできますか?

詳細:

1)私のソースは、画像とテキスト(おそらくいくつかのベクター図面)と埋め込みフォントを含むPDFページです。

2)複数の「クロップボックス」をデザインするためのインターフェースがあります。

3)クロップボックス内にあるものだけを含む新しいPDFを生成する必要があります。結果のドキュメントから他のものを削除する必要があります(実際、半分が内側で半分が外側のコンテンツを受け入れる場合がありますが、これは理想的ではなく、とにかく表示されるべきではありません)。

これまでの私の解決策:

新しい一時ドキュメントを作成するソリューションの開発に成功しました。各ドキュメントには、各クロップボックスのコンテンツが含まれています(クロップボックスのサイズとまったく同じページにwriter.GetImportedPageとcontentByte.AddTemplateを使用)。次に、最終的なドキュメントを作成し、AddTemplateメソッドを使用してプロセスを繰り返し、各「トリミングされたページ」を最終的なページに配置します。

このソリューションには2つの大きな欠点があります。

  • ドキュメントのサイズは[元のサイズ]*[クロップボックスの数]です。ページ全体がそこにあるため、何度もスタンプが押されます。(見えないが、そこにある)
  • リーダー内ですべて(CTRL + A)を選択して貼り付けることで、非表示のテキストに引き続きアクセスできます。

したがって、PDFオブジェクトを反復処理し、表示されているかどうかを検出して、削除する必要があると思います。執筆時点では、pdfReader.GetPdfObjectを使用しようとしています。

助けてくれてありがとう。

4

5 に答える 5

1
PdfReader pdfReader = new PdfReader(../Template_Path.pdf"));
PdfStamper pdfStamperToPopulate = new PdfStamper(pdfReader, new FileStream(outputPath, FileMode.Create));
AcroFields pdfFormFields = pdfStamperToPopulate.AcroFields;
pdfFormFields.RemoveField("fieldNameToBeRemoved");
于 2013-09-21T19:12:46.923 に答える
1

はい、可能です。PdfWriter を介してページをインポートする直前に、pdf ページ コンテンツ バイトを解析して PdfObject に保存し、それらをメモリに保存し、unvanted PdfObject を削除し、PdfObject から pdf コンテンツ バイトに戻して Pdf コンテンツを構築し、PdfReader でページ コンテンツを置き換える必要があります。

これをチェックすることをお勧めします: http://habjan.blogspot.com/2013/09/proof-of-concept-converting-pdf-files.html

リンクのサンプルは、PdfReader ページのコンテンツ バイトを置き換えて、PdfObjec から構築し直して、Pdf コンテンツ バイトの解析を実装しています...

于 2013-09-24T00:34:52.330 に答える
0

IRenderListener を使ってみましたか? TextRenderInfo または ImageRenderInfo オブジェクトの StartPoint および EndPoint または Area を調べることにより、トリミング領域内にある要素のみを新しい pdf に選択的に追加できます。

于 2013-08-06T20:46:13.667 に答える