我需要使用复杂的模板生成 pdf 报告。我有一个 xls 文件,其中包含 复杂的布局,通常由带有表头的标题、表格组成 行、表页脚和常规页脚。
是否可以使用 itext 生成 pdf 报告 依次生成
- 包含表格列标题行的 Header.pdf 文件
- 在java代码表行中动态生成,可以无缝地继续 Header.pdf 中的表格
- Footer.pdf 包含可无缝延续表格行的列页脚 由java代码生成。
像这样:
标题.pdf
+-------------------------------------------------------- +
| |
|标题 |
+----------------------------------------------------------+
| | |
|列 1 标题 |列 N 标题 |
| | |
+---------------------------------------------------------+
Java 代码生成的表行
+--------------------------------------------------------- +
| | |
|值 11 |值(value)100万 |
| | |
+----------------------------------------------------------+
...
+----------------------------------------------------------+
| | |
|值 N1 |值(value)近乎 |
| | |
+--------------------------------+------------------------+
页脚.pdf
+-------------------------------------------------------- +
| | |
|第 1 栏页脚 | N 列页脚 |
| | |
| | |
+--------------------------------+------------------------+
| |
|页脚|
| |
+----------------------------------------------------------+
谢谢。
更新
这是 Excel 中的模板。
表格的两行位于模板的中间。相应地,通用标题带有表格列标题,页脚带有列页脚。
最佳答案
假设您有页眉 ( header.pdf ) 和页脚 ( footer.pdf ),那么您可以将这些静态 PDF 集成为页眉和页脚,如 SimpleTable8
示例中所述 (请参阅 simple_table8.pdf ):
让我们看一下代码:
public void createPdf(String dest) throws IOException, DocumentException {
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
PdfPTable table = new PdfPTable(3);
table.setWidthPercentage(100);
PdfReader reader = new PdfReader("resources/pdfs/header.pdf");
PdfImportedPage header = writer.getImportedPage(reader, 1);
PdfPCell cell = new PdfPCell(Image.getInstance(header));
cell.setColspan(3);
table.addCell(cell);
for (int row = 1; row <= 50; row++) {
for (int column = 1; column <= 3; column++) {
table.addCell(String.format("row %s, column %s", row, column));
}
}
reader = new PdfReader("resources/pdfs/footer.pdf");
PdfImportedPage footer = writer.getImportedPage(reader, 1);
cell = new PdfPCell(Image.getInstance(footer));
cell.setColspan(3);
table.addCell(cell);
document.add(table);
document.close();
}
我们像这样导入页眉(或页脚):
PdfReader reader = new PdfReader("resources/pdfs/header.pdf");
PdfImportedPage header = writer.getImportedPage(reader, 1);
现在我们创建一个 PdfPCell
,将这个 PdfImportedPage
包装在 Image
中,并将 cell
添加到表
:
PdfPCell cell = new PdfPCell(Image.getInstance(header));
cell.setColspan(3);
table.addCell(cell);
请注意,将 PdfImportedPage
包装在 Image
内不会光栅化文本。您会发现文本“这是标题”仍然可以选择、复制和粘贴。
关于java - 从使用 iText 动态延续文件模板的 java 代码生成 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29752875/