Comment faire pour que Ghostscript n'efface pas les métadonnées PDF

10

Ghostscript efface les métadonnées PDF comme author, title, subjectetc. Comment puis-je dire à ghostscript de ne pas toucher les métadonnées? Je l'invoque comme suit:

gs \
  -dBATCH                    \
  -dNOPAUSE                  \
  -sOutputFile=<output_file> \
  -sDEVICE=pdfwrite          \
  -dPDFSETTINGS=/ebook       \
  <input_file>
Marco
la source
Pourquoi utilisez-vous Ghostscript? Il y a probablement une autre façon de faire ce que vous faites. Il est rare d'utiliser Ghostscript lorsque l'entrée n'est pas un fichier Postscript.
Gilles 'SO- arrête d'être méchant'
3
@Gilles Pour sous-échantillonner les images dans le PDF et réduire ainsi la taille. Je ne pense pas qu'il soit rare d'utiliser le PDF comme entrée. L'outil pdf2psutilise par exemple ghostscript pour la conversion et est livré avec gs.
Marco
Ok, Ghostscript semble être le moyen habituel de sous-échantillonner des images dans un fichier PDF, les outils de manipulation PDF natifs open source semblent faire défaut à cet égard. Cela ou ImageMagick, qui ne regarde que les images et ne se soucie pas des métadonnées PDF.
Gilles 'SO- arrête d'être méchant'
2
ImageMagick utilise ghostscript pour le traitement des PDF.
Marco
@ Gilles: "Il est rare d'utiliser Ghostscript lorsque l'entrée n'est pas un fichier Postscript." - Pas du tout, Gilles! Je l'utilise tout le temps, tous les jours pour faire du PDF-> Traitement PDF.
Kurt Pfeifle

Réponses:

6

Apparemment, il n'est pas possible de conserver les métadonnées PDF lors de l'utilisation de ghostscript. Voici une solution de contournement qui enregistre d'abord les métadonnées dans un fichier à l'aide pdftk, puis compresse le fichier avec ghostscript et enfin réécrit les métadonnées à l'aide également pdftk.

INPUTPDF=<input_file>
OUTPUTPDF=<output_file>
TMPPDF=$(mktemp)
METADATA=$(mktemp)

# save metadata
pdftk "$INPUTPDF" dump_data_utf8 > "$METADATA"

# compress
gs                       \
  -q                     \
  -sOutputFile="$TMPPDF" \
  -sDEVICE=pdfwrite      \
  -dNOPAUSE              \
  -dBATCH                \
  -dPDFSETTINGS=/ebook   \
  "$INPUTPDF"

# restore metadata
pdftk "$TMPPDF" update_info_utf8 "$METADATA" output "$OUTPUTPDF"

# clean up
rm -f "$TMPPDF" "$METADATA"

Edit: il s'agit d'un bogue dans ghostscript, voir Rapport de bogue et la confirmation que cela n'est pas censé se produire .

Marco
la source
pdftks dump_data (_utf8) génère littéralement des étiquettes chinoises. Je n'ai pas pu trouver de forum pour pdftk non plus :(
Stefan K.