Cómo hacer que ghostscript no borre metadatos PDF

10

Ghostscript borra los metadatos del PDF, author, title, subjectetc. ¿Cómo puedo decirle a ghostscript que no toque los metadatos? Lo invoco de la siguiente manera:

gs \
  -dBATCH                    \
  -dNOPAUSE                  \
  -sOutputFile=<output_file> \
  -sDEVICE=pdfwrite          \
  -dPDFSETTINGS=/ebook       \
  <input_file>
Marco
fuente
¿Por qué estás usando Ghostscript? Probablemente haya otra forma de hacer lo que sea que estés haciendo. Es raro usar Ghostscript cuando la entrada no es un archivo Postscript.
Gilles 'SO- deja de ser malvado'
3
@Gilles Para reducir la muestra de las imágenes en el PDF y reducir así el tamaño. No creo que sea raro usar PDF como entrada. La herramienta, pdf2pspor ejemplo, utiliza ghostscript para la conversión y se envía junto con gs.
Marco
Ok, Ghostscript parece ser la forma habitual de reducir las imágenes en un archivo PDF, las herramientas de manipulación de PDF nativo de código abierto parecen faltar en ese sentido. Eso o ImageMagick, que solo mira las imágenes y no se preocupará por los metadatos PDF.
Gilles 'SO- deja de ser malvado'
2
ImageMagick usa ghostscript para procesar archivos PDF.
Marco
@Gilles: "Es raro usar Ghostscript cuando la entrada no es un archivo Postscript". - En absoluto, Gilles! Lo uso todo el tiempo, todos los días para procesar PDF-> PDF.
Kurt Pfeifle

Respuestas:

6

Aparentemente no es posible mantener los metadatos PDF cuando se usa ghostscript. Aquí hay una solución alternativa que primero guarda los metadatos en un archivo usando pdftk, luego comprime el archivo ghostscript y finalmente vuelve a escribir los metadatos también usando 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"

Editar: Este es un error en ghostscript, vea Informe de errores y la confirmación de que se supone que esto no sucederá .

Marco
fuente
pdftks dump_data (_utf8) literalmente genera etiquetas chinas. No pude encontrar un foro para pdftk tampoco :(
Stefan K.