J'ai une boîte fixe où je veux afficher mes PDF en rendu par PDF.js. Comme la documentation PDF.js n'est pas vraiment accessible (en parcourant leurs fichiers source), je voudrais savoir s'il est possible de mettre à l'échelle un rendu PDF sur une largeur fixe. Lorsque je définis en CSS : canvas { width: 600px; }
pour le canevas affichant le PDF, le PDF est étiré et la qualité est mauvaise.
J'ai mis à jour l'exemple du github Pdf.js http://jsbin.com/pdfjs-prevnext-v2/edit#html,live pour évoluer correctement à une largeur de toile fixe. Voir http://jsfiddle.net/RREv9/ pour mon code.
La ligne importante est
var viewport = page.getViewport(canvas.width / page.getViewport(1.0).width);
car l'expression canvas.width / page.getViewport(1.0).width
nous donne le facteur d'échelle approprié.
Vous devez modifier la largeur de votre canevas non pas avec css mais par l'attribut width
du canevas. Voir largeur et hauteur du canevas en HTML5
Pour garantir que la mise à l'échelle fonctionne avec toutes les tailles de page (Letter, A4, A5, etc.), vous devez tenir compte du fait que les rapports entre la hauteur et la largeur varient lorsque les tailles de page changent. Par exemple, une taille de page populaire (en pouces) est:
Vous pouvez calculer la mise à l'échelle correcte en considérant à la fois la hauteur et la largeur et en ne mettant à l'échelle que la quantité la plus petite. Cela garantira que tout tient sur votre toile. De plus, si vous changez la largeur ou la hauteur de votre toile, vous ne casserez rien.
var unscaledViewport = page.getViewport(1);
var scale = Math.min((canvas.height / unscaledViewport.height), (canvas.width / unscaledViewport.width));
var viewport = page.getViewport(scale);