【问题标题】:Embed non-embedded fonts in PDF with IText使用 IText 在 PDF 中嵌入非嵌入字体
【发布时间】:2016-08-29 14:46:39
【问题描述】:

所以我有以下问题。我收到一个包含一组字体的PDF 文件。这些字体没有嵌入到文件中。这是一个简单的例子:

我想将这些字体嵌入到PDF 中,因此它们是独立的并且始终可用。但事情似乎没有那么简单。我正在使用IText 进行我的PDF 处理。

我已阅读并尝试了以下问题/答案:

但让我最接近的是以下示例:EmbedFontPostFacto.java(来自书中)。提供Arial.ttf 文件时,我能够嵌入Arial 字体。

但是有了这个,就像其他例子一样,我需要字体的源文件才能嵌入它。就我而言,我没有源文件。但是我可能会将它们放在系统上。所以我想在系统上查询我可用的字体,看看它是否对应于给定的字体。

类似的东西

GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
java.awt.Font[] fonts = e.getAllFonts();
for(java.awt.Font f : fonts){
    System.out.println(f.getFontName());
}

但我无法将给定的java.awt.Font 转换为RandomAccessFilebyte[] 以用于嵌入字体文件本身。是否有另一种方法可以将字体嵌入到PDF,而无需字体本身的源文件?

【问题讨论】:

    标签: java pdf fonts itext itextpdf


    【解决方案1】:

    对于 Windows C:\Windows\Fonts 等包含所有字体文件,并且在资源管理器中还显示字体名称。所以手动搜索是可行的。

    在 java 中,您可以使用 GraphicsEnvironment.getAvailableFontFamilyNames()Font.getFamilyName() 从 PDF 中检查名称,例如“Arial MT”。

    但是字体中缺少文件的吸气剂。

    所以列出字体目录的所有文件,并将每个文件作为字体连续加载。

    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    Font font = Font.createFont(Font.TRUETYPE_FONT, ttfFile);
    ge.registerFont(font); // If you want to load the font.
    
    if (pdfFontName.startsWith(font.getFamilyName()) {
        System.out.printf("%s - %s / %s%n", ttfFile.getName(), font.getFamilyName(),
                font.getName());
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-12
      • 2015-12-04
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      相关资源
      最近更新 更多