访问PDF中的字体文件

My *_*rts 6 java pdf fonts extract pdfbox

我们目前正与一些出版商合作,通过他们的PDF生成在线图书.我们的遗留应用程序使用flex,因此我们正在使用SWFToolsPDF2SWF将PDF转换为SWF文件.

我们遇到的问题是,当用户执行搜索时,我们的弹性阅读器不会突出显示SWF文档中的文本.经过快速调查后,我们发现在提取文本时我们需要嵌入PDF文档使用的字体:

http://wiki.swftools.org/wiki/How_do_I_highlight_text_in_the_SWF%3F

pdf2swf -F $YOUR_FONTS_DIR$ -f input.pdf -o output.swf
Run Code Online (Sandbox Code Playgroud)

从上面的代码中可以看出,我们需要一个包含该PDF中字体的字体目录的路径.

由于我们将转换大量PDF,是否可以直接通过PDF访问字体文件而不是在我们的应用程序中存储大量字体?

附加信息

我们的应用程序是用Java编写的.

我们目前在应用程序中使用PDFBox和Ghostscript,因此如果任何解决方案使用这些库,那么这将是首选,但我们对所有想法持开放态度.

Ken*_*enS 7

PDF文件不包含字体'文件',它们甚至可能根本不包含任何字体,但这种情况很少见.嵌入的字体数据可能是令人眼花缭乱的各种格式:

  • 类型1 PostScript字体
  • 键入3 PostScript
  • 字体TrueType字体
  • PostScript CFF字体
  • 带有类型1 PostScript轮廓的CIDFonts
  • 具有类型3 PostScript轮廓的CIDFonts
  • 带有TrueType轮廓的CIDFonts
  • 带有CFF轮廓的CIDFonts
  • 带位图图像的CIDFonts

您的应用程序是否能够读取所有这些字体格式?如果你想使用它们,你必须使用PDF文件中嵌入的字体,因为这些字体通常是子集字体,并提供自定义编码,这意味着即使你有原始字体,你也不能使用它因为编码不正确.

当然可能这些PDF文件都是以一致的方式创建的,并且不使用嵌入字体,但我怀疑......

  • 不确定我想要一个来源的答案的哪一部分?PDF参考列出了所有支持的字体类型.为了跟进Rup的答案,任何嵌入的子集字体都将使用与ASCII或Unicode代码点不对应的字符代码.事实上,大多数PDF文档都包含不使用Unicode的文本.当我维护用于从PDF中提取可用文本的Ghostscript txtwrite设备时,我可以肯定地说这是一项艰巨的任务,虽然它可能比80%的可靠性更好,但它无法从所有PDF文件中提取文本.NB CIDFonts也用于拉丁语. (2认同)