【问题标题】:Merging multiple PDFs using iText PdfCopy in JAVA在 JAVA 中使用 iText PdfCopy 合并多个 PDF
【发布时间】:2015-08-17 16:38:34
【问题描述】:

我正在使用 iText 在 JAVA 中合并多个 PDF 文档。我基本上使用 PdfCopy。现在出现以下问题,我正面临着这个问题-

  1. 来自不同组件文件的相同字体在最终 PDF 中重复出现,导致 PDF 包含大约 100 个相同字体的实例。

  2. 另一个最大的问题是 - 我得到的是 Arial MT 字体而不是 Arial。现在两者之间的确切区别是什么?这是 iText 问题还是 Acrobat 问题?我已经交叉检查 - 我的 Windows 字体目录中没有任何 ArialMT.ttf 文件,只有 Arial.ttf。由于这使我的产品无用,如何解决?

【问题讨论】:

  • 1:你试过PdfSmartCopy而不是PdfCopy吗?它经过优化以重用字体或图像等资源;但是,不利的一面是,它需要更多内存来执行合并。 2 iText 不会像那样交换字体。因此,下面还有一些其他问题在起作用。您能否提供示例输入和输出 PDF 以及分析的关键来源?
  • 有趣的事实:PDF 文件不包含字体,它们包含字体的派生词。仅仅因为两个文件都说它们使用字体 X 并不意味着它们都使用字体 X 的相同 derivative,因此除非 PdfCopy 足够聪明以统一不同的字体子集,否则 PDF 中的两种字体资源实际上不同的。
  • 但是 Mike,您对 Arial MT 字体问题有任何想法吗?

标签: fonts pdf-generation itext font-face acrobat


【解决方案1】:

问题 1:

您声称您合并了具有 相同 字体的不同 PDF,并且这些字体是重复的。请注意,您的指控前提可能是错误的。

每个单独的 PDF 文件都可能包含该字体的子集。不同的文件需要不同的字体子集,PdfCopy(也不是PdfSmartCopy)都不能合并字体子集。这可能会导致一个臃肿的 PDF 文件,其中包含太多相同字体的字体子集。 (这段是从How to parse multiple HTML files into a single PDF?复制/粘贴的)

您如何知道您是否遇到了字体子集?答案在这里:What are the extra characters in the font name of my PDF?

如果您查看 Adob​​e Reader 中“文档属性”下的“字体”选项卡,您会看到类似“嵌入式子集”的内容。

问题 2:

如果您查看 Windows 字体目录,您会发现一个字体文件 arial.ttf。那是 Arial MT 的字体文件。 MT 代表设计 Arial 的公司。见Does one need to have a license for fonts if we are using ttf files in itext?

这是我在 Windows 上查看 arial.ttf 的属性时看到的:

在公司下,您可以阅读“The Monotype Corporation”。 MT是Monotype的缩写。

但是:所有这些都无关紧要,因为您正在合并 现有的 PDF,其中包含现有的嵌入字体。在这种情况下,iText 并不关心您在 Windows 上拥有或不提供哪些字体。它只采用 现有 PDF 中定义的字体,如果这些字体被命名为 Arial MT,那么这就是 iText 将使用的名称。

额外提示:

我提到的所有问题都包含在免费电子书The Best iText Questions on StackOverflow 中。这本书真的值得下载。我使用这本书根据以前的 StackOverflow 帖子快速找到与您的问题相关的所有答案。

【讨论】:

    猜你喜欢
    • 2019-01-03
    • 2018-02-07
    • 1970-01-01
    • 2019-03-28
    • 2014-02-07
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多