pdf в jpg без втрати якості; gscan2pdf


51

Коли я конвертую pdf-файл у купу файлів jpg, використовуючи

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

У мене помітні втрати якості.

Однак якщо я виконую наступне, втрат якості не буде (помітно):

Запустіть gscan2pdf, виберіть файл-> імпорт (і виберіть file.pdf). Потім перейдіть до тимчасового каталогу gscan2pdf. Існує багато файлів pnm (по одному для кожної сторінки pdf-файлу). Тепер я

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

Отримані jpg-файли (приблизно) такої ж якості, як і оригінальний pdf (що я хочу).

Тепер моє запитання полягає в тому, чи існує простий спосіб командного рядка перетворити файл PDF у купу файлів jpg без помітних втрат якості? (Розчин вище є занадто складним і трудомістким).


Що у ваших запитаннях не зрозуміло, чи ви говорите про текст та векторну графіку у своєму PDF, чи маєте на увазі витягнути вбудовані зображення.
asoundmove

Відповіді:


92

Не ясно, що ви маєте на увазі під "втратою якості". Це може означати багато різних речей. Чи можете ви розмістити кілька зразків для ілюстрації? Можливо, виріжте той же розділ із неякісних та хорошої якості (як PNG, щоб уникнути подальших втрат якості).

Можливо, вам потрібно скористатися, -densityщоб здійснити конверсію у більш високій точці на дюйм:

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 були байт-байтом, ідентичним вихідним зображенням. Ви не можете отримати більш високої якості від цього.


+1 Я так радий, що не піддався снобізмові, що неправильно читає одне із натхнених мною ваших речень і насправді випробував pdfimages - мабуть, найкориснішу програму, яку я використовував протягом місяців! Я б закликав усіх спробувати!
ixtmixilix

@ixtmixilix, мені цікаво. Що ви неправильно прочитали і як?
кім

Досить дивовижно! Вирішив мій день. Дякую!
Geppettvs D'Constanzo

convertтакож недоцільно для великих PDF-файлів. Наприклад, для обробки книги з 700 6-мегапіксельних сторінок знадобилося 45 Гб пам'яті. Це також зайняло приблизно в тисячу разів більше, ніж pdfimages.
Camille Goudeseune

З іншого боку, перетворіть зображення в pdf або, краще, оберніть зображення в pdf, використовуйте img2pdf, тут: gitlab.mister-muffin.de/josch/img2pdf (обгортає jpg та jpg2000 у pdf).
Ерік

4

Як сказано у відповіді студента, pdfimagesце хороший варіант. З мого досвіду, gsі convertекспорт низької якості, незалежно від того, якщо ви вказали правильний dpi

Але якщо у 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, convertя вважаю inkscape, експорт найкращий за якістю.


3

відповідь від @cjm є правильною, але якщо вам подобається графічний інтерфейс і не хочете відображати всі сторінки PDF, просто щоб отримати зображення, використовуйте gimp.

Відкрийте pdf з gimp an, ви отримаєте вікно імпорту з усіма відображеними сторінками. Виберіть будь-які сторінки, які ви хочете, і встановіть роздільну здатність 600 пікс / дюйм (я виявив, що в 300 випадках занадто багато різко). Збережіть у потрібному форматі за допомогою "Файл / експорт"

У будь-якому випадку повинен бути прапор, щоб вибрати потрібні сторінки з командного рядка.


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для вилучення зображень без втрати якості.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.