itext html 转 pdf 不嵌入字体

itext html to pdf without embedding fonts

我正在按照 Chapter 6 of iText 7: Converting HTML to PDF with pdfHTML 中关于添加额外字体的指南进行操作:

public static final String FONT = "src/main/resources/fonts/cardo/Cardo-Regular.ttf";
public void createPdf(String src, String font, String dest) throws IOException {
    ConverterProperties properties = new ConverterProperties();
    FontProvider fontProvider = new DefaultFontProvider(false, false, false);
    FontProgram fontProgram = FontProgramFactory.createFont(font);
    fontProvider.addFont(fontProgram, "Winansi");
    properties.setFontProvider(fontProvider);
    HtmlConverter.convertToPdf(new File(src), new File(dest), properties);
}

虽然它按预期工作并嵌入了正在使用的字体子集,但我想知道是否有办法让生成的 PDF 文档完全嵌入字体.这在创建 BaseFont 实例并将 embedded 属性 设置为 false 并使用它们构建各种 PDF 构建块时是可能的。我正在寻找的是使用 HtmlConverter.convertToPdf().

时的相同行为

你通常应该做的是覆盖 FontProvider:

FontProvider fontProvider = new DefaultFontProvider(false, false, false) {
    @Override
    public boolean getDefaultEmbeddingFlag() {
        return false;
    }
};

但是,问题是目前这个字体提供程序将被 pdfHTML 覆盖,进一步进入 ProcessorContext#reset 的管道。

虽然此问题未在 iText 中修复,但您可以根据需要构建自定义版本的 pdfHTML。回购位于 https://github.com/itext/i7j-pdfhtml and you are interested in this 行。只需将其替换为上面的重载并构建 jar。

UPD 此修复从 pdfHTML 2.1.3 开始可用。从该版本开始,您可以自由使用自定义字体提供程序。