Conversion D'un PDF en PNG

J'essaie de convertir un PDF en Image PNG (au moins la couverture d'un). J'extrait avec succès la première page du PDF avec pdftk. J'utilise imagemagick pour faire la conversion:

convert cover.pdf cover.png

Cela fonctionne, mais malheureusement la couverture.png est mal Rendu (une partie de l'objet alpha dans le PDF ne sont pas rendus correctement). Je sais Qu'ImageMagick utilise GhostScript pour faire la conversion et si je le fais directement avec gs, je peux obtenir les résultats souhaités, mais je préfère utiliser le convertir la bibliothèque car elle a d'autres outils que je voudrais exploiter.

Cette commande dans GhostScript accomplit l'image désirée:

gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf

Je me demande s'il existe un moyen de passer des arguments à travers convert to GhostScript ou suis-je bloqué avec L'appel de GhostScript directement?

66
demandé sur comecme 2009-03-17 11:18:51

9 réponses

Vous pouvez utiliser une ligne de commande avec deux commandes (gs, convert) connecté via un tuyau, si la première commande peut écrire sa sortie sur stdout, et si la seconde peut lire son entrée à partir de stdin.

  1. heureusement, gs peut écrire dans stdout (... -o %stdout ...).
  2. heureusement, convert peut lire à partir de stdin (convert -background transparent - output.png).

Problème résolu:

  • GS utilisé pour le canal alpha traitant une image spéciale,
  • convert utilisé pour créer transparent contexte,
  • tuyau utilisé pour éviter d'écrire un fichier temporaire sur le disque.

solution Complète:

gs -sDEVICE=pngalpha       \
   -o %stdout              \
   -r144 cover.pdf         \
   |                       \
convert                    \
   -background transparent \
   -                       \
    cover.png

Mettre à jour

Si vous voulez avoir un PNG séparé par page PDF, vous pouvez utiliser la syntaxe %d:

gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf

Cela va créer des fichiers PNG nommés page-000.png, page-001.png, ... (Notez que le %d comptage est basé sur zéro -- file-000.png correspond à la page 1 du PDF, 001 à la page 2...

Ou, si vous voulez garder votre fond transparent, pour un PDF de 100 pages, faites

for i in {1..100}; do        \
                             \
  gs -sDEVICE=pngalpha       \
     -dFirstPage="${i}"      \
     -dLastPage="${i}"       \
     -o %stdout              \
     -r144 input.pdf         \
     |                       \
  convert                    \
     -background transparent \
     -                       \
      page-${i}.png ;        \
                             \
done
56
répondu Kurt Pfeifle 2017-06-02 02:06:39

Parmi toutes les alternatives disponibles, j'ai trouvé Inkscape pour produire les résultats les plus précis lors de la conversion de fichiers PDF en PNG. En particulier lorsque le fichier source avait des couches transparentes, Inkscape a réussi là où Imagemagick et d'autres outils ont échoué.

C'est la commande que j'utilise:

inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"

Et ici, il est implémenté dans un script:

#!/bin/bash

while [ $# -gt 0 ]; do

pdf=$1
echo "Converting "$pdf" ..."
pngfile=`echo "$pdf" | sed 's/\.\w*$/.png/'`
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
echo "Converted to "$pngfile""
shift

done

echo "All jobs done. Exiting."
22
répondu Glutanimate 2013-03-18 18:59:30

Pour convertir des fichiers pdf en fichiers image, utilisez les commandes suivantes:

Pour PNG gs -sDEVICE=png16m -dTextAlphaBits=4 -r300 -o a.png a.pdf

Pour JPG gs -sDEVICE=jpeg -dTextAlphaBits=4 -r300 -o a.jpg a.pdf

Si vous avez plusieurs pages à ajouter au nom de %03d gs -o a%03d.jpg a.pdf

Ce que chaque option signifie:

  • sDEVICE = {jpeg, pngalpha, png16m...} - type de fichier
  • -o - fichier de sortie (%stdout vers stdout)
  • - dTextAlphaBits = 4-anticrénelage des polices.
  • - r300 - 300 dpi
11
répondu yanpas 2016-11-01 04:16:48

On peut aussi utiliser les utilitaires de ligne de commande inclus dans poppler-utils package:

sudo apt-get install poppler-utils
pdftoppm --help
pdftocairo --help

Exemple:

pdftocairo -png mypage.pdf mypage.png
4
répondu turdus-merula 2017-09-23 13:24:24

Voici une Discussion allemande sur un problème comme celui-ci pour les fichiers SVG où il est résolu en utilisant

convert -background transparent

Peut-être que cela fonctionne pour vous aussi.

2
répondu schnaader 2009-03-17 08:34:44

Je vais ajouter ma solution, même pensé que son fil est vieux. Peut-être que cela aidera quelqu'un de toute façon.

Tout d'abord, je dois générer le PDF. J'utilise XeLaTeX pour cela:

xelatex test.tex

Maintenant, ImageMagick et GraphicMagic les deux paramètres d'analyse de gauche à droite, de sorte que le paramètre le plus à gauche, sera exécuté en premier. J'ai fini par utiliser cette séquence pour un traitement optimal:

gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png

Il donne de beaux graphismes sur fond transparent, coupé à ce qui est réellement sur page. Les paramètres -density et -resize donnent une meilleure granularité et augmentent la résolution globale.

Je suggère de vérifier si la densité peut être diminuée pour vous. Ça va réduire le temps de conversion.

2
répondu polemon 2012-07-11 12:04:44

N'a pas pu faire fonctionner la réponse acceptée. Ensuite, j'ai découvert que la solution est beaucoup plus simple de toute façon car Ghostscript ne supporte pas seulement nativement PNG mais même plusieurs "encodages " différents":

  • png256
  • png16
  • pnggray
  • pngmono
  • ...

La commande shell qui fonctionne pour moi est:

gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf

Il sauvera la page 2 du test.pdf à tester.png en utilisant le codage pnggray et 500 DPI.

2
répondu Raffael 2015-03-17 19:50:05

Pour un PDF que ImageMagick donnait des couleurs inexactes, j'ai trouvé que GraphicsMagick faisait un meilleur travail:

$ gm convert -quality 100 -thumbnail x300 -flatten journal.pdf\[0\] cover.jpg
2
répondu aorth 2015-09-02 07:00:16

Ma solution est beaucoup plus simple et plus directe. Au moins, cela fonctionne de cette façon sur mon PC (avec les spécifications suivantes):

me@home: my.folder$ uname -a
Linux home 3.2.0-54-generic-pae #82-Ubuntu SMP Tue Sep 10 20:29:22 UTC 2013 i686 i686 i386 GNU/Linux

Avec

me@home: my.folder$ convert --version
Version: ImageMagick 6.6.9-7 2012-08-17 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP

Alors, voici ce que je cours sur mon file.pdf:

me@home: my.folder$ convert -density 300 -quality 100 file.pdf file.png
1
répondu polarise 2013-11-16 13:41:00