itextsharp将1页模板添加到所有页面

Lar*_*goh 3 asp.net pdf-generation itextsharp asp.net-mvc-4

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

我的模板是一个1页的PDF文件.要将它添加到第一页,我使用以下代码

PdfContentByte cb = writer.DirectContent;
cb.AddTemplate(page, 0, 0);
Run Code Online (Sandbox Code Playgroud)

正如我所说,这适用于第一页很好,但之后没有任何页面.所以我尝试在关闭所有流之前添加以下代码,但它什么也没做

for (var i = 2; i <= writer.CurrentPageNumber; i++)
{
    var y = (writer.PageSize.Height * (i - 1));
    cb.AddTemplate(page, 0, y);
}
Run Code Online (Sandbox Code Playgroud)

我确实没有在网上找到任何与我的问题完全相关的内容,但那些相似的问题并没有帮助.

任何建议都会很棒,谢谢.

mkl*_*mkl 5

如果您希望在每个页面上发生某些事情,则应使用页面事件并在OnEndPage呼叫时执行操作.Webified 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);
Run Code Online (Sandbox Code Playgroud)

page 是一个成员变量:

private PdfImportedPage page;
Run Code Online (Sandbox Code Playgroud)

它由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);
  }
}
Run Code Online (Sandbox Code Playgroud)