当前位置: 首页 > 知识库问答 >
问题:

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

夏青青
2023-03-14

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

import com.itextpdf.text.Phrase;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import java.awt.Desktop;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public void createTemplate()引发DocumentException、FileNotFoundException、IOException{ String TARGET=System.GetProperty(“user.home”)+“\temp.pdf”;
Document Document=新文档(PageSize.a4); PdfWriter writer=PdfWriter.getInstance(document,new FileOutputStream(TARGET)); document.open();

编辑:@Bruno Lowagie。与模板包装在一个图像中的提示对我来说听起来刚刚好,我改变了代码根据,但我现在得到的只是一个空的PDF。是我做错了什么,还是这是一个完全错误的方法?

共有1个答案

邢乐
2023-03-14

如果您希望一个表适合一个页面,那么您应该在考虑页面大小之前创建该表,并询问该表的高度,就像TableHeight示例中所做的那样。注意,getTotalHeight()方法返回0,除非您定义了表的宽度。可以这样做:

    table.setTotalWidth(width);
    table.setLockedWidth(true);

现在,您可以创建一个大小为矩形(0,0,width+margin*2,getTotalHeight()+margin*2)文档并且当您使用WriteSelectedRows()方法添加该文档时,该表应该完全适合该文档。

如果您不想要自定义页面大小,那么您需要创建一个具有该表大小的pdftemplate,并将该表添加到此模板对象中。然后将模板对象包装在图像中,并使用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();
}
 类似资料:
  • 问题内容: 我正在生成一个文档,就像下面的代码一样,当然,表的内容是变化的。我需要做的是确保无论单元格中的内容量如何,该表的大小都不会超过一页。有办法吗? 编辑:@Bruno Lowagie。模板中包裹着图像的提示听起来很合适,我根据更改了代码,但是现在得到的只是一个空的PDF。我是在做错什么,还是这是完全错误的方法? 问题答案: 如果要使表格适合页面,则应在考虑页面大小之前创建表格,并像Tabl

  • 下面是“DisplayImage”自定义面板相关部分的代码:

  • 我对JPanel和JFrame还是个新手,可能没有按照我应该的方式使用它们。我正在尝试创建Pong游戏,在创建JFrame并将JPanel添加到它之后,我可以调整JPanel的大小,但我不知道如何调整JFrame的大小以适应它。Game类扩展了JPanel。 主: 编辑: 将setSize更改为setPreferredSize,然后为JFrame调用pack()就可以解决所有问题。

  • 我正在尝试使图片适合JLabel。我希望将图片尺寸缩小到更适合我的Swing JPanel的尺寸。 我尝试使用setPreferredSize,但它不起作用。 我在想有没有一个简单的方法来做这件事?我应该为此缩放图像吗?

  • 我有定义了left、right和top约束的NSTextField(没有设置bottom约束)。我需要NSTextField增长,如果内容不能容纳在其中,并减少大小,如果有未使用的空间。 现在我有了:如果NSTextField有多行文本或太多内容,它会以奇怪的行为自动扩展,而且NSTextField在窗口调整大小时不会减小自己的大小。 在Swift上,我还没有找到任何简单的解决方案来解决这个问题(

  • 我试图通过反复更改上的图标来创建一个动画(旋转文本)。问题是这些图像的大小不相同,当它们大于第一个图像的大小时,它们就会被裁剪。 解决这一问题的一种方法是为设置PreferredSize以便所有图像都适合--但我想一定有一种方法可以直接调整包含的的大小? 在下面的代码中,我还尝试将全部删除,创建一个新的jlabel,然后添加新的jlabel,但效果是一样的。 整个面板将在一个applet中使用。