使用 JPype 使 iText 7 Table 适合带有图像的单页
Fit iText 7 Table to Single Page with Images using JPype
我正在尝试将 table 的所有内容放入单个 A4 PDF。
我在同一主题上找到了另一篇链接到 itextpdf 页面的 SO 文章 here
但是,我不确定应该如何实施。我将上面的代码转换为 JPype,它似乎 运行。但是我没有得到想要的效果。
我希望能够向此 table 添加图像,并使其大小合适,以便它保持单个 A4 页面。
来源和示例在我的 github 页面上:
https://github.com/krowvin/jpypeitext7example
假设这是 table 完全适合 A4 页面:
Table table = new Table(2);
for (int i = 0; i < 100; i++) {
table.addCell(new Cell().add(new Paragraph(i + " Hello")));
table.addCell(new Cell().add(new Paragraph(i + " World")));
}
由于它太长而无法通过通常的布局流程完全适应(例如 Document#add
),我们应该以某种方式对其进行缩放。但首先,让我们看看如果要放置的页面是无限的,这个table占多少space:
LayoutResult result = table.createRendererSubTree().setParent(doc.getRenderer())
.layout(new LayoutContext(new LayoutArea(1, new Rectangle(10000, 10000))));
Rectangle occupiedRectangle = result.getOccupiedArea().getBBox();
现在让我们创建这个 table 的表单 xobject,我们将在下面缩放几行:
PdfFormXObject xObject = new PdfFormXObject(new Rectangle(occupiedRectangle.getWidth(), occupiedRectangle.getHeight()));
new Canvas(xObject, pdfDoc).add(table).close();
所以现在我们有了 table 的 xObject,唯一的问题是如何适应它,例如要应用的比例系数:
double coefficient = Math.min(PageSize.A4.getWidth() / occupiedRectangle.getWidth(),
PageSize.A4.getHeight() / occupiedRectangle.getHeight());
我们快完成了:现在让我们将 table 的缩放版本添加到文档页面:
new PdfCanvas(pdfDoc.addNewPage())
.saveState()
.concatMatrix(coefficient, 0, 0, coefficient, 0, 0)
.addXObject(xObject)
.restoreState();
就是这样:
我正在尝试将 table 的所有内容放入单个 A4 PDF。
我在同一主题上找到了另一篇链接到 itextpdf 页面的 SO 文章 here
但是,我不确定应该如何实施。我将上面的代码转换为 JPype,它似乎 运行。但是我没有得到想要的效果。
我希望能够向此 table 添加图像,并使其大小合适,以便它保持单个 A4 页面。
来源和示例在我的 github 页面上: https://github.com/krowvin/jpypeitext7example
假设这是 table 完全适合 A4 页面:
Table table = new Table(2);
for (int i = 0; i < 100; i++) {
table.addCell(new Cell().add(new Paragraph(i + " Hello")));
table.addCell(new Cell().add(new Paragraph(i + " World")));
}
由于它太长而无法通过通常的布局流程完全适应(例如 Document#add
),我们应该以某种方式对其进行缩放。但首先,让我们看看如果要放置的页面是无限的,这个table占多少space:
LayoutResult result = table.createRendererSubTree().setParent(doc.getRenderer())
.layout(new LayoutContext(new LayoutArea(1, new Rectangle(10000, 10000))));
Rectangle occupiedRectangle = result.getOccupiedArea().getBBox();
现在让我们创建这个 table 的表单 xobject,我们将在下面缩放几行:
PdfFormXObject xObject = new PdfFormXObject(new Rectangle(occupiedRectangle.getWidth(), occupiedRectangle.getHeight()));
new Canvas(xObject, pdfDoc).add(table).close();
所以现在我们有了 table 的 xObject,唯一的问题是如何适应它,例如要应用的比例系数:
double coefficient = Math.min(PageSize.A4.getWidth() / occupiedRectangle.getWidth(),
PageSize.A4.getHeight() / occupiedRectangle.getHeight());
我们快完成了:现在让我们将 table 的缩放版本添加到文档页面:
new PdfCanvas(pdfDoc.addNewPage())
.saveState()
.concatMatrix(coefficient, 0, 0, coefficient, 0, 0)
.addXObject(xObject)
.restoreState();
就是这样: