使用iText将标题添加到PDF和RTF

时间:2010-05-10 15:03:59

标签: pdf rtf itext

我正在使用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)?

2 个答案:

答案 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();