XMLWorkerHelper 在将 HTML 文本转换为 iText ElementList 时使用新字体

XMLWorkerHelper use new font while converting HTML text to iText ElementList

我想用一些新字体将我的 HTML 文本转换为 iText 的 ElementList。 我不想使用 parseXHtml 函数,因为我需要为 table 的每个单元格分别提供 PDF 文本。 有什么方法可以在从 HTML 转换为 ElementList.

时使用我的 TTF 字体文件

我正在使用:

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

将我的 HTML 文本转换为 ElementList 但如果我指定字体 "Courier New" 在我的 HTML 中它不呈现该字体但默认为 "Times New Roman"。我该如何使用该字体? 正如我之前提到的,我只希望 ElementList 来自 HTML 文本而不是转换后的 PDF。

请参阅了解具体的字体处理。

考虑到 PDF 文件生成本身,我习惯于构建自己的 PDF table 并使用如下内容填充其单元格,定义 htmlContextcssResolver作为可重复使用的 class 属性:

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));
        }
    }
}