En una aplicación web PHP, uso DomPDF para crear un PDF dinámico a partir de HTML y CSS y el pdfwrite
dispositivo de Ghostscript para fusionar ese PDF creado dinámicamente con dos PDF existentes de terceros.
Tengo 3 entornos con diferentes versiones de ghostscript:
Dev (Win10) GPL Ghostscript 8.64 (2009-02-03)
Test (Linux) GPL Ghostscript 9.06 (2012-08-08)
Prod (Linux) GPL Ghostscript 8.70 (2009-07-31)
El PDF creado por DOMPDF en sí, que es la entrada gs
aquí, se ve bien.
identify
salida en los PDF(ImageMagick 6.9.9-34 Q16 x86)
De salida en Dev :
XXX.pdf[0] PDF 595x842 595x842+0+0 16-bit sRGB 69761B 0.000u 0:00.010
XXX.pdf[1] PDF 595x842 595x842+0+0 16-bit sRGB 69761B 0.000u 0:00.004
XXX.pdf[2] PDF 595x842 595x842+0+0 16-bit sRGB 69761B 0.000u 0:00.000
Salida de Prod :
XXX.pdf[0] PDF 595x842 595x842+0+0 16-bit ColorSeparation CMYK 2004080B 0.016u 0:00.013
XXX.pdf[1] PDF 595x842 595x842+0+0 16-bit ColorSeparation CMYK 2004080B 0.016u 0:00.007
XXX.pdf[2] PDF 595x842 595x842+0+0 16-bit ColorSeparation CMYK 2004080B 0.000u 0:00.003
Todos los PDF de entrada gs
en Prod son sRGB, de acuerdo con identify
:
<third-party-pdf> PDF 595x842 595x842+0+0 16-bit sRGB 65728B 0.000u 0:00.000
<dompdf-created> PDF 595x842 595x842+0+0 16-bit sRGB 29348B 0.000u 0:00.000
Nota: No estoy seguro de qué identify
significa exactamente el espacio de color (ya que los documentos PDF o incluso las páginas no necesitan tener un solo espacio de color AFAIK). Si bien la mayoría de los objetos son RGB, los PDF de terceros también pueden contener algunos objetos de color Pantone.
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile={$concatenatedPDFTempFileName} {$pdfsToConcatString}
(sintaxis variable de PHP aquí)gs
opciones en todos los entornos.-sColorConversionStrategy=RGB -dUseCIEColor=true -sOutputICCProfile=default_rgb.icc
Tal vez alguien sepa cuál es el enfoque más prometedor para una mayor investigación o, por ejemplo, cómo puedo aplicar la configuración gs exacta del entorno de prueba al entorno prod (dudo que sea 100% posible ya que hay diferentes versiones involucradas).
Bueno, usar tres versiones diferentes (y todas bastante antiguas, incluso la más nueva tiene 6 años) de Ghostscript ciertamente no va a ayudar.
Lo primero a tener en cuenta es que Ghostscript no 'fusiona' archivos PDF. El proceso real se describe aquí.
Así que todos los archivos de entrada se interpretarán completamente, se dividirán en primitivas gráficas y luego se volverá a ensamblar un nuevo archivo. Ahora, en general, a menos que se indique lo contrario, el dispositivo pdfwrite intentará mantener las especificaciones de color en el espacio de color original. Tiene razón en su punto de que un archivo PDF puede contener múltiples espacios de color diferentes, por lo que trataría los resultados de 'identificar' con un gran grado de precaución.
No ha proporcionado el archivo de entrada, ni ninguno de los archivos de salida, por lo que no puedo realizar ningún análisis de ellos, por lo que no es realmente posible decirle qué está pasando. Ghostscript en sí, y el dispositivo pdfwrite no tiene ninguna "configuración" de la forma que creo que está esperando. Toda la configuración se realiza a través de la línea de comando, por lo que si está ejecutando la misma línea de comando para todas las instalaciones, entonces está ejecutando la misma 'configuración'.
No estoy seguro de por qué tiene problemas para "aplicar las opciones exactas". ¿Seguramente puede determinar la línea de comando de Ghostscript que está creando su propio código?
De todos modos, las versiones anteriores son, obviamente, menos ricas en funciones y menos capaces que las versiones más nuevas. Es concebible que haya un error específico en su versión 8.70 que se debe a una nueva característica, que tuvo un problema en esa versión (tenga en cuenta que el aumento del número de versión menor aquí indica un cambio significativo). Eso también podría explicar por qué obtiene sRGB de su versión (muy) antigua y CMYK de su versión más nueva.
Si proporciona los archivos para mirar, le diré cuáles son las diferencias. Sin embargo, mi consejo sería usar la misma versión en las tres plataformas, y sugeriría que usar un software que tenga menos de 6 años probablemente ayudaría. Sobre todo porque se está dejando abierto a una serie de vulnerabilidades de seguridad conocidas y publicadas. Al menos uno de los cuales se ha visto "en estado salvaje".
También me no utilizar algunas de las línea de comandos que haya suministrado, -dUseCIEColor es una idea terrible, no hagas eso (las versiones más recientes de Ghostscript le advertirán específicamente si lo hace). No cambie ColorConversionStrategy sin una buena razón. La gestión del color cambió ** totalmente * entre las series 8.xy 9.x, antes de eso, -sOutptuICCProfile no tendrá ningún efecto, por lo que está intentando aplicar controles que no son compatibles con la versión anterior.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras