我需要使用复杂模板生成pdf报告。我有一个带有的xls文件 复杂的布局,通常由带有表头,表的标头组成 行,表页脚和一般页脚。
是否可以使用itext生成pdf报告 从
顺序生成像这样:
Header.pdf
+----------------------------------------------+
| |
| Header |
+----------------------------------------------+
| | |
| Column 1 Header | Column N Header |
| | |
+----------------------------------------------+
Java代码生成的表行
+----------------------------------------------+
| | |
| Value 11 | Value 1M |
| | |
+----------------------------------------------+
...
+----------------------------------------------+
| | |
| Value N1 | Value NM |
| | |
+----------------------+-----------------------+
Footer.pdf
+----------------------------------------------+
| | |
| Column 1 Footer | Column N Footer |
| | |
| | |
+----------------------+-----------------------+
| |
| Footer |
| |
+----------------------------------------------+
谢谢。
更新
这是Excel中的模板。
表格的两行在模板中间笔直。因此,一般标题包含表格列标题,页脚标题为页脚。
答案 0 :(得分:1)
假设您有一个标题(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
添加到table
:
PdfPCell cell = new PdfPCell(Image.getInstance(header));
cell.setColspan(3);
table.addCell(cell);
请注意,将PdfImportedPage
包裹在Image
内并不会对文本进行栅格化。您将发现文本&#34;这是标题&#34;仍然可以选择,复制和粘贴。