首页 文章

XMLworkerHelper 在将 html 文本转换为 itext elementList 时使用新字体

提问于
浏览
0

我想用一些新字体将我的 html 文本转换为 itext elementList。我不想使用 parseXhtml 函数,因为我需要为表格的每个单元格单独使用 pdf 文本。有什么办法可以在从 html 转换为 itext elementlist 时使用我的 ttf 字体文件。我正在使用:

ElementList el1 = XMLWorkerHelper.parseToElementList(chunk1Text, CSS);

将我的 html 文本转换为 itext 元素列表,但如果我在我的 html 中指定了像“Courier New”这样的字体,它不会渲染该字体,但默认为“times new roman”.How 我可以使用该字体吗?正如我之前提到的,我只想从 htmltext 中获取 itext elementlist 而不是转换后的 pdf。

1 回答

  • 1

    有关具体的字体处理,请参阅我的评论。

    考虑到 pdf 文件生成本身,我习惯于构建自己的 pdf 表并用下面的内容填充其单元格,htmlContextcssResolver被定义为可重用的类属性:

    private ElementList getElementsFromHtml(final String html) throws IOException {
        //...
    
        // Pipelines
        final ElementList elements = new ElementList();
    
        final ElementHandlerPipeline end = new ElementHandlerPipeline(elements, null);
        final HtmlPipeline htmlPipeline = new HtmlPipeline(htmlContext, end);
        final CssResolverPipeline cssPipeline = new CssResolverPipeline(cssResolver, htmlPipeline);
    
        // XML Worker
        final XMLWorker worker = new XMLWorker(cssPipeline, true);
        final XMLParser p = new XMLParser(true, worker, htmlContext.charSet());
    
        final String resolvedHtml = "<body>" + html + "</body>";
        p.parse(new ByteArrayInputStream(resolvedHtml.getBytes(htmlContext.charSet())), htmlContext.charSet());
    
        return elements;
    }
    
    public void addHtml(final PdfPCell cell, final String html) throws IOException {
        for (final Element e : getElementsFromHtml(html)) {
            if (ColumnText.isAllowedElement(e)) {
                cell.addElement(e);
            } else {
                LOG.error(String.format("### Element not allowed! ###\nElement (type: %d): %s\nContext: %s", e.type(), e.toString(), html));
            }
        }
    }
    

相关问题