我正在 ASP.Net 应用程序中动态创建 PDF 文件。
数据可以从 1 页到 10 多页不等。
我正在使用 PdpfTables 和 Cells 来对齐运行良好的数据。 IT 正在创建页面,因为它需要新页面。唯一的问题是我无法将模板添加到所有页面,只能添加到第一页。
我的模板是一个 1 页的 PDF 文件。要将其添加到首页,我使用以下代码
PdfContentByte cb = writer.DirectContent;
cb.AddTemplate(page, 0, 0);
正如我所说,这适用于第一页,但不适用于此后的任何页面。
所以我尝试在关闭所有流之前添加以下代码,但它什么也没做
for (var i = 2; i <= writer.CurrentPageNumber; i++)
{
var y = (writer.PageSize.Height * (i - 1));
cb.AddTemplate(page, 0, y);
}
我还没有在网上找到任何与我的问题完全相关的内容,但是那些类似的问题并没有帮助。
任何建议都会很好,谢谢。
如果您希望每个页面上都发生某些事情,则应该使用页面事件并在出现异常情况时采取行动OnEndPage
称呼。网络化 iTextSharp 示例展示了如何做到这一点。它本质上是后初始化的PdfWriter
使用内部帮助器类作为页面事件侦听器并检索背景:
PdfWriter writer = PdfWriter.GetInstance(document, ms);
[...]
writer.PageEvent = new TemplateHelper(this);
PdfReader reader = new PdfReader(stationary);
page = writer.GetImportedPage(reader, 1);
page
是一个成员变量:
private PdfImportedPage page;
它由以下人员使用TemplateHelper
内部辅助类:
class TemplateHelper : PdfPageEventHelper {
private Stationery instance;
public TemplateHelper() { }
public TemplateHelper(Stationery instance) {
this.instance = instance;
}
/**
* @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(
* com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
*/
public override void OnEndPage(PdfWriter writer, Document document) {
writer.DirectContentUnder.AddTemplate(instance.page, 0, 0);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)