问题描述
如果要使表格适合页面,则应在考虑页面大小之前创建表格,并像TableHeight示例中一样询问表格的高度。请注意,@H_502_1@getTotalHeight()除非您定义表格的宽度,否则该方法将返回0。可以这样完成:
@H_502_1@ table.setTotalWidth(width); table.setLockedWidth(true);
现在,您可以创建一个@H_502_1@Document带有大小的,@H_502_1@Rectangle(0, 0, width + margin * 2, getTotalHeight() + margin * 2)并且当使用@H_502_1@writeSelectedRows()方法添加文档时,表格应该恰好适合文档。
如果您不希望自定义页面大小,则需要@H_502_1@PdfTemplate使用表的大小创建一个并将表添加到此模板对象。然后,将模板对象包装在中,@H_502_1@Image然后使用@H_502_1@scaleToFit()来缩小表的大小。
@H_502_1@public static void main(String[] args) throws DocumentException, FileNotFoundException, IOException { String TARGET = "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 < 700; i++) { Phrase p = new Phrase("some text"); PdfPCell cell = new PdfPCell(); cell.addElement(p); table.addCell(cell); } table.setTotalWidth(PageSize.A4.getWidth()); table.setLockedWidth(true); PdfContentByte canvas = writer.getDirectContent(); PdfTemplate template = canvas.createTemplate(table.getTotalWidth(), table.getTotalHeight()); table.writeSelectedRows(0, -1, 0, table.getTotalHeight(), template); Image img = Image.getInstance(template); img.scaleToFit(PageSize.A4.getWidth(), PageSize.A4.getHeight()); img.setAbsolutePosition(0, (PageSize.A4.getHeight() - table.getTotalHeight()) / 2); document.add(img); document.close(); }
解决方法
我正在生成一个文档,就像下面的代码一样,当然,表的内容是变化的。我需要做的是确保无论单元格中的内容量如何,该表的大小都不会超过一页。有办法吗?
导入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;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
公共无效createTemplate()抛出DocumentException,FileNotFoundException,IOException {
字符串TARGET = System.getProperty(“ user.home”)+“ \ temp.pdf”;
文档文档=新文档(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,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。我是在做错什么,还是这是完全错误的方法?