Si solo desea concatenar dos archivos PDF sin ningún reprocesamiento de su contenido, pdftk
es para usted. (En Mac OS X, esto debería estar disponible a través de MacPorts o Fink, para Linux, hay paquetes nativos para todas las distribuciones principales; para Windows, mire aquí ) . Pruebe esto:
pdftk title.pdf content.pdf cat output book.pdf
Esto antepondrá el título.pdf al contenido.pdf y escribirá el resultado en book.pdf .
pdftk
es una forma "tonta" pero muy rápida de concatenar dos (o más) archivos PDF. "Dumb" hasta ahora, ya pdftk
que de ninguna manera interpreta el flujo de datos PDF, solo se asegura de que los números de objeto internos se vuelvan a barajar según sea necesario y aparezcan en la xref
estructura PDF (que básicamente es una especie de PDF ToC para objetos).
Ghostscript:
Si desea utilizar Ghostscript, el comando básico para concatenar los mismos dos archivos sería:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
title.pdf \
content.pdf
Sin embargo, como has experimentado, esta línea de comando simple puede estropear la calidad de tu imagen. La razón es que Ghostscript no se 'voltea' cuando procesa archivos PDF: los interpreta completamente al leerlos y crea un archivo completamente nuevo al escribir el resultado. Para crear el resultado, utilizará automáticamente la configuración predeterminada para muchos detalles en el procesamiento general. Estos valores predeterminados se aplicarán a todos los casos en los que sus invocaciones no hayan indicado a Ghostscript lo contrario.
Entonces, el método de Ghostscript para crear el nuevo book.pdf es mucho más "inteligente" (pero también mucho más lento) que pdftk
el método de ". (Esta es también la razón por la cual Ghostscript en muchos casos puede, dentro de ciertos límites, "reparar" archivos PDF borrados, o para incrustar fuentes en los PDF de salida que no están incrustados en los PDF de entrada, o para eliminar imágenes duplicadas, reemplazando por meras referencias, etc., y en general crearon archivos más pequeños y mejor optimizados a partir de archivos PDF de entrada hinchada ...)
La solución es no permitir que Ghostscript use sus valores predeterminados: agregando más parámetros personalizados a la línea de comandos.
¿Qué significa "Ghostscript 'interpreta' su entrada en PDF" ?
Todo el archivo y su contenido (objetos, secuencias, fuentes, imágenes, ...) se leen, verifican y mantienen en su propia representación interna, antes de escupir el PDF resultante con sus objetos PDF nuevamente. Sin embargo, al 'escupir', Ghostscript aplicará todas sus configuraciones internas predeterminadas para los cientos de parámetros [*] que están disponibles.
Desafortunadamente, esto provoca el "reprocesamiento" de las imágenes de acuerdo con esta configuración predeterminada, que solo puede evitarse o anularse agregando sus propios parámetros de línea de comandos (deseados).
Sus problemas de imagen podrían ser causados por la necesidad de Ghostscript (debido a problemas de licencia) de volver a codificar las imágenes JPEG2000 a codificación JPEG. Si desea evitar esto, agregue lo siguiente a su línea de comandos:
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
Otras opciones de línea de comandos relacionadas con la imagen a tener en cuenta para incluir son:
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
Entonces, la línea de comandos completa de Ghostscript que podría hacerte feliz debería leer:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \
-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \
title.pdf \
content.pdf
También puede decirle a Ghostscript que NO comprima imágenes en absoluto en el PDF de salida, utilizando esta línea de comando:
gs \
-o book.pdf \
-sDEVICE=pdfwrite \
-dColorConversionStrategy=/LeaveColorUnchanged \
-dEncodeColorImages=false \
-dEncodeGrayImages=false \
-dEncodeMonoImages=false \
title.pdf \
content.pdf
.
[*]:
Si estás interesado en conocer una lista completa de configuraciones predeterminadas que está utilizando el dispositivo pdfwrite de Ghostscript , ejecuta el siguiente comando. Te devuelve la lista completa :
gs \
-sDEVICE=pdfwrite \
-o /dev/null \
-c "currentpagedevice { exch ==only ( ) print == } forall"
Para obtener explicaciones sobre qué significan exactamente todos estos parámetros, deberá leer la documentación de Adobe sobre "Parámetros de Distiller" . Ghostscript se esfuerza mucho por imitar todo esto ...