Conversion pdf vers jpeg

damien_t

Membre actif
21 Juin 2004
295
13
43
Bonjour,
J'ai un problème sur lequel j'ai passé la journée sans trouver de solution satisfaisante
Je fais du dev web. Des fichiers PDF provenant d'un fax arrivent régulièrement sur le serveur. Ce sont des pdfs de type image qui doivent être lus à l'écran avec des détails assez minuscules, par exemple une date peut faire 10 pixels de haut. Ces PDFs doivent être traités, convertis en JPEG et affichés (en version zoomée et / ou rotationnés) Jusque là, aucun problème.
J'utilise Rails et RMagick (version Ruby d'ImageMagick). Après des heures passées dessus, j'ai bien compris qu'ImageMagick rasterise via Ghostscript le PDF pour ensuite le traiter. Il n'y a aucun autre moyen avec ImageMagick. Toujours aucun problème.
La commande pour convertir un pdf vers un jpeg sans avoir de gros pixels est
Bloc de code:
convert -density 288 -resize 25% fichierentree.pdf fichiersortie.jpg
La encore, tout fonctionne. J'ai bien mes fichiers jpeg en sortie, à raison d'un fichier jpeg par page de pdf. Ils sont très lisibles.
Le problème est que cela met trois plombes sur mon iBook pour effectuer la conversion. Genre 5 minutes à 100% du CPU pour un PDF de 11 pages. Pendant ce temps, mon mac ne reponds plus, le disque dur gratte beaucoup et j'ai la roue colorée de la mort. J'ai essayé de faire varier les filtres pour le resize, le temps reste très long.
J'ai essayé la même opération avec Aperçu, en essayant de sauver mon pdf en jpeg. Cela fonctionne, la conversion est quasi instantanée. Je veux bien que Aperçu ne me convertisse que la page en cours et que le jpeg soit beaucoup moins agréable que celui produit par ImageMagick mais tout de même. Y'a un truc que je pige pas. Et mes recherches n'ont rien donné.

Ma question est donc : Y'a-t-il un moyen de faire rapidement une conversion en ligne de commande d'un PDF vers un ensemble d'images ? Ma solution actuelle marche mais le serveur doit recevoir des PDFs en permanence. Je ne peux pas me permettre de mettre plus d'une à deux secondes par page. Le serveur sera a priori un linux dédié mais je voudrais aussi pouvoir tester sur mon mac.

Merci d'avance.
 
Tu peux déjà essayer de faire la conversion directement avec GhostScript, histoire de voir si c'est cela qui prend du temps. Si c'est le cas, vérifier alors l'installation de GS.
 
Une douche plus tard, et quelques essais en plus, je me réponds. ImageMagick (ou RMagick) a un gros problème. En passant directement par ghostscript, cela fonctionne dans des temps normaux (une dizaine de secondes pour une dizaine de pages).
Ma ligne de commande est
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pnggray -r300 -sOutputFile=test_%03d.png FICHIERFAX.pdf
Les fichiers de sortie sont pas géniaux, mais je ne perds pas de détails. Et finalement, cela sera du PNG. Un jpeg pèse 400Ko pour 100Ko en PNG, là encore nystère sur le pourquoi du comment.
 
bompi a dit:
Tu peux déjà essayer de faire la conversion directement avec GhostScript, histoire de voir si c'est cela qui prend du temps. Si c'est le cas, vérifier alors l'installation de GS.
vi merci ! (voir message suivant, nos messages se sont croisés)
 
J'essaye de faire un peu la même chose. Je vous explique :
j'ai des fichiers PDF que j'aimerais consulter en web mais page par page, et sans passer par le plugin acrobat. J'ai donc pensé convertir les pages du PDF en JPG et utiliser un générateur de galerie en html pou rprésenter le tout.
Seul problème, pour la conversion j'utilise PDF2PSP mais les réglages ne me conviennent pas. Soit l'image est pixélisée, soit elle est trop large par rapport à l'écran et je suis obligé de scroller verticalement.
J'ai donc essayer ta méthode damien_t avec ghostScript (que j'ai compilé et installé) mais c'est le même problème. Si je règle le paramètre -r pour que l'image fasse la largeur de l'écran (600, mon écran est en portrait) c'est pixélisé. Pourtant j'ai pas l'impression d'être au max de la résolution de l'écran...
Avez-vous une idée pour soit
1. régler ghostscript correctement pour générer des jpg/png de 600 pixels de large qui soient lisibles à l'écran
2. convertir des pdf en html avec un logiciel déjà existant...
 
Yoc a dit:
Si je règle le paramètre -r pour que l'image fasse la largeur de l'écran (600, mon écran est en portrait) c'est pixélisé. Pourtant j'ai pas l'impression d'être au max de la résolution de l'écran...
Jusqu'on soit bien sûr: -r donne la résolution (en point par pouce). Sur Mac, le nombre magique est 96 si mes souvenirs sont bons, et 72 sous Windows. J'ai refait la conversion sur mon fichier de test, avec -r96, le résultat est pas génial, mais je crois pas qu'on puisse faire mieux, sans interpolation en tout cas.

Ou alors, il faut passer par ImageMagick (ou GraphicMagick), qui dans ce cas te fera une jolie interpolation . Dans ce cas, tu risques peut-être de te retrouver avec les mêmes problèmes que moi. Je l'ai compris après mon dernier messages, mais il est normal que le temps de conversion soit très lent. Un page A4 avec une résolution de 300, fait quelque chose comme 2500*3500px, pixels qu'il faut interpolés (c'est cette opération qui est très lente) pour ensuite la downsampler en quelque chose comme 600*1200.

Avez-vous une idée pour soit
1. régler ghostscript correctement pour générer des jpg/png de 600 pixels de large qui soient lisibles à l'écran
essaye avec -r96 (sur un fichier A4, la largeur en d'environ 700px). ou sinon convert de ImageMagick. La ligne de commande de mon premier message fait exactement ce que tu souhaites (mais à quel prix !).
2. convertir des pdf en html avec un logiciel déjà existant...
http://pdftohtml.sourceforge.net/ ? (aucune idée de ce que cela vaut, et pas sûr que cela fonctionne sur mac)
 
bonjour,

comment fait on pour avoir un png en couleur ? -sDEVICE=png.....
je n'arrive pas a voir les option de GS_DEVICE

peut -on egalment reduire le fichier a 150px X 150px par exemple dans la foulé