2015-05-07 4 views
2

В How can I remove all images from a PDF? Курт Пфайфл дал фрагмент кода PostScript (любезно предоставлен Chris Liddell), чтобы отфильтровать все растровые изображения из PDF, используя GhostScript.Как удалить все, кроме растровых изображений из PDF?

Это работает как шарм; тем не менее, меня также интересует сопутствующая задача удаления всего за исключением растровых изображений из PDF и без повторного сжатия растровых изображений. Или, в конечном счете, разделение векторных и растровых «слоев». (Я знаю, это не то, что слой в терминологии PDF.)

AFAIU, фильтр Курта работает, отправив все растровые изображения на нулевое устройство, оставив все остальное до pdfwrite. Я читал, что можно использовать разные устройства с GS, поэтому я надеюсь, что по умолчанию можно отправить все на фальшивое/нулевое устройство и только переключиться на pdfwrite для тех изображений, которые были захвачены фильтром. Но, к сожалению, я полностью не могу перевести такую ​​вещь в код PostScript.

Может ли кто-нибудь помочь или хотя бы сказать мне, может ли этот подход обречен на провал?

+0

Не может помочь с решением ghostscript, если это то, что вы ищете, но я хотел сообщить вам, что есть очень элегантные решения на основе PDF, если вы можете использовать коммерческие инструменты. Если вас это интересует, я тоже могу объяснить больше. –

+0

Спасибо, Дэвид. Действительно, я ищу, по крайней мере, инструмент для бесплатного использования в пиво для личного использования; но не обязательно. Так что что-то вроде [CoherentPDF] (http://community.coherentpdf.com/) в выпуске сообщества было бы неплохо (кстати, он отлично справляется с опцией '-draft', но ближе к вещам, уже связанным в основных дистрибутивах Linux лучше, и требуется поддержка Linux. – akobel

ответ

3

Его возможно, но его большое количество работы.

Вы не можете начинать с nulldevice и при необходимости использовать устройство pdfwrite, что просто не будет работать, потому что устройство pdfwrite выпишет накопленный PDF-файл, как только вы его выгрузите. Перезагрузка начнет новый PDF-файл.

Кроме того, вам нужно экземпляр pdfwrite устройства же для всего кода, так что вы не можете загрузить устройство pdfwrite, загрузите nulldevice, а затем загрузить устройство pdfwrite снова только биты, которые вы хотите. Это означает, что единственный подход, который (в настоящее время) работает, - это тот, который написал Крис. Вам нужно загрузить pdfwrite и надавить нулевое устройство на место, когда вы хотите тихо использовать операцию.

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

Чтобы удалить все изображения, кроме изображений, есть лот операторов. Вам нужно переопределить; инсульт, заливка, эофил, прямой штрих, rectfill, ustroke, ufill, ueofill, shfill, show, ashow, widthshow, awidthshow, xshow, xyshow, yshow, glyphshow, cshow и kshow. Возможно, я пропустил несколько операторов, но, по крайней мере, это основы.

Обратите внимание, что код Chris первоначально размещен на самом деле фильтровать различные типы объектов, а не только изображения, вы можете найти свой код здесь:

http://www.ghostscript.com/~chrisl/filter-obs.ps

Обратите внимание, что это только неподдерживаемый пример кода.

+0

Это замечательно, спасибо большое. Так что, похоже, вам нужно два прохода для разделения растровых изображений и векторных материалов. Я не мог найти оригинальный код Криса, спасибо за эта ссылка. Используя его фильтр-обс.ps с '-dFILTERIMAGE' или' -dFILTERFILL -dFILTERSTROKE -dFILTERSHOW' достигает почти точно, что мне нужно. - Почти, потому что теперь мне не хватает способа сказать GS, чтобы не перекодировать/перекомпоновать растровые изображения. Но это будет вопрос другого вопроса, я думаю ... – akobel

+0

Если вы хотите разные объекты в разных файлах, то да, вам понадобятся два (или более) прохода. Что касается сжатия, то его в документации ..... – KenS

+0

Два прохода не проблема. Что касается сжатия, я ничего не мог найти. IIUC, GS _always_ интерпретирует изображения, и простая проставка кажется недоступной (например, [информация Курта здесь] (http://superuser.com/questions/360216/use-ghostscript-but-tell-it-to-not -reprocess-изображения # ответ-373740)). По крайней мере, jbig2 -> ccitt-преобразование не так уж плохо, но также сжимаются JPEG. '-dAutoFilterColorImages = false' там не помогло ... – akobel