2014-02-18 6 views
0

я работаю над кодом багги предыдущего работника (как я люблю работать над кодом других людей), объявление он создает PDF с помощью iTextSharp ASP Framework 4.0, C#PDF iTextSharp, писать PDF линию другую страницу

он использует:

if (yindex <= 100) 
{ 
Cb.PdfDocument.NewPage(); 

Cb.SetCMYKColorStroke(100, 60, 0, 18); 
yindex = 770; 
} 
Cb.BeginText(); 
Cb.SetFontAndSize(Font, FontSize); 
Cb.ShowTextAligned(Alignment, text, xPos, yindex, rotation); 
Cb.EndText(); 

в основном то, что происходит в ГЭК печать списка раз, сохраняя текущую сумму их стоимости, когда раздел будет завершен, он пытается установить Yindex обратно в верхней части страницы и напишите заголовок с общим количеством.

Это работает отлично, если есть одна страница, однако, когда раздел охватывает несколько страниц, установка yindex в верхней части страницы устанавливает текст в верхнюю часть текущей страницы. Как я буду следить за тем, на какой странице заголовок должен быть включен, а затем установить yindex для корректировки высоты на правильной странице?

+0

Как только вы делаете «NewPage», предыдущая страница записывается в файл. Таким образом, вы не можете просто вернуться к этой странице, чтобы добавить к ней контент. Однако вместо этого вы можете создать пустой 'PdfTemplate', когда вы начнете раздел, и включите его в верхней части текущей страницы. Закончив раздел, нарисуйте текстовую строку заголовка в этом шаблоне и сохраните его. В качестве альтернативы вы можете сохранить номер страницы и строку заголовка в некоторой коллекции; когда PDF без заголовков закончен, просто откройте его в 'PdfStamper' и добавьте заголовки на указанные страницы. – mkl

+1

Тот, кто написал 'Cb.PdfDocument.NewPage();' должен получить зуд в недоступном для него месте. Это действительно очень плохой код! –

ответ

0

Я бы выбросил код, который записывает заголовок вместе с остальными данными, и представит событие страницы, которое добавляет заголовок в событие OnEndPage().

Чтобы справиться с тем, что вы знаете только то, что достигнет страницы X, тогда как вам может понадобиться эта сумма на страницах X-1, X -2, ... Я бы использовал PdfTemplate (как предлагает mkl).

Это показано в примерах, таких как MovieCountries1 (см. http://tinyurl.com/itextsharpIIA2C04 для аналога C#).

Использование события страницы имеет то преимущество, что вам не нужно отслеживать страницы, вы можете сохранить код, который рисует заголовок отдельно от остальной бизнес-логики. См. Еще http://itextpdf.com/sandbox/events/.

Смежные вопросы