java - 访问 PDF 中的字体文件

标签 java pdf fonts extract pdfbox

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

我们遇到的问题是,当用户执行搜索时,SWF 文档中的文本没有被我们的 flex 阅读器突出显示。经过快速调查后,我们发现在提取文本时,我们需要嵌入 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

正如您从上面的代码中看到的,我们需要一个字体目录的路径,该目录包含在该 PDF 中找到的字体。

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

<我> 附加信息

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

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

最佳答案

PDF 文件不包含字体"file",它们甚至可能根本不包含任何字体,尽管这种情况很少见。嵌入的字体数据可以是多种多样的格式:

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

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

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

关于java - 访问 PDF 中的字体文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8758842/

相关文章:

java - 从 .jar 文件复制文件夹

java - Mylyn 任务 - 在代码中使用 TODO 分配任务?

java - 在 iText 中合并两个模板

swift - 通过共享表从 NSData 共享 PDF

css - 数字低于html页面上的文字

java - Java 中删除元素时迭代 LinkedList

java - 无法在 Java Applet 中将文件设置为可写

pdf - Grails呈现具有特定布局和多个页面的PDF?

java - 使用 JButton 增加/减少 textArea 内的字体大小

pdf - 14种标准PDF字体和字符编码