当前位置: 首页 > 知识库问答 >
问题:

不嵌入字体的itext html到pdf

王俊哲
2023-03-14
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()时,我正在寻找同样的行为。

共有1个答案

赵健柏
2023-03-14

您通常应该做的是重写FontProvider:

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

但是,目前的问题是,这个字体提供程序将被pdfHTML覆盖到processorcontext#reset的管道中。

虽然这个问题在iText中没有得到解决,但您可以根据自己的需要构建一个自定义版本的pdfHTML。repo位于https://github.com/itext/i7j-pdfhtml,您对这一行感兴趣。只需将其替换为上面的重载并构建jar即可。

 类似资料:
  • 我正在使用PDFBox从现有的PDF模板构建文档,因此它会打开文件,向其中添加文本,然后保存。除了尝试使用外部TTF字体外,它工作得很好。我尝试了不同的方法,花了两天时间寻找解决方案,但PDFBox上没有太多。 这里有一些代码,使用字体“Tardy Kid”,因为它不能被误认为其他任何东西,也不太可能是任何标准库的一部分。 代码执行良好,显示println中的“TardyKid”(显示字体已加载且

  • 所以我有下面的问题。我收到一个文件,其中包含一组字体。这些字体没有嵌入到文件中。下面是一个简单的例子: 我希望将这些字体嵌入到中,这样它们就可以自包含并且始终可用。但事情似乎没那么简单。我正在使用进行处理。 我已经阅读并尝试了以下问题/答案: null

  • 问题内容: 我有一个使用Foxit表单设计器创建的pdf文件。在我的设计系统上,我安装了条形码字体。条形码字体在AcroField之一中使用。foxit似乎没有在文档中嵌入字体。 我也有一些客户的计算机上未安装条形码字体,因此我想将该字体嵌入到PDF中。我是否可以使用iText将AcroFields中使用的字体嵌入到PDF中? 编辑: 字体似乎包含在文本中,但没有包含在字段中,因此字体(条形码)将

  • 我在apache fop 1.0环境中使用嵌入式字体: 配置文件如下所示: 这工作得很好,文本以字体hnlt57con呈现。 我现在想做的是用粗体呈现一些文本: 配置文件如下所示: 不幸的是,文本没有以粗体显示,但是以和上面例子一样的方式显示。 添加一个额外的字体三元组(如 http://www.scriptorium.com/whitepapers/fop_fonts/FOP_fonts5.ht

  • 我用PDFBox填写一个PDF表单,我在保存它之前把它变平。窗体具有文本和窗体字段的自定义字体。当我在未安装此自定义字体的设备上打开输出文档(具有平坦字段)时,普通文本的字体仍然正确,但平坦字段的字体显示为回退(?)字体。在安装了这种自定义字体的设备上,一切看起来都和预期的一样。 有没有办法在展平窗体后,强制对所有文本使用相同的自定义字体? 使用PDFBOX填写PDF表单时使用的代码(简化):

  • 问题内容: 我有一个自定义字体,我想在Java程序中炫耀它,用户无需安装就可以查看它。有谁知道这是怎么做到的吗? 工作解决方案 我已经实现了以下内容: 问题答案: 我从未做过,但似乎您想要的方法是 导入字体 或者 该参数是或,而或参数包含字体的二进制数据。 导入后使用字体: 要使Font对Font构造函数可用,必须通过调用在中注册返回的Font 。