pdf en jpg sans perte de qualité; gscan2pdf

51

Quand je convertis un fichier pdf en plusieurs fichiers jpg en utilisant

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

J'ai une perte de qualité appréciable.

Cependant, si je fais ce qui suit, il n'y a pas de perte de qualité (perceptible):

Lancez gscan2pdf, choisissez fichier-> importer (et choisissez fichier.pdf). Ensuite, allez dans le répertoire temporaire de gscan2pdf. Il y a beaucoup de fichiers pnm (un pour chaque page du fichier pdf). Maintenant oui

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

Les fichiers jpg résultants sont (à peu près) de la même qualité que le pdf original (c'est ce que je veux).

Maintenant, ma question est la suivante: s’il existe un moyen simple en ligne de commande de convertir le fichier pdf en un tas de fichiers jpg sans perte de qualité notable? (La solution ci-dessus est trop compliquée et prend beaucoup de temps).

étudiant
la source
Ce qui n’est pas clair dans vos questions est de savoir si vous parlez de texte et de graphiques vectoriels dans votre pdf, ou si vous voulez extraire des images incorporées.
asoundmove

Réponses:

92

Ce que vous entendez par "perte de qualité" n'est pas clair. Cela pourrait signifier beaucoup de choses différentes. Pourriez-vous poster des exemples pour illustrer? Peut-être couper la même section des versions de mauvaise qualité et de bonne qualité (en tant que PNG pour éviter une perte de qualité supplémentaire).

Peut-être devez-vous utiliser -densitypour faire la conversion à un dpi plus élevé:

convert -density 300 file.pdf page_%04d.jpg

(Vous pouvez ajouter du préfixe -units PixelsPerInchou -units PixelsPerCentimetersi nécessaire. Ma copie par défaut est ppi.)

Mise à jour: Comme vous l'avez indiqué, gscan2pdf(la façon dont vous l'utilisez) n'est qu'un wrapper pour pdfimages(à partir de Poppler ). pdfimagesne fait pas la même chose que convertquand on donne un PDF en entrée.

convert prend le PDF, le restitue à une certaine résolution et utilise le bitmap obtenu comme image source.

pdfimagescherche dans le PDF des images bitmap incorporées et les exporte dans un fichier. Il ignore simplement les commandes de dessin textuelles ou vectorielles du PDF.

Par conséquent, si vous avez un fichier PDF qui encapsule une série de bitmaps, il pdfimagessera beaucoup plus efficace de les extraire, car il vous donne les données brutes à leur taille originale. Vous voudrez probablement aussi utiliser l' -joption pdfimagescar un PDF peut contenir des données JPEG brutes. Par défaut, pdfimagestout est converti au format PNM et la conversion de JPEG> PPM> JPEG est un processus avec perte.

Alors, essaie

pdfimages -j file.pdf page

Vous pouvez ou pas besoin de suivre cela avec une convertà l' .jpgétape ( en fonction de ce qui utilisait le format bitmap PDF).

J'ai essayé cette commande sur un PDF que j'avais créé moi-même à partir d'une séquence d'images JPEG. Les images JPEG extraites étaient octet par octet identiques aux images source. Vous ne pouvez pas obtenir une qualité supérieure à celle.

cjm
la source
+1 Je suis tellement heureux de ne pas avoir soumis au snobisme une erreur de lecture de l'une de vos phrases qui m'a inspirée et même d'avoir essayé pdfimages - probablement le programme le plus utile que j'ai utilisé depuis des mois! J'encourage tout le monde à l'essayer!
ixtmixilix
@ixtmixilix, je suis curieux. Qu'avez-vous mal interprété et comment?
cjm
Assez impressionnant! Résolu ma journée. Je vous remercie!
Geppettvs D'Constanzo
convertest également peu pratique pour les gros PDF. Par exemple, 45 Go de mémoire étaient nécessaires pour traiter un livre de 700 pages de 6 mégapixels. Il a également fallu environ mille fois plus longtemps que pdfimages.
Camille Goudeseune
Inversement, convertissez les images en PDF ou, si vous préférez, convertissez-les en PDF, utilisez img2pdf, ici: gitlab.mister-muffin.de/josch/img2pdf (en jpg et jpg2000).
erik
4

Comme l'a dit l'élève, pdfimagesc'est une bonne option. De mon expérience à la fois gset l' convertexportation en qualité médiocre, peu importe si vous spécifiez le bon dpi.

Mais si le fichier PDF comporte plusieurs calques par page et pdfimagesne les extrait pas sous forme d'image distincte, le mieux est inskcaped'exporter la page telle qu'elle est vue.

Ce sont les commandes que j'utilise:

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

La première commande divise toutes les pages. La deuxième commande convertit page par page en png. Vous pouvez les conserver en png ou simplement les convertir en jpeg

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

Comparé à pdfimages, je trouve que gsImageMagick exporte le meilleur en qualité.convertinkscape

Eduard Florinescu
la source
3

la réponse de @cjm est correcte, mais si vous aimez l'interface graphique et que vous ne souhaitez pas afficher toutes les pages PDF, utilisez simplement gimp pour obtenir une image.

Ouvrez un pdf avec gimp et vous obtiendrez une fenêtre d'importation avec toutes les pages rendues. Choisissez les pages de votre choix et réglez la résolution sur 600 pixels / pouce (j'ai trouvé 300 valeurs trop nettes dans de nombreux cas). Enregistrer au format souhaité avec "Fichier / Exporter"

Quoi qu'il en soit, il doit y avoir un drapeau pour sélectionner les pages souhaitées en ligne de commande.

Albfan
la source
2

En regardant le code source de gscan2pdf, j'ai remarqué qu'il utilisait pdfimages. Ainsi pdfimages file.pdf pageaboutirait à page-001.ppm, page-002.ppmetc.

étudiant
la source
pdfimages fait vraiment le travail
Eduard Florinescu
2

Votre question ne dit pas clairement si vous parlez de texte et de graphiques vectoriels dans votre pdf, ou si votre pdf contient des images incorporées.

Après avoir lu en quoi consiste gscan2pdf, je suppose que vos fichiers pdf contiennent (uniquement) des graphiques incorporés.

convertessentiellement "imprime" votre pdf sans égard pour ce que le contenu est. Comme le suggère @cjm, vous souhaiterez peut-être modifier la densité d'impression. C'est le seul moyen d'augmenter la qualité des graphiques vectoriels.

Si vous souhaitez plutôt extraire les images incorporées (un peu comme gscan2pdf semble le faire), devinez que la densité entraîne généralement une perte de qualité ou une qualité supérieure à celle requise (et une perte d'espace disque). La réponse est alors d’extraire l’image plutôt que d’imprimer le pdf. Voir cet article qui préconise fondamentalement l'utilisation de pdfimagesafin d'extraire des images sans perte de qualité.

se déplacer
la source