2015-05-09 1 views
0

Я использую TCPDF для создания файлов PDF.Выход Ghostscript PDF: текст не может быть скопирован

Поскольку TCPDF есть ошибка в Подменит шрифт (link to bug),
я использую следующую команду Ghostscript для подмножества шрифтов в TCPDF созданного PDF файл:

gswin64c.exe -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \ 
    -dPDFSETTINGS=/prepress -dUseFlateCompression=false -dEmbedAllFonts=true \ 
    -dSubsetFonts=true -sOutputFile="out.pdf" "input.pdf" 

Он прекрасно работает и уменьшает файл размер. Но когда я пытаюсь проанализировать PDF-файл как текст (с помощью poppler ->pdftotext) или когда я открываю файл в программе просмотра PDF и выбираю текст, я получаю тарабарщину на шрифтах UTF-8.

Для того, чтобы воспроизвести его здесь, это file before ghostscript и file after ghostscript.

Если вы открываете его в Adobe Reader, скопируйте текст и вставьте его в другое место, вы увидите, что вы можете скопировать текст из файла «до GS». Но во втором файле вы получаете тарабарщину, если не копируете английские символы (файлы находятся на иврите).

Помимо этого файл выглядит великолепно.

У вас есть идея о том, как сохранить шрифты UTF8 в Ghostscript?

+0

Вы хорошо описываете свою проблему, тогда вы хотите, чтобы мы * «воспроизвели ее» *, но не предоставили нам вашу версию Ghostscript ?! Итак: какую версию вы используете? (output 'gs -version') –

+0

Я добавил его к вопросу, версия 9.16 – Wazime

ответ

1

Да, не подмножайте шрифты. Подстановка шрифтов заставляет их перекодировать. Поскольку ваши шрифты не имеют CMap ToUnicode, копирование/вставка работает только с помощью эвристики (то есть коды символов должны иметь смысл). В вашем случае коды символов являются или, как представляется, Unicode, поэтому вам повезло, работа эвристики.

Как только вы подмножите шрифты, Ghostscript перекодирует их. Таким образом, коды символов больше не Юникод. В отсутствие CMU ToUnicode копия/вставка перестает работать.

Единственный способ заставить это работать - не перекодировать шрифты, а значит, вы не можете их подмножать с помощью устройства pdfwrite Ghostscript. Фактически, поскольку вы используете CIDFonts с контурами TrueType, вы не можете избежать подмножества шрифтов, так что в основном это не сработает.

Пожалуйста, имейте в виду, что устройство pdfwrite Ghostscript не предназначено для работы с файлами PDF!

К слову, у вашего PDF-файла есть другие проблемы, он масштабирует шрифт (оператор Tf) до 0, и у него есть BBox для формы, где все координаты равны 0 (и действительно, форма не имеет содержимого , поэтому бессмысленно). Это в дополнение к CIDFont без CMap ToUnicode. Возможно, вы должны рассмотреть другой инструмент для создания PDF-файлов.

+0

Спасибо ... Я перехожу от TCPDF к mPdf, надеюсь получить там больше удачи. :-) – Wazime

+0

Кстати, с помощью какого инструмента вы проверили мой PDF? Я не знаком с инструментами для тестирования PDF. – Wazime

+0

В принципе, я этого не делал. Я использовал MuPDF для распаковки PDF-файла, затем прочитал его с помощью текстового редактора (тот, который не выполняет перевод CR/LF) – KenS

Смежные вопросы