Pdf.js: La ruta SVG está dividida incorrectamente en 2 nodos

Creado en 6 feb. 2019  ·  4Comentarios  ·  Fuente: mozilla/pdf.js

Adjunte (recomendado) o enlace al archivo PDF aquí:
test4.pdf

Configuración:

  • Navegador web y su versión: Chrome 56.0.2924.76
  • Sistema operativo y su versión: Linux Mint 18.3
  • Versión PDF.js: confirmar c0d6e46e392b327996eb0964b7932cb5bdde1727
  • Es una extensión de navegador: no

Pasos para reproducir el problema:

  1. ejecutar "nodo pdf2svg.js test4.pdf"
  2. cargue la salida test4.1.svg en Chrome
  3. Verifique el registro de errores de la consola. Verás esto:
    chrome_console_error

¿Cuál es el comportamiento esperado? (agregar captura de pantalla)
Sin errores.

¿Qué salió mal? (agregar captura de pantalla)
Una ruta en la salida se dividió en 2 partes.
La "M" inicial está en un nodo y la "L" siguiente está en el siguiente nodo.
Deben estar en el mismo nodo.
bad_svg_node

Enlace a un visor (si está alojado en un sitio que no sea mozilla.github.io/pdf.js o como extensión de Firefox / Chrome):

4-svg

Comentario más útil

No estoy muy familiarizado con el funcionamiento de OperatorList pero parece que las listas de operadores están divididas en partes de aproximadamente 1000 operadores.

Correcto; esto es para permitir que la renderización comience antes de que se haya analizado todo OperatorList (es decir, la página), reduciendo así el tiempo total necesario desde que se carga la página hasta que se renderiza por completo.

¿Suena esto plausible?

Sí, y debe ser fácil de verificar (sólo aumentará el valor mucho, desactivando efectivamente esta CHUNKING).

En lugar de modificar OperatorList y su constante CHUNK_SIZE , svg.js debería fijarse.

De acuerdo, modificar la constante definitivamente no es una solución aceptable. En primer lugar, no haría más que mover el error a otra parte. En segundo lugar, y mucho más importante, cambiarlo podría tener implicaciones de gran alcance para el rendimiento general de la representación en el back-end del lienzo.

Tal vez así: Los operadores OPS.constructPath consecutivos deben combinarse en un nodo <svg:path> si no hay un operador de pintura de ruta intermedio ...

Una vez más, eso suena totalmente razonable.

Todos 4 comentarios

Esto puede estar relacionado con el error # 9167.

Creo que el culpable está aquí:
https://github.com/mozilla/pdf.js/blob/a045a00af34b764edda5991d2bcd18541ed60536/src/core/operator_list.js#L533 -L534
No estoy muy familiarizado con el funcionamiento de OperatorList pero parece que las listas de operadores están divididas en partes de aproximadamente 1000 operadores. A veces, el límite del fragmento se coloca en el medio de una definición de ruta de PDF. Esto produce dos operadores OPS.constructPath y el último no comienza con moveTo .

¿Suena esto plausible?

En lugar de modificar OperatorList y su constante CHUNK_SIZE , se debería arreglar svg.js. Tal vez así: Los operadores OPS.constructPath consecutivos deben combinarse en un nodo <svg:path> si no hay un operador de pintura de ruta intermedio ...

No estoy muy familiarizado con el funcionamiento de OperatorList pero parece que las listas de operadores están divididas en partes de aproximadamente 1000 operadores.

Correcto; esto es para permitir que la renderización comience antes de que se haya analizado todo OperatorList (es decir, la página), reduciendo así el tiempo total necesario desde que se carga la página hasta que se renderiza por completo.

¿Suena esto plausible?

Sí, y debe ser fácil de verificar (sólo aumentará el valor mucho, desactivando efectivamente esta CHUNKING).

En lugar de modificar OperatorList y su constante CHUNK_SIZE , svg.js debería fijarse.

De acuerdo, modificar la constante definitivamente no es una solución aceptable. En primer lugar, no haría más que mover el error a otra parte. En segundo lugar, y mucho más importante, cambiarlo podría tener implicaciones de gran alcance para el rendimiento general de la representación en el back-end del lienzo.

Tal vez así: Los operadores OPS.constructPath consecutivos deben combinarse en un nodo <svg:path> si no hay un operador de pintura de ruta intermedio ...

Una vez más, eso suena totalmente razonable.

Puedo confirmar que si aumento CHUNK_SIZE a 10000000, el problema desaparece.
(y estoy de acuerdo en que esta no es una solución adecuada)
Gracias por tu ayuda.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

SehyunPark picture SehyunPark  ·  3Comentarios

PeterNerlich picture PeterNerlich  ·  3Comentarios

jigskpatel picture jigskpatel  ·  3Comentarios

dmisdm picture dmisdm  ·  3Comentarios

BrennanDuffey picture BrennanDuffey  ·  3Comentarios