PDF в JPG без потери качества; gscan2pdf

51

Когда я конвертирую файл PDF в кучу файлов JPG, используя

convert -quality 100 file.pdf page_%04d.jpg

У меня заметная потеря качества.

Однако, если я сделаю следующее, нет (заметной) потери качества:

Запустите gscan2pdf, выберите file-> import (и выберите file.pdf). Затем перейдите во временный каталог gscan2pdf. Существует множество файлов pnm (по одному на каждую страницу pdf-файла). Сейчас делаю

  for file in *.pnm; do            
  convert $file $file.jpg done

Получающиеся jpg-файлы (примерно) того же качества, что и исходный pdf (что я и хочу).

Теперь у меня вопрос: есть ли простой способ командной строки для преобразования pdf-файла в набор jpg-файлов без заметной потери качества? (Решение выше является слишком сложным и трудоемким).

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

Ответы:

92

Непонятно, что вы подразумеваете под «потерей качества». Это может означать много разных вещей. Не могли бы вы опубликовать несколько образцов для иллюстрации? Возможно, вырежьте тот же раздел из версий низкого качества и хорошего качества (как PNG, чтобы избежать дальнейшей потери качества).

Возможно, вам нужно использовать -densityдля преобразования с более высоким dpi:

convert -density 300 file.pdf page_%04d.jpg

(Вы можете добавить -units PixelsPerInchили, -units PixelsPerCentimeterесли необходимо, по умолчанию моя копия ppi.)

Обновление: Как вы указали, gscan2pdf(способ, которым вы его используете) является просто оберткой для pdfimages(из poppler ). pdfimagesне делает то же самое, что convertи при вводе PDF-файла.

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

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

В результате, если то, что у вас есть, это PDF, который является просто оберткой вокруг ряда растровых изображений, pdfimagesбудет гораздо лучше извлекать их, потому что он получает необработанные данные в их исходном размере. Возможно, вы также захотите использовать эту -jопцию pdfimages, потому что PDF может содержать необработанные данные JPEG. По умолчанию pdfimagesвсе конвертируется в формат PNM, а конвертирование JPEG> PPM> JPEG - процесс с потерями.

Так что попробуйте

pdfimages -j file.pdf page

Вы можете или не может понадобиться , чтобы следовать , что с convertна .jpgстадии ( в зависимости от того, какое изображение форматировать PDF использовал).

Я попробовал эту команду в PDF, который я сделал сам из последовательности изображений JPEG. Извлеченные файлы JPEG были побайтно идентичны исходным изображениям. Вы не можете получить более высокое качество, чем это.

CJM
источник
+1 Я так рад, что не поддался снобизму, неправильно истолковавшему одно из ваших предложений, которое вдохновило меня, и на самом деле попробовал pdfimages - возможно, самую полезную программу, которую я использовал за последние месяцы! Я призываю всех попробовать!
ixtmixilix
@ixtmixilix, мне любопытно. Что ты неправильно прочитал и как?
cjm
Довольно круто! Решил мой день. Спасибо!
Geppettvs D'Constanzo
convertтакже нецелесообразно для больших PDF-файлов. Например, для обработки книги из 700 6-мегапиксельных страниц потребовалось 45 ГБ памяти. Это также заняло около тысячи раз дольше, чем pdfimages.
Камиль Гудесюн
Для обратного, преобразуйте изображения в pdf, или лучше, оберните изображения в pdf, используйте img2pdf, здесь: gitlab.mister-muffin.de/josch/img2pdf (оборачивает jpg и jpg2000 в pdf).
Эрик
4

Как сказал ответ студента, pdfimagesэто хороший вариант. Исходя из моего опыта gsи convertэкспорт в низкое качество независимо от того, если вы указали правильный точек на дюйм.

Но если pdf имеет несколько слоев на страницу pdfimages, не работает и извлекает слои как отдельное изображение, в этом случае лучше всего использовать inskcapeэкспорт страницы, как видно.

Это команды, которые я использую:

pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png

Первая команда разбивает все страницы, вторая команда преобразует страницу за страницей в png. Вы можете сохранить их PNG или просто конвертировать их в JPEG

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

По сравнению с pdfimages, gsи ImageMagick's, convertя считаю inkscape, экспорт самый лучший по качеству.

Эдуард Флоринеску
источник
3

Ответ от @cjm правильный, но если вам нравится GUI и вы не хотите отображать все страницы PDF, просто чтобы получить изображение, используйте gimp.

Откройте pdf с помощью gimp, и вы получите окно импорта со всеми отображаемыми страницами. Выберите нужные страницы и установите разрешение 600 пикселей / дюйм (во многих случаях я обнаружил, что резкость слишком велика на 300). Сохранить в нужный формат с помощью «Файл / экспорт»

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

albfan
источник
2

Глядя на исходный код gscan2pdf, я заметил, что он использует pdfimages. Так pdfimages file.pdf pageчто в результате page-001.ppm, page-002.ppmи т.д.

ученик
источник
pdfimages действительно делает свою работу
Эдуард Флоринеску
2

Что неясно в вашем вопросе, так это то, говорите ли вы о текстовой и векторной графике в вашем PDF-файле или содержит ли ваш PDF-файл встроенные изображения.

Прочитав, что такое gscan2pdf, я предполагаю, что ваши PDF-файлы содержат (только) встроенную графику.

convertпо сути, «печатает» ваш PDF безотносительно к содержанию. Как подсказывает @cjm, вы можете изменить плотность печати. Это единственный способ повысить качество векторной графики.

Если вместо этого вы хотите извлечь встроенные изображения (похоже, что это делает gscan2pdf), предположив, что плотность обычно приводит либо к потере качества, либо к более высокому качеству, чем требуется (и к потере дискового пространства). Ответ тогда - извлечь изображение, а не распечатать PDF. Смотрите эту статью, которая в основном выступает за использование pdfimagesдля извлечения изображений без потери качества.

asoundmove
источник