2014-01-14 8 views
3

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

// 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.

ответ

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

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

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

+0

Это тоже ответ, который я получил от WebSupergoo. Благодаря! – android

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); 
    } 
Смежные вопросы