2015-02-09 3 views
0

Я использую инструмент, который разбивает большие .pdf-файлы на более мелкие части и использует Ghostscript для уменьшения размера новых сгенерированных файлов. Сегодня я запустил инструмент для сегментации pdf-файла из itext-paulo-155, и все файлы, казалось, были созданы правильно. Однако при выборе и скопировать символы из новых и небольших файлов .pdf в текстовый редактор, все они повреждены, как это:Ghostscript 9.15 - Файлы, распавшиеся из большого .pdf-файла, повреждены

ỘỔỎồỌỐỗ ờ. ỌộỏỌ 
ọχτφσ Ởωχκκω, Ọυω. • Ọσσ Ọχητχ, ỘỔ 
ζσιζς@βςξθν.κιβ • 

Я обновил свою версию Ghostscript до новейших 9,15, и это все еще происходит. Я установил следующие Params в моем коде:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH -dQUIET -sOutputFile=

Видимо Ghostscript не может поддерживать такого рода файлы в формате .pdf, которые кажутся распространенными из них, они не отсканированные изображения. Вы знаете, что может вызвать это странное поведение и как я могу сделать, чтобы ghostscript не искажал символы? Спасибо за помощь.

ответ

1

Вы не «раскалываете» файл PDF, вы создаете несколько совершенно новых PDF-файлов из исходного PDF. Ghostscript интерпретирует файл PDF, создавая последовательность графических примитивов, а затем устройство pdfwrite повторно собирает эти примитивы в новый выходной файл.

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

Но файлы вы выводите не являются так же, как и исходный файл. Если вы хотите разбить файл, используйте что-то вроде pdftk или MuPDF, которое делает именно это. Приложения оставят данные нетронутыми и просто выплюнут в новые файлы, Ghostscript не будет.

Теперь, если файл правильно отображается на экране, это NOT поврежден. Возможно, не удастся скопировать и вставить текст, но это ни в коем случае не то же самое.

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

Поставляется с отображением ToUnicode, Acrobat и другими зрителями в состоянии выбрать текст. Если нет ToUnicode, они возвращаются к другим эвристическим методам. Если текст является латинским языком, а шрифт закодирован в латинском кодировании (например, ascii), то копирование и вставка будут работать.

Однако на экране PDFSETTINGS =/есть переключатель для подмножества шрифтов. Как только шрифты являются подмножествами, они больше не имеют кодировки WinAnsi или ASCII. Первый встреченный символ задается символьным кодом 1, второй - кодом 2 и т. Д. Если есть CMP ToUnicode, это не имеет значения, поскольку его все еще можно получить значения Unicode для каждого символа. Однако, если информация о Юникоде отсутствует, то тот факт, что этот текст больше не имеет значений ASCII, будет означать, что вы больше не сможете копировать/вставлять его внятно.

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

+0

Спасибо за полный ответ. Оригинальный .pdf-файл имеет кодировку Identity-H.Интересно, есть ли у этого что-то делать. Есть ли другой способ обхода для случаев, когда файл имеет такой тип кодирования? – mariana

+0

Нет ничего общего с кодировкой. Как я уже сказал, это, скорее всего, отсутствие CMU ToUnicode в сочетании с директивой подмножества шрифтов. Если вы не хотите, чтобы это произошло, не подмножайте шрифты. – KenS

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