在 JAVA 中使用 iText PdfCopy 合并多个 PDF

Merging multiple PDFs using iText PdfCopy in JAVA

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

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

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

问题一:

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

每个单独的 PDF 文件都可能包含该字体的一个子集。不同的文件需要不同的字体子集,PdfCopy(就此而言 PdfSmartCopy)都不能合并字体子集。这可能会导致 PDF 文件膨胀,其中包含太多相同字体的字体子集。 (此段来自 copy/pasted)

你怎么知道你是否遇到了字体子集?在这里回答:What are the extra characters in the font name of my PDF?

如果您在 Adob​​e Reader 中查看“文档属性”下的“字体”选项卡,您会看到类似 "embedded subset" 的内容。

问题二:

如果您查看 Windows 字体目录,您会找到一个字体文件 arial.ttf。这是 Arial MT 的字体文件。 MT 代表设计 Arial 的公司。参见

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

公司下,可以阅读"The Monotype Corporation"。 MT是Monotype的缩写。

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

额外提示:

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