pdftools - tool 24 pdf
Ghostscript para combinar archivos PDF comprime el resultado (2)
Algunas de las optimizaciones de tamaño que observó pueden provenir de la limpieza de objetos no utilizados de Ghostscript, sus mejoras de optimización de fuentes recientemente adquiridas (¿utiliza una versión muy reciente de GS?!?) Y posiblemente muestreos / reducciones de imagen que pueden tener sucedió
Ghostscript, si se utiliza para PDF -> conversiones PDF , básicamente funciona de esta manera:
- Lea los archivos de entrada con todos sus objetos y conviértalos a su formato interno para representaciones de páginas gráficas.
- Haga las manipulaciones solicitadas en la línea de comandos para los contenidos de la página en el formato interno.
- Escriba un PDF completamente nuevo.
Esto significa que para la mayoría de las operaciones PDF -> PDF tendrá diferentes pedidos y numeraciones para los objetos PDF, e incluso el código interno del objeto puede haber cambiado (incluso si sus ojos no descubren ninguna diferencia entre el PDF de entrada y el de salida).
De manera predeterminada, Ghostscript también comprimirá cualquier flujo de objetos que haya sido 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 deseo de manipulación , Ghostscript asume que quiere usar -dPDFSETTINGS=/default
, establece este parámetro implícitamente y opera en consecuencia.
Ahora, ¿cuáles son los /default
PDFSETTINGS ?! Tienes dos opciones para descubrir:
Lee el manual . La tabla grande en el medio de esta sección ofrece una descripció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 (tu propia) Ghostscript para obtener el significado detallado de esta configuración. Mis respuestas a la pregunta "Consultar Ghostscript para las opciones / configuraciones predeterminadas de un dispositivo de salida ..." y la pregunta "¿Qué son los diccionarios PostScript y cómo se puede acceder (a través de Ghostscript)?" elabora un poco más sobre esto. En resumen, para consultar Ghostscript para obtener los detalles de su
/default
PDFSETTINGS, ejecute este comando:gs / -q / -dNODISPLAY / -c ".distillersettings /default get {exch ==only ( ) print ===} forall quit"
Deberías 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
desde/PageByPage
a/None
. En la línea de comando, lo pondría como-dAutoRotatePages=/None
.Para darle una lista completa de los parámetros que específicamente le dirían a Ghostscript que emplee la mayor cantidad posible de un modo de paso al PDF de entrada agregando 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 /
Entonces podrías probar 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 ya insinuó: 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).
Encontré este comando ordenado para combinar varios PDF en uno, usando Ghostscript:
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 los 2 archivos PDF.
Ejecutar el comando con un solo archivo como entrada aún 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 hacer ninguna compresión?
De lo contrario, ¿es posible que la compresión de Ghostscript sea tan buena que no genere absolutamente ninguna pérdida de calidad?
Aquí hay algunas opciones adicionales que puede pasar cuando usa pdfwrite
como su dispositivo. Según esa página, si no pasa nada, entonces -dPDFSETTINGS
se establece en algo parecido a /screen
, aunque no se vuelve más específico. Podría intentar configurarlo en -dPDFSETTINGS=/prepress
que solo debería 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