我正在尝试在Java应用程序中使用嵌入在PDF文件中的一些字体。显然,Java能够加载Type1和TrueType字体。根据几个网站,PDF中的Type1c字体基本上是CFF或Type2字体。 Java 7的一个新功能是加载CFF字体,但Font.createFont()由此不起作用。
那我哪里错了? Type1c字体真的是CFF / OpenType字体吗?是否需要转换?
答案 0 :(得分:2)
字体是否是子集? (在这种情况下,它只包含一些字符而不是整个字体)。
一般来说,嵌入在PDF中的CFF字体可能需要大量的转换工作才能使它们通常可用 - 如果您在我们的博客(http://blog.idrsolutions.com)上关注我们的PDF到HTML5转换器的开发,你会看到很多关于字体各种问题的帖子。
Google提供了一个有趣的Java字体工具(http://code.google.com/p/sfntly/),如果您正在查看字体操作,则fontforge非常有用。
答案 1 :(得分:1)
你将不得不找出你正在努力战斗的战斗我害怕。不要相信有关字体的网站,请阅读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文件中遇到它们。类型3是一种字体类型,您可以使用图形来绘制字符。不太常见。
类型0是一种更复杂的字体类型,它最初设计为允许您使用大字符集(比如日语/中文),但现在它也经常由许多专业设计和布局应用程序生成。此Type 0字体类型有两种子类型: - SubType 0,它是按摩到Type 0夹克的Type 1字体,和 - SubType 2,这是一种TrueType字体按摩到Type 0夹克
在所有情况下,系统中存在的“真实”字体与嵌入PDF文件中的相同字体之间存在显着差异。
首先查看包含您要使用的字体的PDF文件。使用来自callas的pdfToolbox(http://www.callassoftware.com/callas/doku.php/en:download)或Enfocus的浏览器(http://www.enfocus.com/en/products/browser)等工具。这两个工具都允许您研究PDF文件的低级结构,包括查看实际的页面描述代码和查看字体词典。 pdfToolbox特别擅长深入研究PDF文件中的字体,包括查看实际形状和用于绘制这些形状的指令。
答案 2 :(得分:0)
FontVerter是我之前写过的一个开源java lib,它可以将来自PDF的裸CFF *和Type0 /复合字体转换为OTF / TTF和WOFF1 / 2。它还可以尝试修复和标准化在浏览器中无法正常工作的OTF / TTF字体,我发现嵌入在PDF中的开放式字体经常出现各种问题,例如缺少表格会阻止chrome正确呈现它们。
(*裸CFF = type1c我相信?,它有点儿,我忘记了哪种类型)