Joindre (recommandé) ou créer un lien vers le fichier PDF ici :
test4.pdf
Configuration:
Étapes pour reproduire le problème :
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.
Lien vers une visionneuse (si hébergé sur un site autre que mozilla.github.io/pdf.js ou en tant qu'extension Firefox/Chrome) :
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 constanteCHUNK_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.
Commentaire le plus utile
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.Oui, et cela devrait être facile à vérifier (il suffit d'augmenter beaucoup la valeur , en désactivant efficacement ce découpage).
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.
Encore une fois, cela semble tout à fait raisonnable.