ABCpdf复制页眉和页脚

时间:2014-01-14 10:00:05

标签: coldfusion coldfusion-10 abcpdf abcpdf9

我正在使用带有Coldfusion的ABCpdf 9.1 x64 .Net来创建基于HTML内容的PDF。每个PDF文档都有一个不同的页眉和页脚,它们使用一些Coldfusion代码生成为HTML。对于每个页面,每个页面的页脚略有不同(因为它显示页码),页眉是相同的。这是我的代码的主要部分:

// add content
theDoc.Get_Rect().Set_String("67 80 573 742");
theContentID = theDoc.AddImageHTML(pdfContent);

while (true) {
    if (!theDoc.Chainable(theContentID)) {
        break;
    }
    theDoc.Set_Page(theDoc.AddPage());
    theContentID = theDoc.AddImageToChain(theContentID);
}

// add header & footer on each page
for (i=1; i <= theDoc.Get_PageCount(); i++) {
    // set page
    theDoc.Set_PageNumber(i);

    // HEADER
    theDoc.Get_Rect().Set_String("67 755 573 809");
    theDoc.AddImageHTML(headerContent);

    // FOOTER
    theDoc.Get_Rect().Set_String("67 0 573 65");
    theDoc.AddImageHTML(replace(footerContent, "[page]", i));
}

如您所见,AddImageHTML()方法每个页面调用2次,内容调用一次。因此,如果我有创建6个页面的内容,则该方法被调用13次。这并不理想,因为这种方法耗费了大量时间。

是否有更有效的方法从HTML添加页眉和页脚?有一个方法AddImageCopy(),但它不适用于AddImageHtml()创建的对象。

只是为了理解:Coldfusion创建了那些getter和setter方法来访问.Net属性。

2 个答案:

答案 0 :(得分:1)

  1. 如果您的HTML相对简单并且不依赖于CSS,您可以将其调整为HTML样式文本,并使用AddHtml代替AddImageHtmlAddHtml的执行速度应该比AddImageHtml快得多。作为附带好处,您可以在必要时使用引用(非系统安装)字体和CMYK颜色。

  2. 由于您的标题在每个页面上都相同,因此您可以在辅助AddImageHtml对象上使用Doc,然后在每个页面上将其添加为图像。这会将标题的调用从每页一个减少到每个文件只有一个。

  3. 由于每页的页脚不同,我看不出如何避免在每个页面上调用某些内容

答案 1 :(得分:0)

我使用这种方法,所有页面的标题都相同

doc.PageNumber = 1;
doc.Rect.Rectangle = headerRect; //headerrect should define the rect where the header is
doc.AddImageHtml(headerHtml);  //perform addimage html once

//repeat for other pages (clones the header. much faster than calling addImageHtml every time)
 for (int i = 1; i <= doc.PageCount; i++)
  {
    doc.PageNumber = i;
        doc.AddImageDoc(doc, 1, doc.Rect);
   }