Поддержка HTML в верхнем колонтитуле для iText 7
Для iText 5 следующая ссылка может быть использована для поддержки HTML:
http://developers.itextpdf.com/examples/page-events/page-events-headers-and-footers
Для iText 7 библиотеки изменились. Кто-нибудь знает, как это сделать для iText 7?
Код, используемый в настоящее время:
protected class TableFooterEventHandler implements IEventHandler {
protected ElementList header;
protected ElementList footer;
public TableFooterEventHandler() throws IOException {
header = XMLWorkerHelper.parseToElementList(HEADER, null);
footer = XMLWorkerHelper.parseToElementList(FOOTER, null);
}
@Override
public void handleEvent(Event event) {
PdfDocumentEvent docEvent = (PdfDocumentEvent) event;
PdfDocument pdfDoc = docEvent.getDocument();
Document document = new Document(pdfDoc).setTextAlignment(TextAlignment.JUSTIFIED);
PdfPage page = docEvent.getPage();
Rectangle[] columns = {
new Rectangle(36, 36, 254, 770),
new Rectangle(305, 36, 254, 770)};
document.setRenderer(new ColumnDocumentRenderer(document, columns));
for(Element e : header)
document.add(new Paragraph(header).setFont(title ? bold : normal));
PdfCanvas canvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);
new Canvas(canvas, pdfDoc, new Rectangle(36, 20, page.getPageSize().getWidth() - 72, 50)).add(header);
}
}
public static void main(String[] args) throws Exception{
File file = new File(DEST);
file.getParentFile().mkdirs();
new HtmlHeaderFooter().createPdf(DEST);
}
public void createPdf(String filename) throws Exception{
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
Document doc = new Document(pdfDoc, PageSize.A4);
doc.setMargins(36, 36, 72, 36);
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, (new TableFooterEventHandler()));
for (int i = 0; i < 150; i++) {
doc.add(new Paragraph("Hello World!"));
}
doc.add(new AreaBreak());
doc.add(new Paragraph("Hello World!"));
doc.add(new AreaBreak());
doc.add(new Paragraph("Hello World!"));
doc.close();
}
В соответствии:
for(Element e : header)
Элемент устарел. Что соответствует iText 7?
1 ответ
Я рад сообщить, что pdfHTML
дополнение для iText7
был выпущен! Чтобы преобразовать фрагмент HTML в список элементов, используйте HtmlConverter.convertToElements
, который является iText7
альтернатива XMLWorkerHelper.parseToElementList
,
Простой пример, когда нет дополнительного ConverterProperties
установлены:
List<IElement> headerElements = HtmlConverter.convertToElements(html);
После этого вы можете использовать эти элементы по своему усмотрению, например, добавив их в Canvas
как вы хотели сделать в своем коде:
Canvas canvas = new Canvas(canvas, pdfDoc, new Rectangle(36, 20, page.getPageSize().getWidth() - 72, 50));
for (IElement headerElement : headerElements) {
// Making sure we are adding blocks to canvas
if (headerElement instanceof IBlockElement) {
canvas.add((IBlockElement)headerElement);
}
}