Можно ли в веб-приложении принудительно распечатать файл PDF на клиенте? Если браузер настроен на открытие PDF-файла внутри окна, я предполагаю, что вызов window.print () будет работать, но некоторые браузеры (например, мой) настроены на открытие PDF-файла извне.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Документы Google делают это путем встраивания в PDF-файл JavaScript, который сообщает Acrobat Reader или любому другому совместимому читателю о необходимости его распечатки.
Чтобы сделать это со случайным PDF-файлом, вам понадобится инструментарий PDF.
iTextSharp - это набор инструментов для работы с PDF.
оформить заказ FPDF для PHP и этот аддон для FPDF: fpdf.de/downloads/addons/36
При использовании TCPDF при добавлении $pdf->IncludeJS('print(true);'); в код открывается диалоговое окно печати (проверено в Chrome и FF), см. Пример 53 TCPDF.
Вы имеете в виду, что хотите принудительно отправить файл на принтер? Вы думаете о Законе непредвиденных последствий - устройство пользователя не подключено к принтеру? Может быть BlackBerry, может быть ноутбук с wi-fi. Что, если пользователь не хочет, чтобы он переходил на принтер по умолчанию?
У меня дома единственный принтер - PDFCreator.
Пятно на. Всякий раз, когда я задаю такой вопрос, а затем воплощаю его в жизнь, оказывается, что мне действительно стоило пожелать, чтобы кто-то указал на то, на что указал DOK.
Да, но тогда ваш босс, который знает, что только десять сотрудников в его офисе когда-либо будут использовать эту веб-страницу, и знает, что у них есть принтеры, будет сбит с толку тем фактом, что вы можете заставить компьютер делать почти все, но вы не можете этого сделать. открыть диалоговое окно печати.
вы можете установить заголовок http в application / pdf, а затем принудительно открыть новое окно с помощью javascript и распечатать таким образом. но кто на самом деле будет это делать? я имею в виду давай сейчас.
<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>
Это не работает в Firefox 9 с плагином Adobe Reader (в Ubuntu). (exPDF.print is not a function). Где вы взяли его работать?
Пауло, exPDF - это идентификатор элемента, который вы распечатываете в PDF.
-1; в (моей установке) Chrome элемент <object> не имеет метода .print(), поэтому это не удается. Может быть, есть (или была) какая-то платформа, для которой это работает, но для меня это бесполезно без какого-либо намёка на то, что это за платформа.
Это решение только для IE.
аналогично предложению Тэёна вы можете использовать iframe для рендеринга pdf, а затем использовать contentWindow.print ();
Как и решение taeyoung, это не работает в Firefox 9 с плагином Adobe Reader (в Ubuntu). (exPDF.print is not a function). Где вы взяли его работать?
Я думаю, это работает только с webkit. Другие браузеры просто загрузят его.
Фактически, Firefox показывает PDF-файл в iframe и игнорирует вызов метода (сообщение об ошибке отображается на консоли JS в Firebug).
похоже, это работает в ff9 на os x, $ ('# exPDF') [0] .focus (); $ ('# exPDF') [0] .contentWindow.print ();
Вы не можете распечатать PDF-документ прямо из браузера с помощью Javascript. Функция Javascript window.print () использует функцию печати браузера, и это не то, что вам нужно. Вы можете достичь своей цели, запустив печать через Java Web Start. Поместите свой PDF-документ прямо в jnlp, чтобы вы могли запустить программу Java, которая принимает необработанный PDF-документ в качестве аргумента. Теперь вы работаете в системе, а не в браузере, поэтому вы можете напрямую взаимодействовать с драйвером печати через JAVA API. Это кажется довольно простым, но на самом деле это не потому, что API печати JAVA не принимает файл в качестве входных данных, а конкретную структуру данных, которая реализует интерфейс ava.awt.print.Pageable.
В 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, запускающая печать, будет загружена непосредственно из веб-службы. Вы также можете установить некоторые параметры печати, такие как копии, стороны и т. д.
вы можете использовать простую удивительную библиотеку printjs "http://printjs.crabbly.com" он берет файл PDF и распечатывает его без отображения диалогового окна печати, если вам нужно, простой способ сделать это ниже:
<button type = "button" onclick = "printJS('docs/printjs.pdf')">
Print PDF
</button>я был в восторге от этого, пока не получил приятный сюрприз в консоли во время тестирования постановки: «PrintJS в настоящее время не поддерживает печать PDF в Firefox, Internet Explorer и Edge». ржу не могу
Вам не понадобится инструментарий PDF, если вы можете использовать iTextSharp. Вот ссылка на страницу, где рассказывается, как добавить javascript в PDF-файл с помощью iTextSharp, который распечатает PDF-файл. itextsharp.sourceforge.net/tutorial/ch11.html