次のコードのように、さまざまなテーブルの内容を除いて、ドキュメントを生成しています。セル内のコンテンツの量に関係なく、このテーブルのサイズが 1 ページを超えないようにする必要があります。それを行う方法はありますか?
com.itextpdf.text.Phrase をインポートします。 com.itextpdf.text.Document をインポートします。 com.itextpdf.text.DocumentException をインポートします。 com.itextpdf.text.PageSize をインポートします。 インポートcom.itextpdf.text.pdf.PdfPCell; com.itextpdf.text.pdf.PdfPTable をインポートします。 java.awt.Desktop をインポートします。 java.io.File をインポートします。 import java.io.FileNotFoundException; java.io.FileOutputStream をインポートします。 import java.io.IOException;public void createTemplate() は DocumentException、FileNotFoundException、IOException をスローします{ String TARGET = System.getProperty("user.home")+"\temp.pdf";
Document document = new Document(PageSize.A4); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(TARGET)); document.open();PdfPTable table = new PdfPTable(7); for (int i = 0; i < 105; i++) { Phrase p = new Phrase("some text"); PdfPCell cell = new PdfPCell(); cell.addElement(p); table.addCell(cell); } table.setTotalWidth(PageSize.A4.getWidth()-10); table.setLockedWidth(true); PdfContentByte canvas = writer.getDirectContent(); PdfTemplate template = canvas.createTemplate(table.getTotalWidth(),table.getTotalHeight()); table.writeSelectedRows(0, -1, 0, PageSize.A4.getHeight(), template); Image img = Image.getInstance(template); img.scaleToFit(PageSize.A4.getWidth(), PageSize.A4.getHeight()); img.setAbsolutePosition(0, PageSize.A4.getHeight()); document.add(img); document.close(); Desktop desktop = Desktop.getDesktop(); File file = new File(TARGET); desktop.open(file); }
編集:@Bruno Lowagie。テンプレートが画像にラップされたヒントは私にはちょうどいいように聞こえ、それに応じてコードを変更しましたが、今は空の PDF しか得られません。私は何か間違ったことをしていますか、それともこれは全体として間違ったアプローチですか?