Come posso far apparire una finestra di dialogo di stampa usando Javascript?


159

Ho una pagina con un link "Stampa" che porta l'utente a una pagina stampabile. Il client desidera che una finestra di dialogo di stampa appaia automaticamente quando l'utente arriva alla pagina di stampa. Come posso farlo con javascript?

Risposte:


235
window.print();  

a meno che tu non intenda un popup dall'aspetto personalizzato.


5
Un po 'vecchio, ma mi piace aggiungere ... window.print (); setTimeout ("window.close ()", 100); . Ciò attende il tempo necessario per caricare il resto della pagina, ma si blocca fino a quando il pulsante di stampa nella finestra di dialogo di stampa non viene premuto o annullato, quindi arresta di nuovo ordinatamente la scheda.
Stephen,

37

Si potrebbe fare

<body onload="window.print()">
...
</body>

21

Mi piace questo, in modo che tu possa aggiungere qualunque campo tu voglia e stamparlo in quel modo.

function printPage() {
    var w = window.open();

    var headers =  $("#headers").html();
    var field= $("#field1").html();
    var field2= $("#field2").html();

    var html = "<!DOCTYPE HTML>";
    html += '<html lang="en-us">';
    html += '<head><style></style></head>';
    html += "<body>";

    //check to see if they are null so "undefined" doesnt print on the page. <br>s optional, just to give space
    if(headers != null) html += headers + "<br/><br/>";
    if(field != null) html += field + "<br/><br/>";
    if(field2 != null) html += field2 + "<br/><br/>";

    html += "</body>";
    w.document.write(html);
    w.window.print();
    w.document.close();
};

2
Questo ha funzionato come un incanto per me. Necessario per consentire i popup nel browser. Non sono sicuro che la "chiusura" venga mai eseguita, poiché la scheda non scompare mai.
ricco il

5

Faccio questo per assicurarmi che si ricordino di stampare in orizzontale, il che è necessario per molte pagine su molte stampanti.

<a href="javascript:alert('Please be sure to set your printer to Landscape.');window.print();">Print Me...</a>

o

<body onload="alert('Please be sure to set your printer to Landscape.');window.print();">
etc.
</body>

3

Se hai solo un link senza un gestore eventi click:

<a href="javascript:window.print();">Print Page</a>

0

Puoi legarlo al pulsante o al caricamento della pagina.

window.print();

0

So che la risposta è già stata fornita. Ma volevo solo approfondire riguardo a ciò in un'app Blazor (rasoio) ...

Sarà necessario iniettare IJSRuntime, al fine di eseguire JSInterop (eseguendo le funzioni javascript da C #)

NELLA TUA PAGINA DEL RASOIO:

@inject IJSRuntime JSRuntime

Dopo averlo iniettato, crea un pulsante con un evento click che chiama un metodo C #:

<MatFAB Icon="@MatIconNames.Print" OnClick="@(async () => await print())"></MatFAB>

(o qualcosa di più semplice se non usi MatBlazor)

<button @onclick="@(async () => await print())">PRINT</button>

Per il metodo C #:

public async Task print()
{
    await JSRuntime.InvokeVoidAsync("printDocument");
}

ORA NEL TUO index.html:

<script>
    function printDocument() {
        window.print();
    }
</script>

Qualcosa da notare, il motivo per cui gli eventi onclick sono asincroni è perché IJSRuntime attende le sue chiamate come InvokeVoidAsync

PS: per esempio, se si desidera visualizzare la finestra di messaggio in ASP Net Core:

await JSRuntime.InvokeAsync<string>("alert", "Hello user, this is the message box");

Per avere una finestra di messaggio di conferma:

bool question = await JSRuntime.InvokeAsync<bool>("confirm", "Are you sure you want to do this?");
    if(question == true)
    {
        //user clicked yes
    }
    else
    {
        //user clicked no
    }

Spero che questo ti aiuti :)


-6

se problema:

 mywindow.print();

altenativo usando:

'<scr'+'ipt>print()</scr'+'ipt>'

Pieno:

 $('.print-ticket').click(function(){

        var body = $('body').html();
        var ticket_area = '<aside class="widget tickets">' + $('.widget.tickets').html() + '</aside>';

        $('body').html(ticket_area);
        var print_html = '<html lang="tr">' + $('html').html() + '<scr'+'ipt>print()</scr'+'ipt>' + '</html>'; 
        $('body').html(body);

        var mywindow = window.open('', 'my div', 'height=600,width=800');
        mywindow.document.write(print_html);
        mywindow.document.close(); // necessary for IE >= 10'</html>'
        mywindow.focus(); // necessary for IE >= 10
        //mywindow.print();
        mywindow.close();

        return true;
    });

3
perché lo stai concatenando insieme comunque? '<scr' + 'ipt> print () </ scr' + 'ipt>'
CRice
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.