itextsharp:如何使用itextsharp在PDF中生成包含动态标头的报告?
我正在使用itextsharp生成PDF报告,报告的标题包含客户的信息,报告正文中包含客户交易列表。
我的疑问是:如何为每个客户端动态生成标头?
我需要一个示例来动态生成报告。 每个新页面标题需要具有客户端更改客户端标头时的数据应包含有关新客户端的信息。
您的问题可能会导致投票失败,或者至少会出现“您尝试过什么?”的评论。
但是,我在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);
我在调用newPage()
方法之前更改标题Phrase
:
event.setHeader(new Phrase(String.format("THE FACTORS OF %s", i))); document.newPage();
在我的简单示例中,我生成了一个文档,列出了从2到300的所有数字的因子: variable_header.pdf 。 每页的标题都写着“ X的因素”,其中X是因子在该页面上显示的数量。
您可以轻松地对其进行调整以显示不同的客户名称而不是数字。