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

时间:2015-06-03 12:49:35

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

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

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

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

1 个答案:

答案 0 :(得分:0)

问题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?

如果您查看Adobe 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属性时看到的内容:

arial.ttf Properties

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

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

额外提示:

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