【问题标题】:iText partial HTML renderingiText 部分 HTML 渲染
【发布时间】:2014-12-30 00:00:07
【问题描述】:

我正在使用适用于 Java 的 iText PDF 库来生成 PDF。我想部分呈现一些 HTML 内容而不是整个文档。这是我想要部分呈现为 HTML 的部分。

waterIndexTrendTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT); 
waterIndexTrendTable.addCell(new Phrase(weit.getUnit(), smallFont));  

waterIndexTrendTable 是一个 PdfPTable。 weit.getUnit() 返回带有 HTML 标签的内容。我想将 HTML 呈现为 PDF。

【问题讨论】:

    标签: java html itext


    【解决方案1】:

    如果weit.getUnit() 返回 HTML,那么如果您使用问题中显示的 sn-p,您将在单元格中看到该 HTML 代码。

    为避免这种情况,您需要将 HTML 呈现为 iText 对象列表。这显示在ParseHtmlObjects 示例的第一部分:

    // CSS
    CSSResolver cssResolver =
            XMLWorkerHelper.getInstance().getDefaultCssResolver(true);
    // HTML
    HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
    htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
    htmlContext.autoBookmark(false);
    // Pipelines
    ElementList elements = new ElementList();
    ElementHandlerPipeline end = new ElementHandlerPipeline(elements, null);
    HtmlPipeline html = new HtmlPipeline(htmlContext, end);
    CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
    // XML Worker
    XMLWorker worker = new XMLWorker(css, true);
    XMLParser p = new XMLParser(worker);
    p.parse(new FileInputStream(HTML));
    

    现在您有了一个对象elements,其中包含可以添加到单元格的 iText 对象:

    PdfPCell cell = new PdfPCell;
    for (Element e : elements) {
        cell.addElement(e);
    }
    

    假设weit.getUnit()返回的HTML包含的数据比你需要的多,那么iText很难读懂你的想法,找出你想保留哪一部分,哪一部分要扔掉。

    也许您只对特定的元素类型感兴趣。在这种情况下,您可以检查 eParagraphList,还是 iText 中可用的任何其他类型。

    或者,也许您可​​以将 HTML 缩减为需要预先呈现的部分。

    无论如何:您不应该期望计算机能够猜测出某些 HTML 的哪些部分对您很重要,哪些部分不重要 ;-)

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多