web-dev-qa-db-fra.com

convertir plusieurs png en un pdf

J'ai 280 fichiers pgn que je veux fusionner et convertir en un seul pdf.

Les noms de fichiers PNG sont dans la séquence p000.png, p001.png etc. et l’espace total est d’environ 30 Mo.

J'ai fait:

convert p00*.png to myfile.pdf 

et cela a bien fonctionné. Heureusement dans le bon ordre.

Mais quand je fais:

conver p*.png to myfile.pdf

Il consomme tous mes 4 Go de mémoire et la moitié de mon échange. Puis il se bloque avec l'erreur

convert: memory allocation failed `myfile.pdf' @ error/pdf.c/WritePDFImage/1595.

Avez-vous une idée de la façon de résoudre ce problème?

Je pense qu'une bonne solution serait d'utiliser convert un fichier à la fois en pdf, avec le même nom. Ensuite, utilisez pdfunite ou pdftk pour les fusionner. Mais je ne sais pas comment utiliser convert de cette façon.

5
Presbitero

Imagemagick semble être très violent avec l'utilisation de la mémoire. Une suggestion est d'utiliser -limit pour limiter la taille de la mémoire utilisée par la conversion, il devrait utiliser un cache disque pour tout ce dont il a besoin. Lire une explication ici:

http://www.imagemagick.org/pipermail/magick-users/2002-March/001285.html

Et voici comment utiliser l'option -limit: http://www.imagemagick.org/script/command-line-options.php#limit

Sinon, vous pouvez le faire comme vous l'avez décrit, en convertissant chaque image individuellement et en les fusionnant avec un autre outil. Quelque chose comme

for name in p*.png; do convert $name `basename $name .png`.pdf; done

devrait le faire.

Fondamentalement, il parcourt tous les fichiers png, lance convert, la seule magie est la partie basename $name .png, qui sera remplacée par le nom de fichier moins la partie .png; Le nom de fichier est logique.

Essayez-le vous-même pour avoir une idée de ce que fait basename:

basename something.png .png
echo `basename something.png .png`.pdf
8
roadmr