2014-12-04 4 views
1

Использование командной строки ghostscript, можно ли удалить дублированные внедренные объекты (изображения) в PDF и заменить их одним экземпляром?Как удалить дубликаты объектов в PDF с помощью ghostscript?

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

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

ответ

2

Нет, Ghostscript (более конкретно pdfwrite устройство) не заменит XObjects изображения или встроенные изображения , он не проверяет их, если они идентичны.

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

FWIW Многие другие объекты проверяются на дубликаты, но не на изображения, просто из-за времени, затраченного на чтение и хэш-изображения.

+0

Я как-то сомневаюсь в вашем предположении о * «это означает проверку каждого байта каждого изображения» *. Разве не удалось бы создать хэши из потоков изображений, а затем сравнить только эти? (Если вы не считаете создание хеша «проверкой каждого байта», что так или иначе ...) –

+0

Да, я считаю, что создание хеша изображения является «проверкой каждого байта», потому что, ну, вот что вам нужно сделать. В настоящее время pdfwrite создает хеш MD5 для большого количества различных типов объектов именно для этой цели, но не делает этого для изображений, потому что чтение нескольких мегабайт данных для обычно довольно необычной функции - это не так, как стоит. Как я уже сказал, если кто-то действительно хочет это сделать, я могу предоставить указатели на то, где можно создать хеш, как определить, соответствует ли существующий хеш, и как заменить новое изображение ссылкой на старый. – KenS

+1

Было бы очень приятно, если бы кто-нибудь подхватил такую ​​задачу и осуществил ее с вашей помощью. Есть много «плохих» PDF-файлов, которые слишком велики по причине, описанной в OP. –

2

Как дополнение к ghostscript, pdfsizeopt делает очень хорошую работу по устранению дублированных внедренных объектов (в том числе фоновых изображений) в PDF и может быть запущено дополнительно до или после обработки файла ghostscript. Однако немного сложно включить в рабочий процесс из-за его зависимостей и создать много временных файлов. Вы можете найти по адресу: https://github.com/pts/pdfsizeopt (ранее https://code.google.com/p/pdfsizeopt/)

Мой 200-страничный документ получил от 150 МБ до 40 МБ, просто удалив повторяющиеся изображения.