我正在使用iText生成PDF和RTF。我知道使用iText的RTF生成并不受欢迎,但我仍然需要使代码适用于两者。从技术上讲,我可以使用不同的代码来处理每种类型,但它需要能够包含在同一个文件/类中。
我可以使用这样的代码:
String outputData = getFieldValue(myRecord, myFieldName);
if (exportToPDF) {
iTextPdfPCell = new PdfPCell(pdfPTable.getDefaultCell());
iTextPdfPCell.setPhrase(outputData);
pdfPTable.addCell(iTextPdfPCell);
}
if (exportToRTF) {
iTextCell = new RtfCell(outputData);
iTextTable.addCell(iTextCell);
}
我可以使用HeaderFooter添加标题,该标题将出现在PDF和RTF
上Phrase headerPhrase = new Phrase ("This is a page header.");
HeaderFooter header = new HeaderFooter(headerPhrase, false);
iTextDoc.setHeader(header);
问题在于标头变得复杂。我想添加一个包含表格和图像的标题(图像可能在表格内)。我在另一个论坛上看到了一些建议这样做的代码:
Phrase headerPhrase = new Phrase();
headerPhrase.add(iTextTable);
HeaderFooter header = new HeaderFooter(headerPhrase, false);
iTextDoc.setHeader(header);
虽然我的初始测试显示这不会导致任何编译错误并且技术上“正常”,但它会在与文件正文文本相同的位置启动标题表,因此它们会重叠。当我将页边距设置得更宽以允许标题的空间时,它只是将标题向下移动到主体。
我在线阅读的大部分信息(以及手册中)似乎都指向使用页面事件,但这意味着我的类必须扩展PdfPageEventHelper。如果我这样做,
1. RTF有什么相似之处吗?
2.如果有,同一个类是否可以扩展'RtfPageEventHelper'(如果存在)和PdfPageEventHelper?我不能为每种输出类型写单独的类
3.如果没有,有没有办法可以在HeaderFooter类中使用表格/图像,它已经适用于PDF和RTF?
4.(我甚至不想问这个)因为iText似乎已经抛弃了RTF生成,我是否应该使用其他东西生成RTF(最好也适用于PDF)?
答案 0 :(得分:3)
我是用这种格式做的。是RTF,但我认为与PDF相同。只更改PdfHeader的RtfHeader
document.open();
Paragraph head=new Paragraph("Head");
Paragraph foot=new Paragraph("Foot");
HeaderFoot header=new RtfHeaderFooter(head);
HeaderFoot footer=new RtfHeaderFooter(foot);
document.setHeader(header);
document.setFooter(footer);
document.close();
我等待帮助。
答案 1 :(得分:0)
每页都会显示带有HeaderFooter的页眉或页脚。如果您只想要一个文档标题,只需在内容之前向页面添加标准元素(段落/等)。
例如,我正在使用我的文档:
Paragraph Header = new Paragraph("Document Header", FontFactory.getFont(FontFactory.HELVETICA, 18, Font.BOLDITALIC, new Color(0, 0, 0)));
document.open();
document.add(Header);
document.add(otherContent);
document.close();