Удалить / удалить все изображения из PDF с помощью Ghostscript или ImageMagick
Я хочу удалить / удалить все изображения в PDF, оставив только текст / шрифт в PDF любым инструментом командной строки.
Я пытался с помощью -dGraphicsAlphaBits=1
в команде Ghostscript, но изображения присутствуют, но как большой пиксель.
5 ответов
Нет, AFAIK, невозможно удалить все изображения в PDF с помощью инструмента командной строки.
Какова цель вашего запроса в любом случае? Сохранить на размер файла? Удалить информацию, содержащуюся в изображениях? Или же...?
Временное решение
К чему бы вы ни стремились, вот команда, которая уменьшит все изображения до разрешения 2 ppi (обновление: 1 ppi не работает). Который достигает двух целей одновременно:
- уменьшить размер файла
- сделать все изображения в основном непостижимыми
Вот как это сделать выборочно, только для изображений на странице 33 original.pdf
:
gs \
-o images-uncomprehendable.pdf \
-sDEVICE=pdfwrite \
-dDownsampleColorImages=true \
-dDownsampleGrayImages=true \
-dDownsampleMonoImages=true \
-dColorImageResolution=2 \
-dGrayImageResolution=2 \
-dMonoImageResolution=2 \
-dFirstPage=33 \
-dLastPage=33 \
original.pdf
Если вы хотите сделать это для всех изображений на всех страницах, просто пропустите -dFirstPage
а также -dLastPage
параметры.
Если вы хотите удалить всю информацию о цвете из изображений, преобразуйте их в оттенки серого с помощью той же команды (найдите другие ответы в Stackru, где обсуждаются подробности).
Обновление: Первоначально я предложил использовать разрешение 1 PPI. Кажется, это не работает с Ghostscript. Я сейчас проверил с 2 PPI. Это работает.
Обновление 2: см. Также следующий (новый) вопрос с ответом:
Он предоставляет некоторый пример кода PostScript, который полностью удаляет все (растровые) изображения из PDF, оставляя остальную часть макета страницы неизменной.
Он также отражает расширенные новые возможности Ghostscript, которые теперь могут выборочно удалять либо весь текст, либо все растровые изображения, либо все векторные объекты из PDF-файла, либо любую комбинацию этих трех типов.
Вы можете использовать черновой вариант cpdf:
cpdf -draft in.pdf -o out.pdf
Это должно работать в большинстве ситуаций, но подайте отчет об ошибке, если он не поможет вам.
Раскрытие: я автор cpdf.
Прошло время, и разработка Ghostscript продолжалась...
Последние выпуски имеют следующие новые параметры командной строки. Их можно добавить в командную строку:
-dFILTERIMAGE
: создает вывод, в котором удаляются все растровые рисунки.-dFILTERTEXT
: производит вывод, где удаляются все текстовые элементы.-dFILTERVECTOR
: производит вывод, где удаляются все векторные рисунки.
Любые два из этих вариантов могут быть объединены.
Пример команды:
gs -o noimage.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf
Более подробную информацию (включая некоторые иллюстративные снимки экрана) можно найти в моем ответе на вопрос "Как удалить все изображения из PDF-файла?",
gs -o noImages.pdf -sDEVICE=pdfwrite -dFILTERIMAGE input.pdf
gs -o noText.pdf -sDEVICE=pdfwrite -dFILTERTEXT input.pdf
gs -o noVectors.pdf -sDEVICE=pdfwrite -dFILTERVECTOR input.pdf
gs -o onlyImages.pdf -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERTEXT input.pdf
gs -o onlyText.pdf -sDEVICE=pdfwrite -dFILTERVECTOR -dFILTERIMAGE input.pdf
gs -o onlyVectors.pdf -sDEVICE=pdfwrite -dFILTERIMAGE -dFILTERTEXT input.pdf
К сожалению, для разделения изображений и текста по разным слоям утилита свободного / открытого программного обеспечения недоступна. Также не свободный как в пиве также...
Эта задача может быть достигнута только с помощью различных программных решений. Поскольку вы не исключили этого в своем вопросе, но попросили "любой возможный инструмент командной строки", я скажу вам мой любимый:
Доступна версия для использования CLI (которая включает в себя мощный SDK, обеспечивающий множество низкоуровневых манипуляций с PDF), и это поддерживается на всех основных платформах ОС, включая Linux.
Callas предлагает вам полнофункциональную бесплатную тестовую лицензию, которая включена (я полагаю) 14 дней.