iText PdfSmartCopy создает дубликаты шрифтов - PullRequest
0 голосов
/ 05 ноября 2018

Я использую 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

1 Ответ

0 голосов
/ 07 ноября 2018

В отличие от вашего предположения иметь

два файла с встроенными неподтвержденными шрифтами

шрифты имеют подмножество, и иначе так.

Из file1.pdf:

from file 1

Из файла2.pdf:

from file 2

Как вы можете видеть, существует множество различий, есть непустой глиф для "1" в файле 1, но не в файле 2, и наоборот для "2" и т. Д. *

Таким образом, эти шрифты не идентичны и PdfSmartCopy правильно не заменил один на другой.


Я предполагаю, что pdffonts не распознал их как подмножество, потому что они не помечены должным образом как шрифты подмножества, в частности, их имена не имеют требуемых тегов подмножеств и не имеют опционального CharSet список имен символов, определенных в подмножестве шрифтов. Таким образом, шрифты не просто не отменены, поднабор также выполнен неправильно.

Таким образом, не вините pdffonts в неверных предположениях, а вместо этого используйте генератор PDF, который создал входные файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...