Imprimer PDF intégré dans le navigateur avec Javascript, HTML5, AngularJS
Je suis le chargement d'un encodées en Base64 pdf comme une Chaîne de caractères dans mon Javascript à partir de mon serveur. Mon client application AngularJS, HTML5.
Mon code HTML ressemble à ceci:
<div id="printablePdfContainer">
<iframe id="printablePdf" width="100%" height="100%"></iframe>
</div>
Mon Javascript ressemble à ceci:
var pdfName = 'data:application/pdf;base64,' + data[0].PrintImage;
var embeddedPdf = document.getElementById('printablePdf');
embeddedPdf.setAttribute('src', pdfName);
$scope.printDocument(embeddedPdf);
Mon printDocument fonction ressemble à ceci:
$scope.printDocument = function() {
var test = document.getElementById('printablePdf');
if (typeof document.getElementById('printablePdf').print === 'undefined') {
setTimeout(function(){$scope.printDocument();}, 1000);
} else {
var x = document.getElementById('printablePdf');
x.print();
}
};
La printDocument fonction a été prise à partir d'un pré-existante de la question dans le débordement de pile ( Silencieux imprimer un PDF intégré ), ce qui lui donne une réponse pour imprimer un pdf intégré. Cependant, cela ne semble pas fonctionner. Je suis toujours 'undefined' pour la
typeof document.getElementById('printablePdf').print === 'undefined'
vérifier. Semble comme .l'impression n'existe pas, ou quelque chose.
Donc, ma questions est la suivante: Comment puis-je imprimer un PDF intégré en HTML5, à l'aide de Javascript, et sans l'ouverture d'une fenêtre popup?
Ce qui concerne,
Phil
OriginalL'auteur philhan | 2014-11-12
Vous devez vous connecter pour publier un commentaire.
Également répondu ici: Imprimer Pdf à partir de javascript balise embed
Je vais poster ce que j'ai appris ici, après beaucoup de recherche pour n'importe qui dans l'avenir, qui pourraient trouver cela.
PDF sont affichés différemment selon le navigateur, la version du navigateur, configuration du navigateur et de Système d'Exploitation. Il y a beaucoup de variables, je vais donc parler de la plupart des situations courantes ici.
Sur tous les navigateurs, j'ai été incapable de faire appel à toute sorte de méthode print() à l'aide de Javascript, je n'ai pu utiliser PdfActions. Le OPENACTION serait d'appel d'impression. J'ai incorporé dans le fichier PDF avec iText.
Chrome utilise Adobe viewer, qui ne donnent pas accès à toute sorte de méthode print (), mais ne l'exécuter PdfActions incorporées dans le fichier PDF. Ainsi, vous pouvez intégrer un "OpenAction" dans un PDF et d'avoir le PDF de l'appel d'impression quand il est ouvert à partir de toute application qui ressemble à ces actions.
Firefox (au-dessus d'une certaine version, toutes les versions récentes) utilise Adobe viewer Windows, qui reconnaît également PdfActions. Cependant, dans OSX, il perd le soutien pour le logiciel Adobe viewer et passe à la boulangerie dans Firefox viewer (pdf.js). Qui ne prend pas en charge PdfActions.
C'est à dire: je n'ai pas vraiment testé beaucoup sur IE. Principalement parce que j'ai donné jusqu'à l'impression des fichiers PDF à partir de Javascript après Firefox ne fonctionne pas sur OSX (req. pour moi).
Mon PDF générés par un serveur que je maîtrise donc j'ai fini par faire des modifications de service dans mon serveur et en ajoutant un PNG de service qui a généré un PNG basé sur la même balise que la génération de PDF utilise. Les navigateurs gérer des images beaucoup mieux que les Pdf, je le savais, va en, mais il espérait que je voudrais juste être en mesure de ré-utiliser la génération de PDF service car il est utilisé ailleurs dans mon code.
Il ne répond pas à la question, mais c'est toutes les informations que j'ai. Ma suggestion à une personne qui pourrait trouver cela dans l'avenir: fossé PDF, si possible, dans ce cas, et aller au plus simple. Sinon, veuillez mettre à jour cette question si vous savez comment appeler la fonction print() à l'aide de Javascript dans FF aperçu de la visionneuse pdf dans OSX.
-Phil
OriginalL'auteur philhan