125 votes

Imprimez des PDF directement à partir de JavaScript

Je suis en train de créer une liste de PDF en HTML. Dans cette liste, j'aimerais inclure un lien de téléchargement et un bouton/lien d'impression. Existe-t-il un moyen d'ouvrir directement la boîte de dialogue d'impression du PDF sans que l'utilisateur ne voie le PDF ou n'ouvre une visionneuse de PDF ?

Une variante consistant à télécharger le PDF dans une iframe cachée et à déclencher l'impression avec JavaScript ?

6voto

Adnan shah Points 518

J'ai utilisé cette fonction pour télécharger un flux de pdf depuis le serveur.

function printPdf(url) {
        var iframe = document.createElement('iframe');
        // iframe.id = 'pdfIframe'
        iframe.className='pdfIframe'
        document.body.appendChild(iframe);
        iframe.style.display = 'none';
        iframe.onload = function () {
            setTimeout(function () {
                iframe.focus();
                iframe.contentWindow.print();
                URL.revokeObjectURL(url)
                // document.body.removeChild(iframe)
            }, 1);
        };
        iframe.src = url;
        // URL.revokeObjectURL(url)
    }

4voto

Diego Points 651

Vous pouvez télécharger le fichier pdf en utilisant fetch et l'imprimer avec Print.js

fetch("url").then(function (response) {
    response.blob().then(function (blob) {
        var reader = new FileReader();
        reader.onload = function () {

            //Remove the data:application/pdf;base64,
            printJS({
                printable: reader.result.substring(28),
                type: 'pdf',
                base64: true
            });
        };
        reader.readAsDataURL(blob);
    })
});

0voto

user3208848 Points 11

Simplification de la réponse de @Nicolas BADIA :

function printPDF (url)
{
    let pdfFrame = document.body.appendChild(document.createElement('iframe'));
    pdfFrame.style.display = 'none';
    pdfFrame.onload = () => (void pdfFrame.contentWindow.print());
    pdfFrame.src = url;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X