当前位置: 首页 > 面试题库 >

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

端木安国
2023-03-14
问题内容

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

导入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();
}


 类似资料:
  • 我正在生成一个文档,如下面的代码所示,当然表的内容除外,它是变化的。我需要做的是确保这个表格的大小永远不会超过一页,而不管单元格中的内容数量如何。有办法做到吗?

  • 问题内容: 我有一个将动态填充的表格,我希望表格始终调整大小以适合行数。我不希望任何滚动,因为表格位于面板中,并且面板的内容需要打印。我已经试过了: 但这似乎不起作用。 问题答案: 我认为这不是最好的方法。但是正如您所坚持的,我将代码放在下面。

  • 问题内容: 我正在尝试从目录加载图像并将其作为图标放置在中。但是,当图像尺寸很大时,就不能完全放入标签中。我尝试调整图像的大小以适合标签,但无法正常工作。我可以知道我要去哪里了吗? 问题答案: BufferedImage img = ImageIO.read(…); Image scaled = img.getScaledInstance(500, 500, Image.SCALE_SMOOTH)

  • 问题内容: 我正在尝试使图片适合JLabel。我希望将图片尺寸减小到更适合我的Swing JPanel。 我尝试使用setPreferredSize,但是它不起作用。 我想知道是否有一种简单的方法?我应该为此缩放图像吗? 问题答案: 大纲 这是要遵循的步骤。 将图片读取为BufferedImage。 将BufferedImage的大小调整为另一个JLabel大小的BufferedImage。 从调

  • 问题内容: 如何自动缩放HTML5 元素以适合页面? 例如,我可以通过将和属性设置为100%来缩放,但是不会缩放吗? 问题答案: 我相信我已经找到了一个优雅的解决方案: JavaScript CSS 到目前为止,对我没有太大的负面性能影响。

  • 问题内容: 有人问过类似的问题,但是解决方案确实与我正在尝试做的事情相吻合。基本上,我有一篇标题为()的文章。我不想控制标题的长度,但是我也不想标题显示在多行上。CSS或jQuery是否可以根据标签的宽度来调整文本大小? 我知道如果可以检测到文本与边缘的重叠,我将如何处理伪代码: 如果有一个CSS属性,我可以设置为更好,但是我似乎找不到(在这种情况下,溢出不会起作用)。 问题答案: CSS否,Ja