【发布时间】:2014-03-04 21:43:16
【问题描述】:
我正在使用 itextsharp 生成 PDF 报告,报告的标题包含客户的信息, 报告正文中包含客户交易列表。
我的疑问是:如何为每个客户端动态生成标头?
我需要一个示例来为报告动态生成标题。 每个新的页面Header都需要有数据,客户端在更改客户端Header时应该包含新客户端的信息。
【问题讨论】:
标签: c# pdf itextsharp console-application
我正在使用 itextsharp 生成 PDF 报告,报告的标题包含客户的信息, 报告正文中包含客户交易列表。
我的疑问是:如何为每个客户端动态生成标头?
我需要一个示例来为报告动态生成标题。 每个新的页面Header都需要有数据,客户端在更改客户端Header时应该包含新客户端的信息。
【问题讨论】:
标签: c# pdf itextsharp console-application
你的问题有可能被否决,或者至少在“你尝试过什么?”的意义上是 cmets
不过,我用 Java 为您编写了一个小示例,您可以轻松地适应 C#,因为 iText 和 iTextSharp 或多或少共享相同的语法。
这个例子叫做VariableHeader,这些是最有趣的sn-ps:
首先,我创建了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);
我在调用newPage() 方法之前更改了标题Phrase:
event.setHeader(new Phrase(String.format("THE FACTORS OF %s", i)));
document.newPage();
在我的简单示例中,我生成了一个文档,其中列出了从 2 到 300 的所有数字的因数:variable_header.pdf。每个页面的标题都写着“X 的因素”,其中 X 是该页面上显示的因素的数量。
您可以轻松调整它以显示不同的客户名称而不是数字。
【讨论】: