itext pdf header - PullRequest
       5

itext pdf header

1 голос
/ 21 февраля 2011

Я создаю один вывод PDF, используя iText 5.0.5.
Я читаю данные в виде байтов из базы данных, а затем добавляю их в документ, используя HTMLWorker для генерации PDF.
Но я не являюсьвозможность добавить заголовок на каждой странице для этого документа PDF.
, пожалуйста, помогите.

1 Ответ

2 голосов
/ 21 февраля 2011

1) Самый последний iText - 5.0.6.

2) Для создания верхнего и нижнего колонтитула страницы необходимо использовать интерфейс PdfPageEvent. Обычно это делается путем получения от PdfPageEventHelper и переопределения только тех методов, которые вам нужны.

В PdfPageEvent вы должны нарисовать PDF, используя PdfContentByte. Хорошей новостью является то, что вы можете использовать ColumnText для добавления выровненного текста в заданную ограничивающую рамку, и он будет обрабатывать разрывы строк для вас.

public class HeaderFooterPageEvent extends PdfPageEventHelper {
  private String headerStr, footerStr;
  private Rectangle hBox, fBox;
  public HeaderFooterPageEvent(String hStr, Rectangle _hBox, String fString, Rectangle _fBox) {
    headerStr = hStr;
    hBox = _hBox;
    footerStr = fStr;
    fBox = _fBox;
  }

  public onEndPage(PdfWriter writer, Document doc) {
    // draw the header text.
    ColumnText.showTextAligned(writer.getDirectContent(),
      Element.ALIGN_RIGHT, headerStr, hBox.getRight(), hBox.getTop, 0);

    // draw the footer text.
   ColumnText.showTextAligned(writer.getDirectContent(),
      Element.ALIGN_RIGHT, footerStr, fBox.getRight(), fBox.getTop, 0);
  }
}

Это не будет работать так хорошо, если ваш верхний и нижний колонтитулы представлены в HTML. Для этого вам придётся совершить несколько хакерских атак.

1) Создайте новый Document / PdfWriter с полями страницы, соответствующими размеру (высоте и ширине) заголовка.
2) Визуализируйте весь заголовок HTML на этой странице.
3) сохранить в формате pdf.
4) Импортируйте эту страницу PDF в другой документ и нарисуйте ее следующим образом:

public onEndPage(PdfWriter writer, Document doc) {
  PdfReader reader = new PdfReader(headerPDFPath);
  PdfImportedPage headerPageImport = writer.getImportedPage(reader, 1); // 1 -> first page
  PdfContentByte cb = writer.getDirectContent();
  cb.addTemplate(headerPageImport, hBox.bottom(), hBox.left());
}
...