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í:
- Leer en el archivo (s) de entrada con todos sus objetos y convertirlos en su formato interno de la página gráfica representaciones.
- Realice las manipulaciones solicitadas en la línea de comandos a los contenidos de la página en el formato interno.
- 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:
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,.
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).
Gracias por recomendar pdftk. Para la concatenación simple de archivos PDF, parece ser perfecto. –
FWIW: 'pdftk' no está disponible para CentOS/RHEL 7. –
cool .. !! Realmente –