2013-06-04 88 views
2

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

我的模板是一个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); 
} 

我没有真正找到有关我的问题完全净任何东西,但这些问题是在那里这些都没有帮助。

任何意见将是伟大的,谢谢。

+0

当您在位置(0,y)添加模板且y大于页面高度时,您将添加模板在页面的可见区域之外。它让我不知道为什么你会认为这会起作用,而且它真的让人想要帮助你。你应该接受mkl的答案。这是100%正确的。 –

+0

因为Y是页面的高度,所以我的理论是它会从下一页开始。我正在尝试他的答案。它可能适合你,但这并不意味着它适用于我的情况! – Largoh

+0

页面是单独的实体。它是PDF,而不是HTML。 –

回答

5

如果你想要的东西在每一页上发生,你应该使用页面事件和行为在OnEndPage呼叫的情况下。 Web化的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); 
    } 
} 
+0

完美。谢谢。睡了一个晚上,让我的头靠近它,但它现在正在工作。我只需要在第一页之后修复页面的页边距。应该不难。非常感谢你 – Largoh

相关问题