Pdf.js: Le chemin SVG est incorrectement divisé en 2 nœuds

Créé le 6 févr. 2019  ·  4Commentaires  ·  Source: mozilla/pdf.js

Joindre (recommandé) ou créer un lien vers le fichier PDF ici :
test4.pdf

Configuration:

  • Navigateur Web et sa version : Chrome 56.0.2924.76
  • Système d'exploitation et sa version : Linux Mint 18.3
  • Version PDF.js : commit c0d6e46e392b327996eb0964b7932cb5bdde1727
  • Est une extension de navigateur : non

Étapes pour reproduire le problème :

  1. exécutez "nœud pdf2svg.js test4.pdf"
  2. charger la sortie test4.1.svg dans Chrome
  3. Vérifiez le journal des erreurs de la console. Vous verrez ceci :
    chrome_console_error

Quel est le comportement attendu ? (ajouter une capture d'écran)
Aucune erreur.

Qu'est ce qui ne s'est pas bien passé? (ajouter une capture d'écran)
Un chemin dans la sortie a été divisé en 2 parties.
Le "M" initial est dans un nœud et le "L" suivant est dans le nœud suivant.
Ceux-ci doivent être dans le même nœud.
bad_svg_node

Lien vers une visionneuse (si hébergé sur un site autre que mozilla.github.io/pdf.js ou en tant qu'extension Firefox/Chrome) :

4-svg

Commentaire le plus utile

Je ne connais pas très bien le fonctionnement de OperatorList mais il semble que les listes d'opérateurs soient divisées en morceaux d'environ 1000 opérateurs.

Correct; c'est pour permettre au rendu de commencer avant que l'intégralité de OperatorList (c'est-à-dire la page) n'ait été analysée, réduisant ainsi le temps global nécessaire entre le chargement de la page et son rendu complet.

Cela semble-t-il plausible ?

Oui, et cela devrait être facile à vérifier (il suffit d'augmenter beaucoup la valeur , en désactivant efficacement ce découpage).

Au lieu de modifier OperatorList et sa constante CHUNK_SIZE , svg.js devrait être corrigé.

D'accord, modifier la constante n'est certainement pas une solution acceptable. Tout d'abord, cela ne ferait que déplacer l'erreur ailleurs. Deuxièmement, et bien plus important encore, le modifier pourrait avoir des implications de grande envergure pour les performances de rendu générales dans le back-end du canevas.

Peut-être comme ceci : Les opérateurs OPS.constructPath consécutifs doivent être combinés en un seul nœud <svg:path> s'il n'y a pas d'opérateur de peinture de chemin intermédiaire...

Encore une fois, cela semble tout à fait raisonnable.

Tous les 4 commentaires

Cela peut être lié au bogue #9167.

Je pense que le coupable est ici :
https://github.com/mozilla/pdf.js/blob/a045a00af34b764edda5991d2bcd18541ed60536/src/core/operator_list.js#L533 -L534
Je ne connais pas très bien le fonctionnement de OperatorList mais il semble que les listes d'opérateurs soient divisées en morceaux d'environ 1000 opérateurs. Parfois, la limite de segment est placée au milieu d'une définition de chemin PDF. Cela produit deux opérateurs OPS.constructPath et le dernier ne commence pas par un moveTo .

Cela semble-t-il plausible ?

Au lieu de modifier OperatorList et sa constante CHUNK_SIZE , svg.js devrait être corrigé. Peut-être comme ceci : Les opérateurs OPS.constructPath consécutifs doivent être combinés en un seul nœud <svg:path> s'il n'y a pas d'opérateur de peinture de chemin intermédiaire...

Je ne connais pas très bien le fonctionnement de OperatorList mais il semble que les listes d'opérateurs soient divisées en morceaux d'environ 1000 opérateurs.

Correct; c'est pour permettre au rendu de commencer avant que l'intégralité de OperatorList (c'est-à-dire la page) n'ait été analysée, réduisant ainsi le temps global nécessaire entre le chargement de la page et son rendu complet.

Cela semble-t-il plausible ?

Oui, et cela devrait être facile à vérifier (il suffit d'augmenter beaucoup la valeur , en désactivant efficacement ce découpage).

Au lieu de modifier OperatorList et sa constante CHUNK_SIZE , svg.js devrait être corrigé.

D'accord, modifier la constante n'est certainement pas une solution acceptable. Tout d'abord, cela ne ferait que déplacer l'erreur ailleurs. Deuxièmement, et bien plus important encore, le modifier pourrait avoir des implications de grande envergure pour les performances de rendu générales dans le back-end du canevas.

Peut-être comme ceci : Les opérateurs OPS.constructPath consécutifs doivent être combinés en un seul nœud <svg:path> s'il n'y a pas d'opérateur de peinture de chemin intermédiaire...

Encore une fois, cela semble tout à fait raisonnable.

Je peux confirmer que si j'augmente CHUNK_SIZE à 10000000, le problème disparaît.
(et je suis d'accord que ce n'est pas une bonne solution)
Merci de votre aide.

Cette page vous a été utile?
0 / 5 - 0 notes