3

我在 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);
}

我并没有在网上找到任何与我的问题完全相关的东西,但是那些类似的问题并没有帮助。

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

4

1 回答 1

6

如果您希望在每个页面上发生某些事情,您应该使用页面事件并在OnEndPage调用的情况下采取行动。Webified iTextSharp Example 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);
  }
}
于 2013-06-04T15:13:05.487 回答