Как заставить браузер распечатать веб-страницу в формате PDF? - PullRequest
8 голосов
/ 12 марта 2012

Рассмотрим статическую HTML-страницу как test.html, и версия для печати сохранена в test.pdf.Как я могу указать браузеру загружать и печатать test.pdf вместо test.html, когда посетители говорят своему браузеру о печати?

Если это невозможно, как я могу ввести кнопку печати (используяJavaScript) на странице HTML, чтобы сделать это?

Ответы [ 3 ]

8 голосов
/ 12 марта 2012

Вы не можете заставить браузер печатать файл, отличный от запрашиваемого / просматриваемого пользователем.Это был бы кошмар безопасности!

Вариант 1 (JS (по запросу) и HTML)

Я предлагаю создать на вашем сайте ссылку printable version, которая будет направлятьпользователь в .pdf (было бы желательно открыть PDF в новом окне).

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

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

Вариант 2 (чистый HTML)

<a href="test.pdf" target="_blank">Printable Version</a>
3 голосов
/ 12 марта 2012

Вы не можете перехватить команду печати в браузере, но вы можете перехватить сочетания клавиш (хотя я бы не рекомендовал это), чтобы при печати пользователем с использованием ctrl/cmd + p он перенаправлялся в PDF (или делал что-то еще)еще).Хотя это удобное поле для удобства использования, вам, вероятно, следует просто создать большую ссылку с надписью «Версия для печати» и связать ее с PDF (или версией страницы, использующей удобный для печати CSS).

ДругаяХороший вариант - просто определить некоторые правила для типа носителя print в вашем CSS-файле, тогда браузеры будут применять их, когда пользователь печатает, без каких-либо хаков или JavaScript.

Но так как вы спросили меня,создал небольшой сценарий перехвата ярлыка для команды печати.Это немного сложно из-за командной клавиши Mac, но что-то вроде:

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 ));
}
​

Это круто, но не используйте его:)

2 голосов
/ 27 мая 2014

Вот как W3C говорит, что вы должны:

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

Имейте в виду, насколько я могу судить, ни один браузер в настоящее время не поддерживает . К сожалению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...