Pdf.js: L'impression est floue/flou

Créé le 20 févr. 2013  ·  38Commentaires  ·  Source: mozilla/pdf.js

si j'imprime un pdf avec FF19 et la nouvelle fonction pdf, l'impression est floue.

si j'imprime avec Acrobat, la police est claire.

gauche = acrobate
à droite = ff pdf

avez-vous une idée?

https://plus.google.com/105533044232180103026/posts/dYL855pBkSM

3-upstream 4-printing

Commentaire le plus utile

Depuis https://github.com/mozilla/pdf.js/commit/c09f634bb6c713f6dc36628145788c88e60448e0, il y a maintenant la fonction renderPage dans web/viewer.js et la résolution d'impression y est codée en dur comme 150 DPI.

function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
  var scratchCanvas = activeService.scratchCanvas;
  var PRINT_RESOLUTION = 150;
  var PRINT_UNITS = PRINT_RESOLUTION / 72.0;

Pour modifier la résolution d'impression à 300 DPI, modifiez simplement la ligne ci-dessous.

var PRINT_RESOLUTION = 300;

Selon les balises de version, toutes les versions PDF.js de 1.7.x à 1.10.x devraient avoir cette capacité maintenant. Je suis surpris que cela ne soit documenté nulle part.

Idéalement, il devrait être possible de modifier la résolution d'impression à partir des paramètres de requête au lieu de modifier web/viewer.js .

Voir Comment augmenter la qualité d'impression d'un fichier PDF avec la visionneuse PDF.js pour plus de détails.

Tous les 38 commentaires

Je suppose que c'est parce que la sortie pdf.js est un canevas (un canevas par page, pour être exact), qui ne correspond probablement pas à 100% à la résolution de l'imprimante.

Cela m'arrive aussi.

DSCF8966

  • top = Firefox intégré PDF.js
  • en bas = Adobe Acrobat

La qualité d'impression est tout simplement inacceptable.
De plus, le PDF.js intégré génère une bordure noire sur les côtés droit et inférieur, comme s'il s'agissait d'une photocopie d'une feuille de plus petite taille.

Toute solution? Je suis dans une hotline et j'ai 200 utilisateurs avec ce problème.

@BadFriend , @musiphil , quel système d'exploitation vous ou vos utilisateurs utilisez ?

Même problème ici sur FFox 19 sur WinXP vers imprimante PostScript. Les fines lignes horizontales sont tramées, tandis que les lignes verticales sont fines. Les en-têtes et les pieds de page conviennent également.

J'exécute Firefox 19.0 sur Windows 7 et j'ai imprimé ces documents sur une imprimante HP Color LaserJet CP4525 avec PCL6.

FF19 + Win7 64bit + OKI561 via PCL6 sur port WSD ou Adobe PDF (Adobe Acrobat 9.2.0)

IMG_20130222_074757

à gauche : plug-in Chrome
milieu : Adobe Reader
à droite : Firefox pdf.js

Télécharger PDF -> http://www.file-upload.net/download-7241349/offers-36.pdf.html

Voir aussi #2771. Citant @brendandahl :

La faible qualité est suivie dans https://bugzilla.mozilla.org/show_bug.cgi?id=811002 .

Le bogue en amont a été corrigé. Est-ce toujours un problème avec les dernières versions de Firefox et PDF.js ?

Le bogue en amont a été corrigé. Est-ce toujours un problème avec les dernières versions de Firefox et PDF.js ?

Je pense que cela n'a été corrigé que pour Windows. Il y a un nouveau bogue rempli pour OSX (bug 932313) mais je ne suis pas convaincu qu'il soit valide (voir mon commentaire sur https://bugzilla.mozilla.org/show_bug.cgi?id=932313#c2).

Jusqu'à ce que le problème ne soit pas résolu sur Linux, je vote pour garder ce bogue ouvert.

Est-ce que c'est corrigé ?
Cette page de démonstration s'imprime correctement depuis firefox
http://mozilla.github.io/pdf.js/web/viewer.html
https://dl.dropboxusercontent.com/u/1383480/work/printing/2015-02-16%2011.29.52.jpg

à partir de Chrome et Chromium, le résultat de l'impression est SI flou, je ne trouve pas de mots pour le décrire
https://dl.dropboxusercontent.com/u/1383480/work/printing/2015-02-16%2011.29.58.jpg
J'ai essayé de définir dpi pour l'imprimante et PRINT_SCALE RATIO sur 1, 3, 4, 8 - aucun effet
J'ai essayé la dernière version de github (8614c17) - idem
(environnement : Chrome, Chrome, Windows 7)

Est-ce que j'ai raté quelque chose ?
Pourriez-vous s'il vous plaît examiner ceci et éventuellement suggérer une solution de contournement rapide?

@jonny64 merci d'avoir signalé cela ! Malheureusement, je suppose qu'il n'y a pas grand-chose à faire pour Chrome/Chromium ici. La meilleure qualité d'impression dans Firefox résulte de l'utilisation d'une API spéciale pour l'impression qui est disponible dans Firefox mais pas dans Chrome. À l'époque, j'ai proposé l'API en standard mais il n'y avait pas beaucoup d'intérêt et elle n'est donc toujours disponible que dans Firefox.

:) @jviereck , eh bien, ok, je devrais vivre avec ça
J'ai essayé la visionneuse interne Chrome
Il s'imprime bien, mais c'est "Enregistrer" qui casse le mode kiosque
(nous devons imprimer avec aperçu à partir de Chrome en mode plein écran kiosque)

Heureusement, j'ai des antécédents avec C il y a quelque temps
https://pdfium.googlesource.com/pdfium.git
La source de la visionneuse interne Chrome est-elle correcte ?
Est-il préférable de masquer « Enregistrer » dans les paramètres de Chrome ou lorsque la ligne de commande --kiosk est définie ?
Avez-vous des idées de haut niveau où et comment puis-je le mettre en œuvre ?

C'est toujours un bogue sur OS X et la dernière édition de Firefox Dev, pour autant que je sache, du moins dans certaines circonstances.

Comment reproduire sans imprimante :

  • Cliquez sur "Imprimer" dans la visionneuse PDF.js.
  • Cliquez sur le bouton "PDF".
  • Choisissez « Enregistrer en tant que PostScript… » (et non « Enregistrer en tant que PDF… »)
  • Ouvrez le fichier .ps enregistré dans Preview.app.

Le texte n'est pas sélectionnable et, en zoomant, le texte est assez pixelisé. Le texte a fière allure si vous choisissez « Enregistrer en tant que PDF… »

J'ai essayé d'augmenter la résolution par défaut dans
web/app.js::beforePrint
<< var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(1);

var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(2);

et web/pdf_page_view.js::beforePrint
<< var viewport = pdfPage.getViewport(1);

var viewport = pdfPage.getViewport(2);

L'impression est plus lente mais la qualité s'est améliorée

Quelques améliorations après #7677

Y a-t-il eu des mises à jour de ce problème au cours des 4 derniers mois ? Ceci est encore perceptible sur la dernière version de pdf.js. J'ai récemment déployé un déploiement à l'aide de pdf.js et j'ai maintenant des documents imprimés avec des lettres floues qui ne posaient pas de problème avec le lecteur PDF natif de Chrome.

Vous pouvez reproduire ce problème en imprimant à partir de la propre page de démonstration de Mozilla . Je sais que ce n'est pas un problème de pilote car cela se produit également lorsque vous imprimez au format PDF.

Il semble que certaines personnes utilisant pdf.js en production aient dû contourner entièrement pdf.js pour contourner ce problème ( exemple ).

Actuellement, une impression de meilleure qualité n'est pas possible sans augmenter considérablement l'utilisation de la mémoire, ce que la plupart des navigateurs ne prendront pas bien. Le back-end du canevas ne peut pas fournir une telle fonctionnalité. Il y a un projet ouvert (https://github.com/mozilla/pdf.js/projects) pour rechercher en utilisant le prototype de back-end SVG pour une impression de haute qualité.

J'ai trouvé que PDF.js avait une qualité d'impression acceptable et une qualité d'impression floue en fonction de la version de Firefox installée, j'aimerais donc jeter un œil à ce qui a changé entre les versions à partir desquelles j'ai pu imprimer. J'ai https://imgur.com/7Beh7MO , qui est généré à partir d'une impression directe de gauche à droite de Firefox 52, 47.0.2 et 42, les deux premiers étant au moins de nouvelles mises à jour. Comme indiqué, quelque chose a changé dans PDF.js entre les versions FF 47.0.2 et FF 52 qui semble avoir fait chier la qualité, donc si quelqu'un a des informations sur les signets à regarder pour commencer pour ces versions de Firefox, je le ferais Cela ne vous dérange pas de jeter un œil pour commencer.

En regardant les versions du référentiel Firefox de PDF.js, je vois que 47.0.2 était la version 1.4.121, ce qui correspond au commit 51f6aba (peut-être le commit après, qui est be1e12d) et que Firefox 52 est livré avec PDF.js 1.6. 315, ce qui correspond à peu près au commit c23f124. J'étudie actuellement la différence entre ces commits, mais la différence entre eux est probablement de 400 commits et toute information sur l'emplacement de l'impression serait très utile.

Comme indiqué, quelque chose a changé dans PDF.js entre les versions FF 47.0.2 et FF 52 qui semble avoir fait chier la qualité,

Bien qu'il soit certainement possible qu'un changement dans PDF.js soit responsable, je n'écarterais pas (au moins au début) entièrement la possibilité que le problème puisse être lié, par exemple, au code graphique/d'impression dans d'autres parties de Firefox.
Il peut être utile, et peut-être même plus rapide, d'utiliser http://mozilla.github.io/mozregression/ pour essayer de trouver une plage de régression.

Le bouton d'impression à l'intérieur de PDF.js utilise-t-il même Firefox pour imprimer ? Mon
hypothèse basée sur le fait que le plugin est disponible dans d'autres navigateurs
est qu'il n'y aurait aucun problème lié à la façon dont le navigateur sous-jacent
gère l'impression. Ceci est également pris en charge par la boîte de dialogue de traitement d'impression
répertoriant le rendu PDF.js en tant que tâche pour envoyer les données à l'imprimante. je le ferai
faites des tests supplémentaires et essayez d'exécuter PDF.js en tant que plugin et testez
différentes versions de possible pour voir si cela change quelque chose.

Le 14 mars 2017 à 9h58, "Jonas Jenwald" [email protected] a écrit :

Comme indiqué, quelque chose a changé dans PDF.js entre les versions FF 47.0.2 et FF 52
qui semble avoir chié la qualité,

Bien qu'il soit certainement possible qu'un changement dans PDF.js soit responsable, je
n'écarterait pas (au moins au début) entièrement la possibilité que le
le problème peut être lié, par exemple, au code graphique/d'impression dans d'autres parties de
Firefox.
Il peut être utile, et peut-être même plus rapide, d'utiliser
http://mozilla.github.io/mozregression/ pour essayer de trouver une régression
gamme.

-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/mozilla/pdf.js/issues/2750#issuecomment-286428765 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/AOZHcyFJnLjI8MhAXspe-SIikmMA7YWOks5rlpzwgaJpZM4AcblL
.

--
Veuillez cliquer pour lire les avis :
http://www.mediweightlossclinics.com/sig/ Communication confidentielle
http://www.mediweightlossclinics.com/sig/ Avis de non-responsabilité à des fins éducatives
http://www.mediweightlossclinics.com/sig/ Déclaration de divulgation de la franchise

Auparavant, nous utilisions le mozPrintCallback spécifique

En général, nous affichons maintenant les canevas et les imprimons en utilisant la logique d'impression définie par le navigateur standard, donc je pense que le problème peut être dû à la modification de la mise à l'échelle du canevas/au code de rendu des polices ou à un bogue du navigateur.

Reportez-vous à https://github.com/mozilla/pdf.js/commit/c09f634bb6c713f6dc36628145788c88e60448e0 pour la majorité de ce changement. Vous voudrez peut-être vérifier s'il y a une différence dans la qualité d'impression de Firefox avec et sans le module complémentaire.

Depuis https://github.com/mozilla/pdf.js/commit/c09f634bb6c713f6dc36628145788c88e60448e0, il y a maintenant la fonction renderPage dans web/viewer.js et la résolution d'impression y est codée en dur comme 150 DPI.

function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
  var scratchCanvas = activeService.scratchCanvas;
  var PRINT_RESOLUTION = 150;
  var PRINT_UNITS = PRINT_RESOLUTION / 72.0;

Pour modifier la résolution d'impression à 300 DPI, modifiez simplement la ligne ci-dessous.

var PRINT_RESOLUTION = 300;

Selon les balises de version, toutes les versions PDF.js de 1.7.x à 1.10.x devraient avoir cette capacité maintenant. Je suis surpris que cela ne soit documenté nulle part.

Idéalement, il devrait être possible de modifier la résolution d'impression à partir des paramètres de requête au lieu de modifier web/viewer.js .

Voir Comment augmenter la qualité d'impression d'un fichier PDF avec la visionneuse PDF.js pour plus de détails.

Si le correctif de about:config.

Cela peut-il être paramétré ?

J'ai essayé d'augmenter la résolution par défaut dans
web/app.js::beforePrint
<< var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(1);

var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(2);

et web/pdf_page_view.js::beforePrint
<< var viewport = pdfPage.getViewport(1);

var viewport = pdfPage.getViewport(2);

L'impression est plus lente mais la qualité s'est améliorée

Ça marche!

La visionneuse générique expose désormais l'option d'application printResolution grâce au #10854, de sorte que la visionneuse pré-construite n'a plus besoin d'être modifiée pour cela. Notez que l'augmentation de la résolution d'impression, tout en améliorant la qualité d'impression, peut rendre l'impression plus lente et/ou le navigateur moins réactif, mais il s'agit désormais d'un compromis que les utilisateurs de la visionneuse peuvent faire eux-mêmes.

@timvandermeij Merci pour la mise à jour ! Pour clarifier, parlez-vous d'"utilisateurs" comme dans "utilisateurs de la bibliothèque pdf.js", ou comme dans "utilisateurs de Firefox" ? Je fais partie de cette dernière catégorie (et je pense que ce bogue concerne les utilisateurs de Firefox) et j'essaie de déterminer si ces AppOptions sont exposées dans Firefox de quelque manière que ce soit.

Mise à jour : je pense que @timvandermeij fait référence aux "utilisateurs de la bibliothèque pdf.js". Je pense également que les AppOptions sont exposées dans Firefox via about:config , mais pas automatiquement (c'est-à-dire que quelqu'un doit probablement modifier le code firefox pour l'activer), car la plupart des AppOptions, mais pas toutes, y existent. pdfjs.cursorToolOnLoad est dans about:config , mais pas defaultUrl ni disableHistory , probablement parce que cela n'a pas de sens dans le contexte de Firefox.

@raztus Oui, je voulais dire les utilisateurs de la bibliothèque. Les versions de Firefox ont été laissées en dehors de cette portée (https://github.com/mozilla/pdf.js/pull/10854#discussion_r287325125) car il n'est pas facile de dire ce qui se passe, par exemple, la réactivité du navigateur et l'utilisation de la mémoire si vous augmentez cette valeur . Si nous obtenons plus de commentaires à ce sujet, je ne suis pas contre l'idée de rendre la préférence disponible pour les versions de Firefox (mozcentral) également.

@timvandermeij Merci et @kleins05 pour cette amélioration. J'ai mis à jour mon message concernant cette fonctionnalité.

Ai-je raison de supposer qu'avec cette mise à jour, la résolution d'impression peut être définie à l'aide du code ci-dessous ?

document.addEventListener('webviewerloaded', function() { PDFViewerApplicationOptions.set('printResolution', 300); });

Oui, je pense que vous avez raison. L'événement webviewerloaded est en effet le bon événement à écouter pour définir les options de l'application ; voir:
https://github.com/mozilla/pdf.js/blob/c91f437eaaff79b660805e020f4fa9d4a2a7fe65/web/viewer.js#L208 -L210
Après ce point, PDFViewerApplicationOptions devrait toujours être disponible. Je n'ai pas essayé cet extrait particulier, mais d'après l'inspection, il semble bon et vous pouvez l'essayer en vérifiant le dernier code de branche master , en ajoutant cet extrait et en vérifiant si la qualité d'impression s'améliore.

@raztus Oui, je voulais dire les utilisateurs de la bibliothèque. Les versions de Firefox ont été laissées en dehors de cette portée ( #10854 (commentaire) ) car il n'est pas facile de dire ce qui se passe avec, par exemple, la réactivité du navigateur et l'utilisation de la mémoire si vous augmentez cette valeur. Si nous obtenons plus de commentaires à ce sujet, je ne suis pas contre l'idée de rendre la préférence disponible pour les versions de Firefox (mozcentral) également.

@timvandermeij J'aimerais aider à fournir certains de ces commentaires. Après tout, about:config est déjà une zone d'annulation de garantie ;) Comment puis-je contribuer ? Aurais-je besoin de compiler Firefox à partir de zéro pour changer le printResolution ?

Vous pouvez expérimenter cela en ouvrant la visionneuse par défaut (soit https://mozilla.github.io/pdf.js/web/viewer.html qui exécute toujours le code de branche master le plus récent ou un paiement personnalisé) , en ouvrant la console Web et en saisissant PDFViewerApplicationOptions.set('printResolution', 300); . Cela définira la résolution d'impression sur 300 DPI au lieu de 150 DPI par défaut. Si vous cliquez ensuite sur le bouton d'impression, vous remarquerez une différence dans la qualité d'impression, mais aussi dans le temps nécessaire pour rendre les pages et la consommation de mémoire (je viens d'essayer moi-même pour m'assurer que ces étapes fonctionnent). La question principale est de savoir comment la résolution d'impression en DPI est liée à l'utilisation de la mémoire/au temps de rendu pour divers types de fichiers PDF, tels que les documents de petite/moyenne/grande taille, mais aussi les documents contenant uniquement du texte ou des images. Si nous en savons plus sur son comportement dans divers scénarios de la vie réelle, nous pourrons peut-être également introduire le paramètre pour les versions de Firefox et/ou mettre à jour la valeur par défaut.

J'ai essayé la méthode ci-dessus, mais je deviens indéfini.
Ceci est avec Chrome Canary version 77.0.3818.0 (version officielle) canary (64 bits)

Oui, exécuter cela donnera undefined car la définition d'une option n'a pas de valeur de retour, mais si vous imprimez à nouveau, vous aurez une qualité de sortie d'impression améliorée.

THX.
Pourquoi cette option n'est-elle pas disponible en tant qu'option réglable par l'utilisateur, mais uniquement en tant qu'option réglable par programme ?

Ceci est expliqué dans les commentaires ci-dessus, notamment https://github.com/mozilla/pdf.js/issues/2750#issuecomment -496697032. Nous voulons d'abord l'expérimenter avant de le rendre plus facilement accessible. Notez qu'il y a tout juste un jour, PR #10879 a été fusionné avec devrait aider un peu à résoudre le problème d'utilisation de la mémoire, et maintenant que cela est au moins configurable par programme, nous pouvons plus facilement l'expérimenter et inclure des améliorations.

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

Questions connexes

hp011235 picture hp011235  ·  4Commentaires

smit-modi picture smit-modi  ·  3Commentaires

SehyunPark picture SehyunPark  ·  3Commentaires

dmisdm picture dmisdm  ·  3Commentaires

patelsumit5192 picture patelsumit5192  ·  3Commentaires