Добавить заголовок в PDF и RTF с помощью iText - PullRequest
0 голосов
/ 10 мая 2010

Я использую iText для создания PDF и RTF. Я знаю, что генерация RTF с iText не популярна, но мне все еще нужно, чтобы код работал для обоих. Технически, у меня могут быть разные куски кода для обработки каждого типа, но он должен быть в одном файле / классе.

Я могу работать с таким кодом:

String outputData = getFieldValue(myRecord, myFieldName); 
if (exportToPDF) {
  iTextPdfPCell = new PdfPCell(pdfPTable.getDefaultCell());  
  iTextPdfPCell.setPhrase(outputData);
  pdfPTable.addCell(iTextPdfPCell);
}
if (exportToRTF) {
  iTextCell = new RtfCell(outputData);
  iTextTable.addCell(iTextCell);
}

Я могу добавить заголовок с помощью HeaderFooter, который будет отображаться как в PDF, так и в RTF

Phrase headerPhrase = new Phrase ("This is a page header.");
HeaderFooter header = new HeaderFooter(headerPhrase, false);
iTextDoc.setHeader(header);

Проблема в том, что заголовок становится сложным. Я хотел бы добавить заголовок, который содержит таблицу и изображения (изображения могут быть в таблице). Я видел код на другом форуме, который предлагал сделать это:

Phrase headerPhrase = new Phrase();
headerPhrase.add(iTextTable);
HeaderFooter header = new HeaderFooter(headerPhrase, false);
iTextDoc.setHeader(header);

Хотя мое первоначальное тестирование показывает, что это не вызывает каких-либо ошибок компиляции и технически «работает», оно запускает таблицу заголовков в той же позиции, что и основной текст файла, поэтому они перекрываются. Когда я настраиваю поля страницы шире, чтобы освободить место для заголовка, он просто перемещает заголовок вниз с телом.

Большая часть информации, которую я читаю онлайн (и в руководстве), похоже, указывает на использование событий страницы, но это означает, что мой класс должен расширять PdfPageEventHelper. Если я сделаю это,

1. Есть ли что-нибудь похожее для RTF?

2. Если есть, может ли один и тот же класс расширить и RtfPageEventHelper (если он существует) и PdfPageEventHelper? Я не могу написать отдельные классы для каждого типа вывода

3. Если нет, могу ли я использовать таблицы / изображения в классе HeaderFooter, который уже работает как для PDF, так и для RTF?

4. (Я даже не хочу спрашивать об этом) Так как iText, похоже, оставил генерирование RTF позади, должен ли я использовать что-то еще для генерации RTF (желательно также работает с PDF)?

Ответы [ 2 ]

3 голосов
/ 13 июня 2012

Я сделал это в этом формате. Для RTF, но я думаю, что то же самое с PDF. Измените только RtfHeader на PdfHeader

document.open();
Paragraph head=new Paragraph("Head");
Paragraph foot=new Paragraph("Foot");
HeaderFoot header=new RtfHeaderFooter(head);
HeaderFoot footer=new RtfHeaderFooter(foot);
document.setHeader(header);
document.setFooter(footer);
document.close();

Я жду, чтобы помочь.

0 голосов
/ 29 ноября 2011

Заголовок или нижний колонтитул с HeaderFooter отображается на каждой странице. Если вы хотите просто заголовок документа, просто добавьте стандартный элемент (параграф / и т. Д.) На страницу перед вашим контентом.

Например, я делаю это с моим документом:

Paragraph Header = new Paragraph("Document Header", FontFactory.getFont(FontFactory.HELVETICA, 18, Font.BOLDITALIC, new Color(0, 0, 0)));

document.open();
document.add(Header);
document.add(otherContent);
document.close();
...