gpt4 book ai didi

asp.net - itextsharp 向所有页面添加 1 个页面模板

转载 作者:行者123 更新时间:2023-12-01 11:44:15 24 4
gpt4 key购买 nike

我正在 ASP.Net 应用程序中动态创建 PDF 文件。数据可以从 1 页到超过 10 页不等。我正在使用 PdpfTables 和 Cells 来对齐工作正常的数据。 IT 在需要新页面时创建页面。唯一的问题是我无法将我的模板添加到所有页面,只能添加到第一页。

我的模板是一页 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 示例 Stationery.cs展示了如何做到这一点。它本质上是对 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);
}
}

关于asp.net - itextsharp 向所有页面添加 1 个页面模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16917433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com