如何调整PdfPTable的大小以适合页面?

我正在生成一个文档,就像下面的代码一样,当然,表的内容是变化的。我需要做的是确保无论单元格中的内容量如何,该表的大小都不会超过一页。有办法吗?

导入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, 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。我是在做错什么,还是这是完全错误的方法?

回答:

如果要使表格适合页面,则应在考虑页面大小之前创建表格,并像TableHeight示例中一样询问表格的高度。请注意,getTotalHeight()除非您定义表格的宽度,否则该方法将返回0。可以这样完成:

    table.setTotalWidth(width);

table.setLockedWidth(true);

现在,您可以创建一个Document带有大小的,Rectangle(0, 0, width + margin * 2,

getTotalHeight() + margin * 2)并且当使用writeSelectedRows()方法添加文档时,表格应该恰好适合文档。

如果您不希望自定义页面大小,则需要PdfTemplate使用表的大小创建一个并将表添加到此模板对象。然后,将模板对象包装在中,Image然后使用scaleToFit()来缩小表的大小。

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();

}

以上是 如何调整PdfPTable的大小以适合页面? 的全部内容, 来源链接: utcz.com/qa/434635.html

回到顶部