2010-05-01 25 views
7

Esta es una pregunta muy general, pero se basa en un problema específico. Creé una aplicación de lector de PDF para el iPad y funciona bien, excepto en algunas páginas en pdf que siempre bloquean la aplicación. Ahora descubrimos que las mismas páginas causan que Safari se bloquee también, por lo que comencé a sospechar que el problema está en algún lugar del código de procesamiento de PDF de Apple.¿Qué elementos de pdf podrían causar bloqueos?

Por lo que he podido ver, las páginas bloqueadas provocan que las bibliotecas de renderizado comiencen a asignar memoria como loca hasta que la aplicación muera. No tengo nada más para ayudarme a identificar qué desencadena este proceso.

No necesariamente sucede con los documentos más grandes, o los que tienen más formas. De hecho, no hemos encontrado ningún parámetro que nos ayude a predecir qué páginas fallarán y cuáles no.

Ahora descubrimos que ejecutar las páginas a través de un programa para el consumidor que permite fusionar documentos elimina el problema, pero no he podido detectar qué atributo o elemento es la clave. Cambiar los documentos a mano tampoco es una opción para nosotros a largo plazo. Necesitamos ejecutar un proceso automatizado en nuestro servidor.

Espero que alguien con un conocimiento más profundo sobre el formato de archivo PDF pueda orientarme en una dirección razonable para buscar las características del documento que podrían causar este tipo de comportamiento. Todo lo que he encontrado hasta ahora es algo acerca de las imágenes JBIG2, y no creo que tengamos ninguna de esas.

Respuesta

1

Se encontró el mismo problema con dos archivos PDF "especiales" que no se pudieron representar en una aplicación de iPad o Safari para iPad. En mi caso, el problema se aisló a algunos tonos de degradado semitransparentes.

Por cierto, convertir el PDF a postscript, y luego de nuevo a PDF, parece eliminar los elementos internos que no le gustan a PDFKit. El documento original tenía 1,9 MB de tamaño y muchas formas de vectores; después del proceso de conversión, el archivo se redujo en tamaño a unos 600 KB y se procesó sin problemas en el iPad.

+0

Gracias por esta información. ¿Qué programa/biblioteca usaste para hacer la conversión de PS/PDF? Sugerí a mi cliente que utilizara Ghost Script para modificar los archivos, pero al final ellos hicieron su propia solución. – Felixyz

+0

No hay programas/bibliotecas especiales de código abierto. Utilicé Adobe Distiller 6.0 ya que estaba disponible en el trabajo. – soliosg

1

No es la característica de PDF en sí, sino el soporte que es el problema. Debe separar el PDF y ver qué contiene: puede hacerlo en Acrobat 9.0. Hay un artículo que muestra cómo puede usarlo para ver el PDF en http://pdf.jpedal.org/java-pdf-blog/bid/10479/Viewing-PDF-objects

Nos enviaron algunos archivos PDF que colapsaron Correo en OS X y el problema resultó ser las fuentes incrustadas y subconjuntadas.

+0

¿Quiere decir que es el código que analiza y procesa el documento que falla en lugar del archivo en sí? Sí, soy consciente de eso. Y hemos estado buscando mucho en los archivos, tratando de deshabilitar este elemento o eso. No parecen ser las fuentes en nuestro caso, pero lo investigaré un poco más. Gracias. – Felixyz

1

He descubierto que los elementos de sombreado de Tensor definitivamente bloquearán su aplicación. ¡Siempre! Es absolutamente reproducible.

1

He estado investigando un problema como este también. Reduje mi problema a un archivo PDF de una sola página con una imagen en blanco y negro incrustada. Al abrir el pdf en adobe reader, ya sea solo o en un navegador, siempre aparece un cuadro de diálogo "Datos insuficientes para una imagen" junto con una vista dañada después del elemento.

Durante la investigación de la Internet para algún tipo de remedio a esta situación muy común entregó una pista sobre la causa raíz - de http://forums.adobe.com/message/2151474#2151474

también tuvo el mismo problema esta tarde y después de mucha experimentación descubierto la raíz de mi problema fue mi optimización de archivos PDF a través de Adobe Acrobat 6 con las imágenes monocromáticas comprimidas usando JBIG2. Eliminé la compresión en las imágenes monocromáticas solamente (imágenes en color, etc. que todavía se comprimen a través de JPEG) y ahora mis archivos se abren perfectamente en el lector 9.1, 8, etc.

Quizás este es el problema al que se enfrenta?


Siguiendo .... I localizados el problema con 'datos suficientes para una imagen' errores a imágenes en color convertidos a b & W usando un mac. Utilizando el itext & java, se me ocurrió esta solución: detectar un espacio de color de imagen problemático y volver a escribirlo. Ha obrado milagros. No debería ser difícil de replicar usando otro idioma.

   image = Image.getInstance(imageUrl); 
      if(image.getColorspace() == 1 && image.isJpeg()) { 
       baseLog.warn("bad image detected at " + imageUrl); 
       BufferedImage bufImage = ImageIO.read(new URL(imageUrl)); 
       int imageType = bufImage.getType(); 
       if (imageType == 10) { 
          // convert the image to get rid of bad stuff inside 
        ColorSpace cs = ColorSpace.getInstance(ColorSpace.CS_GRAY); 
        ColorConvertOp op = new ColorConvertOp(cs, null); 
        image = Image.getInstance(op.filter(bufImage, null), null);      
       } 
      } 
+0

Investigué lo de JBIG2 en un punto. Me dio la impresión de que la mayoría de los temas que discutían sobre ese tema eran bastante antiguos. En cualquier caso, hay varios elementos que pueden causar problemas. Vi algo que involucraba "gradientes de plumas" en un punto. Ver este enlace: http://forums.adobe.com/message/2011090 – Felixyz

+0

Gran información en la edición. Esta discusión se perfila como una buena lista de temas que las personas deberían conocer y, a partir de ahora, ¡también algunas soluciones! – Felixyz

Cuestiones relacionadas