gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:24 35 4
gpt4 key购买 nike

我正在生成一个文档,就像下面的代码一样,当然除了表格的内容是不同的。我需要做的是确保此表的大小永远不会超过一页,无论单元格中的内容有多少。有办法吗?

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() throws DocumentException, FileNotFoundException, IOException{ String TARGET = System.getProperty("user.home")+"\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 < 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);

现在您可以创建一个大小为 Rectangle(0, 0, width + margin * 2, getTotalHeight() + margin * 2)Document 并且表格应该适合当您使用 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();
}

关于java - 如何调整 PdfPTable 的大小以适合页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958396/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com