Поддержка HTML в верхнем колонтитуле для iText 7

Для iText 5 для поддержки html можно использовать следующую ссылку:

http://developers.itextpdf.com/examples/page-events/page-events-headers-and-footers#1331-htmlheaderfooter.java

Для 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?


person kz2014    schedule 12.12.2016    source источник
comment
html2pdf для iText 7 ожидается в начале 2017 года.   -  person Amedee Van Gasse    schedule 12.12.2016
comment
Чтобы расширить ответ Амеди: класс Element используется для повторения Html-элемента и определен в XmlWorker. Эквивалент XmlWorker для iText7 в настоящее время известен как Html2Pdf и находится в разработке. Первая версия ожидается в начале 2017 года :)   -  person Samuel Huylebroeck    schedule 12.12.2016


Ответы (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);
    }
}
person Alexey Subach    schedule 26.03.2017