itext - iText 7 页眉页脚中的 HTML 支持

标签 itext itext7

对于 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 对应的是什么?

最佳答案

我很高兴地通知您,iText7pdfHTML 插件已发布! 要将 HTML 代码段转换为元素列表,请使用 HtmlConverter.convertToElements,它是 XMLWorkerHelper.parseToElementListiText7 替代方案。

未设置其他 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);
    }
}

关于itext - iText 7 页眉页脚中的 HTML 支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41098063/

相关文章:

.net - 在 MVC 和 .NET 中使用 iText 7 生成供下载的 PDF

java - CSS 背景属性在使用 java 的 pdfHTML iText7 中不起作用

java - 如何从 iText PDFReader 获取字节数组

java - 使用 iText 打开 PDF 时自动打开打印对话框

java - 为什么我的表单在没有调用 flattenFields 方法的情况下就被展平了?

java - 将 JFreeChart 从 Itext 5 迁移到 7

java - Itext7 - 自动调整图像大小

java - Itextpdf停止正确转换pdf

java - 如何在pdf-java中设置字段名称

java - 如何在java iText PDF中的多个页面上创建复选框?