我正在使用itextsharp生成PDF报告,报告的标题包含客户的信息, 报告正文中包含客户交易清单。
我的疑问是:如何为每个客户端动态生成标头?
我需要一个示例来动态生成报告。 每个新页面标题需要在更改客户端标题时拥有客户端的数据应该包含有关新客户端的信息。
答案 0 :(得分:1)
您的问题可能会导致投票失败,或者至少会出现“您尝试过什么?”的评论。
但是,我已经用Java写了一个小例子,你可以很容易地适应C#,因为iText和iTextSharp或多或少有相同的语法。
该示例名为VariableHeader
,这些是最有趣的摘录:
首先,我创建了PdfPageEvent
接口的自定义实现(使用PdfPageEventHelper
)。重要的是要了解您无法使用onStartPage()
方法(出于我书中所述的原因),请改用onEndPage()
方法。
public class Header extends PdfPageEventHelper {
protected Phrase header;
public void setHeader(Phrase header) {
this.header = header;
}
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte canvas = writer.getDirectContentUnder();
ColumnText.showTextAligned(canvas, Element.ALIGN_RIGHT, header, 559, 806, 0);
}
}
如您所见,标题的文本存储在一个变量中,该变量可以使用我们创建的setHeader()
方法进行更改。
事件按照这样声明PdfWriter
:
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
Header event = new Header();
writer.setPageEvent(event);
在调用Phrase
方法之前,我更改了标头newPage()
:
event.setHeader(new Phrase(String.format("THE FACTORS OF %s", i)));
document.newPage();
在我的简单示例中,我生成了一个文档,列出了从2到300的所有数字的因子:variable_header.pdf。每个页面的标题都显示“ X 的因素”,其中 X 是因子在该页面上显示的数量。
您可以轻松地对其进行调整,以显示不同的客户名称而非数字。