2012-03-12 13 views
6

Si consideri una pagina HTML statica come test.html e una versione stampabile della pagina è stata memorizzata in test.pdf. Come posso guidare il browser a caricare e stampare test.pdf anziché test.html quando i visitatori dicono al il loro browser per stampare?Come posso forzare il browser a stampare una versione PDF di una pagina Web?

Se non è possibile, come posso introdurre un pulsante di stampa (utilizzando JavaScript) all'interno della pagina HTML per farlo?

+0

È possibile farlo tramite PHP. Non JS. http://webdesign.about.com/od/php/ht/force_download.htm In JS, hai già inviato le intestazioni dei file, quindi non puoi fare cose esotiche come questa. – Manishearth

+1

1. Questo scaricherà il file, non verrà stampato; 2. Anche se si carica il pdf, verrà aperto e non stampato. – Googlebot

+0

Oops Ho letto male la domanda. Una cosa che potrebbe funzionare (non lo so) sta caricando il pdf in un iframe e chiamando la stampa dell'iframe. Ma non sono sicuro di quanto DOM venga preservato. – Manishearth

risposta

8

Non è possibile forzare il browser a stampare un file diverso da quello che l'utente sta richiedendo/visualizzando. Quello sarebbe un incubo per la sicurezza!

Opzione 1 (JS (come richiesto) & HTML)

suggerisco di creare un collegamento printable version sul tuo sito che dirigerà l'utente al .pdf (aprire il PDF in una nuova finestra sarebbe preferibile).

<!-- JS --> 
<script type="text/javascript"> 
    function LoadPrintableVersion() { 
     window.open("Test.pdf"); 
    } 
</script> 

<!-- HTML --> 
<span id="spanPrintableVersion" onclick="LoadPrintableVersion()"> 
    Printable Version 
</span> 

Opzione 2 (HTML puro)

<a href="test.pdf" target="_blank">Printable Version</a> 
+1

Perché non collegare semplicemente al PDF usando un tag ''? Quindi funzionerà anche senza JS. – David

+3

@David, perché l'utente ha chiesto espressamente che JS e io fossimo nella mia casella JS :) Fornirò un esempio html puro (perché il tuo punto è valido)! –

+0

Si prega di spiegare come l'invio di un documento diverso alla stampante è un "incubo della sicurezza"? – Supuhstar

3

Non è possibile dirottare il comando di stampa nel browser, ma si può dirottare le scorciatoie da tastiera (anche se io non lo consiglio) in modo che quando l'utente stampa usando ctrl/cmd + p, reindirizza a un PDF (o fa qualcos'altro). Tuttavia, si tratta di un campo minato di usabilità, probabilmente dovresti semplicemente creare un link grande che dice "Versione stampabile" e collegarlo al PDF (o una versione della pagina che utilizza un CSS compatibile con la stampa).

Un'altra buona opzione consiste semplicemente nel definire alcune regole per il tipo di supporto print nel file CSS, quindi i browser applicheranno quelle quando l'utente stamperà, senza alcun hack o javascript.

Ma da quando hai chiesto di aver creato un piccolo script di dirottamento di scorciatoie per il comando di stampa. E 'un po' difficile a causa del tasto di comando mac, ma qualcosa di simile:

var cmd = false; 

$(document).on('keydown', function(e) { 

    if(detectMacCommand(e.which)) { 
     cmd = true; 
     return; 
    } 

    // now detect print (ctr/cmd + p) 
    if (e.which == 80 && (e.ctrl || cmd)) { 
     e.preventDefault(); 
     alert('redirect to PDF'); 
    } 

}).on('keyup', function(e) { 

    if(detectMacCommand(e.which)) { 
     cmd = false; 
     return; 
    } 

}); 

function detectMacCommand(key) { 
    return ($.browser.mozilla && key == 224 || 
      $.browser.opera && key == 17 || 
      $.browser.webkit && (key == 91 || key == 93)); 
} 
​ 

Questo è abbastanza freddo, ma non usarlo :)

2

Ecco il modo in cui il W3C dice che si dovrebbe:

<LINK REL="alternate" HREF="/path/to/PDFVersion.pdf" TYPE="application/pdf" MEDIA="print" TITLE="PDF version" /> 

Intendiamoci, per quanto posso dire, nessun browser supporta attualmente questo. Scusate.

Problemi correlati