如何调整一个PdfPTable以适合页面?(How to resize a PdfPTable to

2019-07-20 04:02发布

我生成一个文件,如在下面的代码,除了ofcourse的表的内容,这是不同的。 我需要做的是确保此表不超过一个页面的大小,无论在细胞中的内容量。 有没有办法做到这一点?

  进口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作家= PdfWriter.getInstance(文件,新的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。 我是不是做错了什么,或者这是错误的做法产品总数?

Answer 1:

如果你想有一个表,以适应一个页面,你甚至应该考虑页面大小之前创建表,并要求表的高度在完成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();
}


文章来源: How to resize a PdfPTable to fit the page?
标签: java itext