web-dev-qa-db-ja.com

PDFBoxを使用して動的に複数ページのドキュメントを作成する

PDF ResultSetからJavaレポートを作成しようとしています。レポートが1ページしかない場合は、ここで問題はありません。問題はレポートの長さは1〜10ページである可能性があります。現在、1ページのドキュメントを作成するためにこれがあります。

PDDocument document = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_LETTER);
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document,page);

だから私の質問は、必要に応じて動的にページを作成するにはどうすればよいかということです。私を正面から見つめているオブジェクト指向の答えがあり、私はそれを見ることができませんか?

13
LiquidDrummer

予想通り、答えは私を真正面から見つめていました。私は誰かにそれを指摘してもらう必要がありました。

PDDocument document = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_LETTER);
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document,page);

//generate data for first page

content.close();

//if number of results exceeds what can fit on the first page
page = new PDPage(PDPage.PAGE_SIZE_LETTER);
document.addPage(page);
content = new PDPageContentStream(document,page);

//generate data for second page

content.close();

答えてくれた@mklに感謝します。

15
LiquidDrummer

マルチページを作成するにはPDF PDFBoxを使用したドキュメント:

(a)新しいページ、新しいコンテンツストリームを作成し、左上に移動して、書き込みを開始します。各Wordの書き込み中に、必要なスペースがメディアボックスの幅を超えていないかどうかを確認してください。交差する場合は、左端の次の行に移動して、書き込みを開始します。ページの最後の行まで書き続けます。

(b)書き込み操作が現在のページの最後の行に達したら、contentStreamを閉じて、現在のページをドキュメントに追加します。

(c)最後のレコード/行/行が書き込まれるまで、手順(a)と(b)を繰り返します。

        PDDocument document = new PDDocument();
        PDFont font = PDType1Font.HELVETICA;

//For Each Page:
        PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
        PDPageContentStream contentStream = new PDPageContentStream(document, page);
        contentStream.setFont(font, 12);
        contentStream.beginText();
        contentStream.moveTextPositionByAmount(100, 700);
        contentStream.drawString("PDF BOX TEXT CONTENT");
        contentStream.endText();
        contentStream.close();
        document.addPage(page);

//After All Content is written:
        document.save(pdfFile);
        document.close();

ヒント: サイズ/高さや残りのメディアボックスの高さなどのフォントパラメータを使用して、ページの最後の行を決定します。

8
AVA