ABCpdf скопировать верхний и нижний колонтитулы

Я использую ABCpdf 9.1 x64 .Net с Coldfusion для создания PDF на основе содержимого HTML. Каждый документ PDF имеет свой верхний и нижний колонтитулы, которые генерируются как HTML с некоторым кодом Coldfusion. Верхний колонтитул идентичен для каждой страницы, где нижний колонтитул немного отличается для каждой страницы (поскольку он показывает номер страницы). Вот основная часть моего кода:

// 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 создает методы получения и установки для доступа к свойствам.Net.

2 ответа

Решение
  1. Если ваш HTML относительно прост и не использует CSS, вы можете настроить его на HTML-стиль и использовать AddHtml вместо AddImageHtml, AddHtml должен работать намного быстрее, чем AddImageHtml, В качестве дополнительного преимущества вы сможете использовать ссылочные (не установленные в системе) шрифты и цвета CMYK, если это необходимо.

  2. Так как ваш заголовок идентичен на каждой странице, возможно, вы могли бы использовать AddImageHtml на вторичном Doc объект, затем добавьте это как изображение на каждой странице. Это сократит количество вызовов для заголовка с одного на страницу до одного только на файл.

  3. Поскольку нижний колонтитул отличается на каждой странице, я не понимаю, как можно избежать вызова чего-либо на каждой странице.

Я использовал этот подход, когда заголовок одинаков для всех страниц

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);
   }
Другие вопросы по тегам