2011-11-16 27 views
47

encontré este comando ordenada para combinar múltiples PDF en una sola, usando Ghostscript:Ghostscript para fusionar archivos PDF comprime el resultado

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=out.pdf in1.pdf in2.pdf 

El tamaño resultante es más pequeño que el tamaño combinado de las 2 PDFs.

Ejecutar el comando con un solo archivo como entrada resulta en un archivo de salida de menor tamaño.

¿Existe una opción en Ghostscript para copiar las páginas tal como aparecen en la fusión sin realizar ninguna compresión?

Si no es así, ¿es posible que la compresión de Ghostscript sea tan buena que no genere absolutamente ninguna pérdida de calidad?

Respuesta

53

Aquí hay algunos additional options que puede pasar cuando usa pdfwrite como su dispositivo. De acuerdo con esa página, si no pasa nada, entonces -dPDFSETTINGS se establece en algo cercano a /screen, aunque no se vuelve más específico. Puede intentar configurarlo en -dPDFSETTINGS=/prepress, que solo debe comprimir elementos por encima de 300 ppp.

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=out.pdf in1.pdf in2.pdf 

Otra alternativa es pdftk:

pdftk in1.pdf in2.pdf cat output out.pdf 
+3

Gracias por recomendar pdftk. Para la concatenación simple de archivos PDF, parece ser perfecto. –

+1

FWIW: 'pdftk' no está disponible para CentOS/RHEL 7. –

+0

cool .. !! Realmente –

29

Algunas de las optimizaciones de tamaño que haya observado puede provenir de la Ghostscript limpieza de objetos no utilizados, su recientemente adquirida mejoras de optimización de la fuente (no se utiliza una muy reciente versión de GS?!?) y posiblemente el muestreo/reducción de imagen que pudo haber sucedido.

Ghostscript, si se utiliza para PDF -> PDF conversiones, básicamente funciona así:

  1. Leer en el archivo (s) de entrada con todos sus objetos y convertirlos en su formato interno de la página gráfica representaciones.
  2. Realice las manipulaciones solicitadas en la línea de comandos a los contenidos de la página en el formato interno.
  3. Escriba un PDF completamente nuevo.

Esto significa que para la mayoría PDF -> PDF operaciones que tendrá diferente orden y número de los objetos PDF, e incluso código interno del objeto puede haber cambiado (aunque sus ojos no se descubre ningún diferencias entre entrada y salida PDF).

De forma predeterminada, Ghostscript también comprime las secuencias de objetos que se hayan descomprimido en el archivo original (pero esta es una compresión sin pérdida).

Ahora para su línea de comandos muy simplista que no contiene ningún deseos para manipulaciones, Ghostscript asume que desea utilizar -dPDFSETTINGS=/default, establece este parámetro de forma implícita y opera en consecuencia.

Ahora ¿qué son /default PDFSETTINGS ?!Tiene dos opciones para averiguarlo:

  1. leer el manual. El gran table in middle of this section da una visión general. Puede ver que este -dPDFSETTINGS=/default en sí mismo es solo una abreviatura de las varias docenas de otras configuraciones más específicas que representa. El enlace a la documentación proporcionada es para el encabezado actual del código de desarrollo y su versión realmente utilizada puede ser diferente, por supuesto,.

  2. Consulta (la tuya) Ghostscript para obtener un significado detallado de esta configuración. Mis respuestas a la pregunta 'Querying Ghostscript for the default options/settings of an output device...' y la pregunta 'What are PostScript dictionaries, and how can they be accessed (via Ghostscript)?' elaboran un poco más sobre esto. En resumen, para consultar Ghostscript para los detalles de sus /default PDFSETTINGS, ejecute este comando:

    gs \ 
        -q \ 
        -dNODISPLAY \ 
        -c ".distillersettings /default get {exch ==only () print ===} forall quit" 
    

    Usted debe obtener un resultado muy similar a esto:

    /Optimize false 
        /DoThumbnails false 
        /PreserveEPSInfo true 
        /ColorConversionStrategy /LeaveColorUnchanged 
        /DownsampleMonoImages false 
        /EmbedAllFonts true 
        /CannotEmbedFontPolicy /Warning 
        /PreserveOPIComments true 
        /GrayACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >> 
        /DownsampleColorImages false 
        /PreserveOverprintSettings true 
        /CreateJobTicket false 
        /AutoRotatePages /PageByPage 
        /NeverEmbed [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats] 
        /ColorACSImageDict << /HSamples [2 1 1 2] /VSamples [2 1 1 2] /QFactor 0.9 /Blend 1 >> 
        /DownsampleGrayImages false 
        /UCRandBGInfo /Preserve 
    

    El único punto que se destaca de estos : es posible que desee cambiar /AutoRotagePages de /PageByPage a /None. En la línea de comando, lo pondría como -dAutoRotatePages=/None.

    para darle una lista completa de parámetros que decirle específicamente Ghostscript emplear tanto de un modo pasarela como sea posible a la entrada PDF mediante la adición de estos parámetros:

    -dAntiAliasColorImage=false \ 
        -dAntiAliasGrayImage=false \ 
        -dAntiAliasMonoImage=false \ 
        -dAutoFilterColorImages=false \ 
        -dAutoFilterGrayImages=false \ 
        -dDownsampleColorImages=false \ 
        -dDownsampleGrayImages=false \ 
        -dDownsampleMonoImages=false \ 
        -dColorConversionStrategy=/LeaveColorUnchanged \ 
        -dConvertCMYKImagesToRGB=false \ 
        -dConvertImagesToIndexed=false \ 
        -dUCRandBGInfo=/Preserve \ 
        -dPreserveHalftoneInfo=true \ 
        -dPreserveOPIComments=true \ 
        -dPreserveOverprintSettings=true \ 
    

lo que podría intentar este comando:

gs            \ 
-o output.pdf         \ 
-sDEVICE=pdfwrite        \ 
-dAntiAliasColorImage=false     \ 
-dAntiAliasGrayImage=false      \ 
-dAntiAliasMonoImage=false      \ 
-dAutoFilterColorImages=false     \ 
-dAutoFilterGrayImages=false     \ 
-dDownsampleColorImages=false     \ 
-dDownsampleGrayImages=false     \ 
-dDownsampleMonoImages=false     \ 
-dColorConversionStrategy=/LeaveColorUnchanged \ 
-dConvertCMYKImagesToRGB=false     \ 
-dConvertImagesToIndexed=false     \ 
-dUCRandBGInfo=/Preserve      \ 
-dPreserveHalftoneInfo=true     \ 
-dPreserveOPIComments=true      \ 
-dPreserveOverprintSettings=true    \ 
    input1.pdf         \ 
    input2.pdf 

Finalmente, como Chris Haas col listo aludido: también puede usar pdftk si específicamente no desea ninguna de las optimizaciones que Ghostscript aplica por defecto. pdftk es simplemente incapaz de hacer tales cosas, y ganarás un poco de velocidad por su relativa estupidez de operación (pero probablemente también salidas de tamaño de archivo mucho más grandes que las de Ghostscript).

+1

'pdftk' no está disponible para CentOS/RHEL 7 a partir de marzo de 2016. –

+1

¿Puede aplicar una de las configuraciones' -dPDFSETTINGS = 'y luego anular solo un subconjunto de ellas con la configuración' -d * '(en su respuesta) más adelante en la línea de comando? – CMCDragonkai

+1

@CMCDragonkai: Sí, puedes. (No lo he probado, sin embargo, pero si esto no funciona, será un error). –

Cuestiones relacionadas