У меня есть 280 pgn файлов, которые я хочу объединить и преобразовать в один PDF.
Имена файлов PNG находятся в последовательности p000.png, p001.png и т.д., и общее пространство составляет приблизительно 30 МБ.
Я сделал:
convert p00*.png to myfile.pdf
и это хорошо работало. Luckly достаточно в правильном порядке.
Но когда я делаю:
conver p*.png to myfile.pdf
Это использует всех моих 4 ГБ памяти и половины моей подкачки. Затем это отказывает с ошибкой
convert: memory allocation failed `myfile.pdf' @ error/pdf.c/WritePDFImage/1595.
Какая-либо идея того, как сделать обходное решение к этой проблеме?
Я думаю, что достаточно хорошее решение состояло бы в том, чтобы использовать convert
один файл за один раз к PDF, с тем же именем. Затем используйте pdfunite
или pdftk
объединить их. Но я не знаю, как использовать convert
таким образом.
Imagemagick, кажется, является очень жестоким с использованием памяти. Предложение состоит в том, чтобы использовать - предел для ограничения преобразования емкости памяти будет использовать, это должно использовать дисковый кэш для чего-либо еще, в чем это нуждается. Считайте объяснение здесь:
http://www.imagemagick.org/pipermail/magick-users/2002-March/001285.html
И вот то, как использовать - предельная опция: http://www.imagemagick.org/script/command-line-options.php#limit
В противном случае можно сделать это как Вы, описывают, преобразовывая каждое изображение индивидуально и затем объединяя их с некоторым другим инструментом. Что-то как
for name in p*.png; do convert $name `basename $name .png`.pdf; done
должен сделать это.
В основном это выполняет итерации по всем png файлам, выполнения преобразовывают на них, единственное волшебство basename $name .png
часть, которая будет заменена именем файла минус .png часть, так, чтобы при присоединении расширения pdf его, имя файла имело смысл.
Попробуйте его за себя так, Вы получаете ощущение того, что делает базовое имя:
basename something.png .png
echo `basename something.png .png`.pdf