【问题标题】:Using a CFF / Type1c / Type2 font in Java在 Java 中使用 CFF / Type1c / Type2 字体
【发布时间】:2012-11-10 18:48:53
【问题描述】:

我正在尝试在 Java 应用程序中使用一些嵌入在 PDF 文件中的字体。显然,Java 能够加载 Type1 和 TrueType 字体。根据几个网站的说法,PDF 中的 Type1c 字体基本上是 CFF 或 Type2 字体。 Java 7 的一个新特性是加载 CFF 字体,但 Font.createFont() 这样不起作用。

那么我哪里错了? Type1c 字体真的是 CFF/OpenType 字体吗?需要转换吗?

【问题讨论】:

  • Font.createFont 与嵌入在 PDF 中的数据不起作用,无论我使用哪种类型参数。由于 SUN 的旧 Java PDF 解析器项目能够将字体解析为 Type1C,因此我假设我将正确的字节传递给 createFont 方法。
  • 怎么不工作?它会抛出异常吗?或者它似乎工作但没有显示字形?正如 Mark 所暗示的,字体只能在需要时嵌入到 PDF 中。你有什么相关的代码可以看吗?以及与您的代码相结合的示例 PDF 允许重现问题?
  • createFont with TYPE1_FONT 导致“java.awt.FontFormatException: bad pfa font”,对于 TRUETYPE_Font 它是“java.awt.FontFormatException: Unsupported sfnt /tmp/+~JF4438581181045380297.tmp”

标签: java pdf fonts


【解决方案1】:

字体是子集的吗? (在这种情况下,它将只包含一些字符而不是整个字体)。

一般来说,嵌入在 PDF 中的 CFF 字体可能需要大量转换工作才能使其普遍可用 - 如果您一直在我们的博客 (http://blog.idrsolutions.com) 上关注我们的 PDF 到 HTML5 转换器的开发,你会看到很多关于字体各种问题的帖子。

google (http://code.google.com/p/sfntly/) 提供了一个有趣的 Java 字体工具,如果您正在研究字体操作,fontforge 很有用。

【讨论】:

    【解决方案2】:

    恐怕您将不得不确切地找出您要打的仗。不要相信有关字体的网站,请阅读 PDF 规范: http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf

    您正在寻找第 9.6 章 - 简单字体和 9.7 - 复合字体。

    总而言之,PDF 文件中的字体可以是多种类型: - 类型 0 - 类型 1 - 类型 3 - TrueType

    Type 1 和 TrueType 是最简单的,您很可能在 PDF 文件中遇到它们。 Type 3 是一种字体类型,您可以在其中使用图形来绘制字符。不是很常见。

    Type 0 是一种更复杂的字体类型,最初设计用于允许您使用大型字符集(想想日文/中文),但现在它也由许多专业设计和布局应用程序常规生成。此 Type 0 字体类型有两个子类型: - SubType 0,这是一种 Type 1 字体,被按摩到 Type 0 夹克中,以及 - SubType 2,这是一种 TrueType 字体按摩到 Type 0 夹克

    在所有情况下,系统上的“真实”字体与嵌入在 PDF 文件中的相同字体之间存在显着差异。

    首先查看包含您要使用的字体的 PDF 文件。使用 callas (http://www.callassoftware.com/callas/doku.php/en:download) 的 pdfToolbox 或 Enfocus (http://www.enfocus.com/en/products/browser) 的 Browser 等工具.这两个工具都允许您研究 PDF 文件的低级结构,包括查看实际的页面描述代码和查看字体字典。 pdfToolbox 特别擅长深入研究 PDF 文件中的字体,包括查看实际形状和用于绘制这些形状的说明。

    【讨论】:

      【解决方案3】:

      FontVerter 是我不久前编写的一个开源 Java 库,它可以将来自 PDF 的裸 CFF* 和 Type0/复合字体转换为 OTF/TTF 和 WOFF1/2。它还可以尝试修复和规范化在浏览器中无法正常工作的 OTF/TTF 字体,我发现嵌入在 PDF 中的开放式字体经常存在各种问题,例如缺少表格,这会阻止 chrome 正确呈现它们。

      FontVerter github

      (*bare CFF = type1c 我相信?,有点过了,我忘记了哪个类型是哪个)

      【讨论】:

        猜你喜欢
        • 2013-03-22
        • 2019-09-21
        • 1970-01-01
        • 2021-06-19
        • 2012-02-05
        • 2021-11-15
        • 2017-08-21
        • 2013-08-23
        • 2016-09-16
        相关资源
        最近更新 更多