Как распечатать PDF-файл из браузера
-
03-07-2019 - |
Вопрос
Можно ли в веб-приложении принудительно распечатать PDF-файл на клиенте?Если браузер настроен на открытие PDF-файла внутри окна, я предполагаю, что вызов window.print() будет работать, но некоторые браузеры (например, мой) настроены на открытие PDF-файла извне.
Решение
Google docs делает это путем встраивания JavaScript в PDF, который сообщает Acrobat Reader или любому другому совместимому устройству для чтения, чтобы распечатать его.
Вам понадобится PDF toolkit, чтобы сделать это со случайным PDF-файлом.
Другие советы
<html>
<script language="javascript">
timerID = setTimeout("exPDF.print();", 1000);
</script>
<body>
<object id="exPDF" type="application/pdf" data="111.pdf" width="100%" height="500"/>
</body>
</html>
аналогично предложению Тэена, вы можете использовать iframe для рендеринга PDF-файла, а затем использовать contentWindow.print();
вы можете установить http-заголовок в значение application / pdf, а затем принудительно открыть новое окно с помощью javascript и распечатать таким образом.но кто на самом деле мог это сделать?я имею в виду, давай прямо сейчас.
вы можете воспользоваться простой удивительной библиотекой printjs ( печать ) "http://printjs.crabbly.com" он берет PDF-файл и распечатывает его, не показывая диалоговое окно печати, если вам нужно, простой способ сделать это ниже :
<button type="button" onclick="printJS('docs/printjs.pdf')">
Print PDF
</button>
Вы имеете в виду, что хотите принудительно отправить файл на принтер?Вы имеете в виду Закон непреднамеренных последствий - устройство пользователя не подключено к принтеру?Это может быть BlackBerry, это может быть ноутбук с Wi-Fi.Что делать, если пользователь не хочет, чтобы он отправлялся на принтер по умолчанию?
Вы не можете распечатать PDF-документ непосредственно из браузера, используя Javascript.Функция Javascript window.print() используйте функцию печати браузера, и это не то, что вам нужно.Вы можете достичь своей цели, запустив печать с помощью Java Web Start.Поместите ваш PDF-документ непосредственно в jnlp, чтобы вы могли запустить Java-программу, которая получает необработанный PDF-документ в качестве аргумента.Теперь вы работаете в системе, а не в браузере, поэтому можете напрямую взаимодействовать с драйвером печати через JAVA API.Это кажется довольно простым, но на самом деле это не потому, что JAVA printing API принимает не файл в качестве входных данных, а определенную структуру данных, которая реализует ava.awt.print.Интерфейс с возможностью просмотра страниц.
Существует веб-сервис по адресу www.pdfprint.it которые делают всю работу за вас.Вот фрагмент, взятый из официальной документации.
<?php
// 1. GET the jnlp file with curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.pdfprint.it/printPdf?auth=XXXX");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //return the transfer as a string
$jnlp = curl_exec($ch);
curl_close($ch);
$pdfDoc ="example.pdf";
//2. put in the jnlp your PDF document base64 encoded
$jnlp = str_replace("####", base64_encode(file_get_contents($pdfDoc)),$jnlp);
//3. echo the jnlp file
header('Content-type: application/x-java-jnlp-file');
echo $jnlp;
Вам нужно только получить файл jnlp, поместить в свой PDF-документ и отправить jnlp в браузер.Программа JAVA, которая запускает печать, будет загружена непосредственно из веб-службы.Вы также можете задать некоторые параметры печати в виде копий, сторон и так далее