Ghostscript - проблема с кодировкой символов - PullRequest
0 голосов
/ 30 октября 2018

У меня есть документ PDF / A, уже распознанный моим сканером. Файл немного наклонен, поэтому я поворачиваю его на 1 градус с помощью ghostscript следующим образом:

gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dSAFER \
   -dPDFSETTINGS="/screen" \
   -dSubsetFonts=true -dEmbedAllFonts=true \
   -sPAPERSIZE=a4 -sOutputFile="out.pdf" \
   -c "<</BeginPage{1 rotate}>> setpagedevice" \
   -f in.pdf

(это адаптированный фрагмент из другого потока SO)

Работает нормально, но что-то с кодировкой текста не так - когда я копирую и вставляю слова с польскими буквами (ąśćęłńźż) из оригинального документа, все работает нормально, но когда я копирую и вставляю то же самое Точное слово из PDF, созданного командой выше, эта польская буква преобразуется в '~' ("opłata" -> "op ~ ata", "wpłynęło" -> "wp ~ yn ~~ o"). Как я могу сохранить текст? Мне действительно нужно это без изменений.

РЕДАКТИРОВАТЬ: Вывод вышеуказанной команды:

GPL Ghostscript 9.25 (2018-09-13)
Copyright (C) 2018 Artifex Software, Inc.  All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Processing pages 1 through 3.
Page 1
Loading NimbusSans-Regular font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-Regular... 5076560 3564226 2614872 1261064 3 done.
Loading NimbusSans-Bold font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-Bold... 5142672 3737333 2635072 1280462 3 done.
Loading NimbusSans-Italic font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-Italic... 5310168 3943119 2816872 1460233 3 done.
Loading NimbusSans-BoldItalic font from /usr/local/Cellar/ghostscript/9.25/share/ghostscript/9.25/Resource/Font/NimbusSans-BoldItalic... 5497480 4140597 3059272 1695969 3 done.
Page 2
Page 3

1 Ответ

0 голосов
/ 30 октября 2018

Ну, первое, что нужно попробовать, это , а не , чтобы установить SubsetFonts = true.

Если ваш исходный PDF-файл не имеет ToUnicode CMap, то вы можете использовать «эвристику» (то есть догадки), чтобы определить точку Unicode из заданной кодировки символов.

Если ваш оригинальный документ работает, то вполне вероятно, что кодировка символов соответствует ASCII или чему-то подобному. Однако, когда вы задаете шрифты, кодировка изменяется. По сути, первый встреченный символ становится позицией кодирования 1, второй - 2 и т. Д.

Естественно, это вызывает проблемы, когда вы пытаетесь вырезать и вставлять.

Однако, учитывая, что вы используете символы вне нормального диапазона ASCII, маловероятно, что это проблема.

Вполне возможно, что вы используете старую версию Ghostscript + pdfwrite (вы на самом деле не говорите, какую версию вы используете, и вы не предоставили вывод обратного канала, который мог бы сказать), а также ее ошибку, которая была исправлена.

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

...