Ghostscript / pdfwrite produce una página gris en color PDF y CMYK en lugar de RGB

Michael Jaros

Fondo

En una aplicación web PHP, uso DomPDF para crear un PDF dinámico a partir de HTML y CSS y el pdfwritedispositivo 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)

Problema

Esperado

  • Todas las páginas se fusionaron en el PDF resultante
  • Sin diferencias de color obvias

Resultado actual

  • Todas las páginas se fusionaron en el PDF resultante
  • Los colores tienen el aspecto esperado en entornos de desarrollo y prueba (pruebas con Adobe Reader en Win10)
  • En el entorno Prod, la página dinámica (creada por DomPDF)
    • se ve gris en lugar de coloreado
    • parece tener CMYK en lugar de color RGB, como lo identifica ImageMagick 6.9.9-34 Q16 x86:

El PDF creado por DOMPDF en sí, que es la entrada gsaquí, 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 gsen 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é identifysignifica 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.

Lo que he intentado hasta ahora

  • La línea de comando inicial era gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile={$concatenatedPDFTempFileName} {$pdfsToConcatString}(sintaxis variable de PHP aquí)
  • Pasó algunas horas tratando de encontrar documentación u otros recursos sobre este
  • Diferencia de 3 vías entre gsopciones en todos los entornos.
  • probamos combinaciones de diferentes interruptores de comando obvios como -sColorConversionStrategy=RGB -dUseCIEColor=true -sOutputICCProfile=default_rgb.icc
  • Intenté aplicar las opciones exactas como en el entorno de prueba al ghostscript en prod, pero no logré generarlas en un formato fácilmente reutilizable (¿tal vez alguien tiene una pista sobre eso?)

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).

KenS

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

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

Tonos de imagen gris en lugar de RGB

¿Cómo funcionan los espacios de color CMYK / RGB en archivos PDF e imágenes, y cómo afecta su interconvertibilidad?

Libreoffice convierte HTML a PDF en la línea de comando produce una página vacía

Creador de PDF php: solo cree una página en lugar de varias

Ghostscript pdfwrite produce una salida de longitud cero al leer archivos PDF, no se informa de errores, está bien con otras entradas

Página personalizada como índice de una sección y lista de contenido en cualquier lugar

Página personalizada como índice de una sección y lista de contenido en cualquier lugar

Mi página de noticias en mi aplicación no recupera ninguna noticia y solo se muestra una página en blanco en lugar de una fuente de noticias

El color de fondo de Android se establece en gris en lugar de @android: color / white

Imprima un PDF en una impresora en escala de grises con Ghostscript y .NET

Webapi devuelve una página html en lugar de json

Redirigir una página a http en lugar de https

¿Cómo navegar a una página en un sitio web en lugar de a la página de inicio usando un transportador y probar operaciones en él?

Cómo convertir este código para mostrar la intensidad gris en lugar de RGB

Cómo convertir este código para mostrar la intensidad gris en lugar de RGB

Color de fondo gris en el elemento de la lista en lugar de blanco

Libro de trabajo en PDF: números de página unidos a PDF en lugar de hoja

Vista de página muestra una pantalla gris cuando está en modo de liberación

La consulta de MongoDB produce una respuesta OR en lugar de AND

Página de error de etiqueta blanca en lugar de una página jsp específica

¿Por qué querría utilizar una consulta de página en lugar de contexto de página?

Establecer la opacidad THREE.BasicLineMaterial en 0 produce una línea discontinua blanca y gris

RGB565 en niveaux de gris

¿Cómo escribo en una página web en lugar de en la consola en C #?

Quicklook / QLPreviewController muestra una página en blanco en lugar de pdf en ios 8 pero funciona bien en iOS7

el color de la fuente cambia a blanco en lugar de gris

Abrir archivo PDF en Android N muestra color negro en una página en blanco

TCPDF produce una página en blanco en registros seleccionados de mysql

"@android: style / TextAppearance.StatusBar.EventContent.Title" establece el color en blanco en lugar de gris en Android L