0

PDFファイルのすべてのページにテキストを追加したいと思います。SOのこの答えはうまくいきます。ただし、テキストはページの上部に追加されます。各ページの下部にテキストを追加したいと思います。どうすればよいですか?

これがコードの関連部分です。

    while (iteratorPDFReader.hasNext()) {
        PdfReader pdfReader = iteratorPDFReader.next();

        // Create a new page in the target for each source page.
        while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {
            document.newPage();
            pageOfCurrentReaderPDF++;
            currentPageNumber++;
            page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
            cb.addTemplate(page, 0, 0);

            document.add(new Paragraph("My Text here"));  //As per the SO answer

        }
        pageOfCurrentReaderPDF = 0;
    }

このコードは、フォルダーを受け入れ、その中のPDFファイルを読み取り、それらを1つのファイルにマージする関数の一部です。したがって、ファイルをもう一度繰り返すのではなく、上記のループ自体にテキストを追加したいと思います。

4

3 に答える 3

5

すべてのページにコンテンツを自動的に追加する場合は、ページイベントが必要です。これは、私の本「 iText inAction-SecondEdition」の第5章で説明されています。本のコピーをお持ちでない場合は、こちらの例を参照してください。キーワードHeader/Footerを探すことで解決策を見つけることもできます。

あなたが参照している例は一見正しく見えません。もちろん、「2つのパス」を使用して、1つはコンテンツを作成し、もう1つはヘッダーまたはフッターを追加できますが、推奨される解決策は推奨される解決策とは異なります。http: //itextpdf.com/examples/iia.php?id = 118

あなたはあなたの質問の間違いをコピーしています:なぜあなたは今作成したばかりのドキュメントを新しいドキュメントにインポートし、それであなたがそのドキュメントに追加したすべての可能な双方向性を捨てるのですか?それは意味がありません。この回答がこれほど多くの賛成票を獲得したことは信じられないことです。私はiTextの最初の開発者であり、その答えにはまったく満足していません。

あなたの場合、最初にメモリ内にドキュメントを作成し、後でフッターを追加する必要がない場合があります。http://itextpdf.com/examples/iia.php?id=104をご覧ください。

実装を作成する必要がありPdfPageEvent(たとえば、を使用してPdfPageEventHelper)、メソッドを実装する必要がありますonEndPage()

文書化された警告:

  • onStartPage()コンテンツの追加には使用しないでください。
  • Documentページイベントに渡されるオブジェクトには何も追加しないでください。
  • 別のページサイズを指定しない限り、左下隅の座標はx = 0; y = 0です。フッターを追加するときは、それを考慮する必要があります。フッターのy値は、ヘッダーのy値よりも低くなっています。

詳細については、私の本を参照してください。

于 2012-11-20T06:55:46.137 に答える
2

iText in Action、第2版の第6章、特にサブセクション6.4.1:PDFドキュメントの連結と分割をご覧ください。

リスト6.22のConcatenateStamp.javaは、他の複数のPDFのページ(この場合はすべてのページ)のコピーからPDFを作成する方法を示しています。サンプルはさらに、新しい「PageXofY」フッターを追加します。これは、ソースファイルをマージしながら、ページの特定の位置にコンテンツを追加する方法を示しています。

于 2012-11-20T07:35:34.190 に答える
0

おそらくこれはここで役立つかもしれません...私はあなたが次のようなことをしたいと思うと思います:

cb.addTemplate(page, 0, 0);

document.add(new Paragraph("My Text here"));  
document.setFooter(new HeaderFooter("Footnote goes here"));
}
pageOfCurrentReaderPDF = 0;
于 2012-11-20T03:46:29.387 に答える