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?
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:
window.print();
a meno che tu non intenda un popup dall'aspetto personalizzato.
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();
};
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>
Se hai solo un link senza un gestore eventi click:
<a href="javascript:window.print();">Print Page</a>
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 :)
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;
});