我正在使用iText(5.5.12)PdfSmartCopy
将两个具有嵌入式,未分组字体的文件合并在一起(并且恰巧是在同一台计算机上生成的,因此我知道它们是指的是同一字体),希望最终结果将只有该字体的一个副本。
但是我发现合并结果的字体嵌入了两次。
String[] srcs = ...
Document document = new Document();
PdfCopy copy = new PdfSmartCopy(document, new FileOutputStream(result));
document.open();
for (int i = 0; i < srcs.length; i++) {
PdfReader reader = new PdfReader(srcs[i]);
copy.addDocument(reader);
copy.freeReader(reader);
reader.close();
}
document.close();
pdffonts
在相关文件上的输出:输入文件1:
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
TimesNewRomanPSMT CID TrueType Identity-H yes no yes 14 0
输入文件2:
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
TimesNewRomanPSMT CID TrueType Identity-H yes no yes 11 0
输出文件:
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
TimesNewRomanPSMT CID TrueType Identity-H yes no yes 3 0
TimesNewRomanPSMT CID TrueType Identity-H yes no yes 25 0
答案 0 :(得分:1)
与您的假设相反
两个具有嵌入式,未分组字体的文件
字体是的子集,并且是不同的。
来自file1.pdf:
来自file2.pdf:
如您所见,存在许多不同之处,文件1中有一个非空字形,但文件2中没有“ 1”字形,反之亦然,“ 2”等等……
因此,这些字体并不相同,并且PdfSmartCopy
不能正确替换另一种字体。
我认为pdffonts
不会将它们识别为子集,因为它们没有正确地标记为子集字体,特别是其名称没有必需的子集标签,并且没有可选的 CharSet 列出了字体子集中定义的字符名称。因此,字体不仅没有被取消设置,而且设置也被错误地完成了。
因此,不要怪您pdffonts
的不正确假设,而应该归咎于创建输入文件的PDF生成器。