LINUX.ORG.RU

convert pdf to png

 


0

0

Понадобилось мне тут перевести несколько страниц pdf в png. Сделал

$ convert -density 300 file.pdf file.png
# Кстати, как задать диапазон страниц?
Жду и жду, а результата нет. Мало того, вдруг, совершенно внезапно, convert «скушал» почти всё ОЗУ и начал «есть» /tmp до тех пор, пока и там место не кончилось.
Начал разбираться. Оказывается, после запуска convert создаёт в /tmp нужные мне файлы в формате magick-хххххххх-00000001 без расширения, но похоже на png. Затем, вместо того, чтобы скопировать эти файлы в мою папку и переименовать в file-№.png, convert начинает создавать какие-то файлы размером от 100 Мб до 1 Гб, при этом «съедая» ОЗУ и место на ЖД.


И может это длиться очень долго:

  • файл pdf 2 листа - несколько секунд и всё готово
  • файл pdf 22 листа - около часа работы
  • файл pdf 79 листов - около 4 часов работы и всего первые 2 листа (дольше не смог ждать, ибо понадобился браузер).


Можно ли заставить convert работать, а не заниматься ерундой? Есть вариант написать скрипт, который запускает convert, затем ищет файлы с номерами страниц, которые мне нужны, копирует их в папку, добавляя расширение png, а потом убивает convert. Но нет ли решения более эстетичного?

★★★★

Жду и жду, а результата нет.

convert -verbose ...
должен немного прояснить принципы его работы. Да, от универсальной программы трудно ожидать вменяемого поведения при работе с большими файлами.

Попробуйте рендерить PDF'ки напрямую ghostscript'ом.

AITap ★★★★★
()
Ответ на: комментарий от sdio

C помощью pdftk выдрал нужных мне 7 страниц из 79 за несколько секунд. Затем опять ждал 25 минут, пока работал convert. Ещё он выругался

   **** Warning: considering '0000000000 XXXXX n' as a free entry.
   **** Warning: considering '0000000000 XXXXX n' as a free entry.
   **** Warning: considering '0000000000 XXXXX n' as a free entry.
   **** Warning: considering '0000000000 XXXXX n' as a free entry.
   **** Warning: considering '0000000000 XXXXX n' as a free entry.
   **** Warning: considering '0000000000 XXXXX n' as a free entry.
   **** Warning: considering '0000000000 XXXXX n' as a free entry.

   **** This file had errors that were repaired or ignored.
   **** The file was produced by: 
   **** >>>> itext-paulo-155 (itextpdf.sf.net-lowagie.com) <<<<
   **** Please notify the author of the software that produced this
   **** file that it does not conform to Adobe's published PDF
   **** specification.

Allakka ★★★★
() автор топика
Ответ на: комментарий от AITap

Попробуйте рендерить PDF'ки напрямую ghostscript'ом.

Можно по-подробнее? Или есть где почитать на русском?

Allakka ★★★★
() автор топика
Ответ на: комментарий от Allakka
pdftoppm -r300 -fномер первой страницы -lномер последней страницы
for f in *pnm; do
Fname=$(echo $f | sed 's/.pnm$//')
echo "file $Fname"
convert $f ${Fname}.png
done

Не надо пытаться конвертировать pdf в png непосредственно ImageMagic'ом: ничего хорошего из этого не выйдет.

Eddy_Em ☆☆☆☆☆
()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от sdio

по одной же дергай

Не-не-не-не-не, нам так не надо

Allakka ★★★★
() автор топика
Ответ на: комментарий от Allakka

gs -sDEVICE=pngalpha -sOutputFile=<файл>.png -dNOPAUSE -dBATCH -q <файл>.pdf

Подробнее man gs. Как указать страницы, не знаю, но это точно возможно.

AITap ★★★★★
()
Ответ на: комментарий от AITap

Спасибо, пошел искать в google инфу про ghostscript

Allakka ★★★★
() автор топика
Ответ на: комментарий от AITap

Как указать страницы, не знаю, но это точно возможно.

Нашел -dFirstPage=4 -dLastPage=6

Allakka ★★★★
() автор топика

Жду и жду, а результата нет. Мало того, вдруг, совершенно внезапно, convert «скушал» почти всё ОЗУ и начал «есть» /tmp до тех пор, пока и там место не кончилось.

Вот что больше всего меня бесит в ImageMagick, так это то, что входящие файлы он пытается заглотать все сразу.

static_lab ★★★★★
()

convert «скушал» почти всё ОЗУ и начал «есть» /tmp до тех пор, пока и там место не кончилось.

Скорее наоборот, у тебя /tmp в tmpfs и съев /tmp ты остался без ОЗУ

sdio ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.