Как распечатать PDF-файл из браузера

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
27
0
90 204
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

Документы Google делают это путем встраивания в PDF-файл JavaScript, который сообщает Acrobat Reader или любому другому совместимому читателю о необходимости его распечатки.

Чтобы сделать это со случайным PDF-файлом, вам понадобится инструментарий PDF.

Вам не понадобится инструментарий PDF, если вы можете использовать iTextSharp. Вот ссылка на страницу, где рассказывается, как добавить javascript в PDF-файл с помощью iTextSharp, который распечатает PDF-файл. itextsharp.sourceforge.net/tutorial/ch11.html

Dave 03.12.2009 22:21

iTextSharp - это набор инструментов для работы с PDF.

Lou Franco 04.12.2009 22:03

оформить заказ FPDF для PHP и этот аддон для FPDF: fpdf.de/downloads/addons/36

Brenden 21.01.2012 04:26

При использовании TCPDF при добавлении $pdf->IncludeJS('print(true);'); в код открывается диалоговое окно печати (проверено в Chrome и FF), см. Пример 53 TCPDF.

qwertz 14.04.2017 21:06

Вы имеете в виду, что хотите принудительно отправить файл на принтер? Вы думаете о Законе непредвиденных последствий - устройство пользователя не подключено к принтеру? Может быть BlackBerry, может быть ноутбук с wi-fi. Что, если пользователь не хочет, чтобы он переходил на принтер по умолчанию?

У меня дома единственный принтер - PDFCreator.

Kibbee 13.12.2008 00:31

Пятно на. Всякий раз, когда я задаю такой вопрос, а затем воплощаю его в жизнь, оказывается, что мне действительно стоило пожелать, чтобы кто-то указал на то, на что указал DOK.

Mihai Limbășan 13.12.2008 00:52

Да, но тогда ваш босс, который знает, что только десять сотрудников в его офисе когда-либо будут использовать эту веб-страницу, и знает, что у них есть принтеры, будет сбит с толку тем фактом, что вы можете заставить компьютер делать почти все, но вы не можете этого сделать. открыть диалоговое окно печати.

PeterAllenWebb 04.02.2010 00:02

вы можете установить заголовок 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). Где вы взяли его работать?

Paŭlo Ebermann 03.02.2012 23:50

Пауло, exPDF - это идентификатор элемента, который вы распечатываете в PDF.

Jared 17.05.2013 16:49

-1; в (моей установке) Chrome элемент <object> не имеет метода .print(), поэтому это не удается. Может быть, есть (или была) какая-то платформа, для которой это работает, но для меня это бесполезно без какого-либо намёка на то, что это за платформа.

Mark Amery 26.04.2017 13:27

Это решение только для IE.

CDT 22.02.2019 05:50

аналогично предложению Тэёна вы можете использовать iframe для рендеринга pdf, а затем использовать contentWindow.print ();

Как и решение taeyoung, это не работает в Firefox 9 с плагином Adobe Reader (в Ubuntu). (exPDF.print is not a function). Где вы взяли его работать?

Paŭlo Ebermann 03.02.2012 23:55

Я думаю, это работает только с webkit. Другие браузеры просто загрузят его.

Aaron Renoir 04.02.2012 00:59

Фактически, Firefox показывает PDF-файл в iframe и игнорирует вызов метода (сообщение об ошибке отображается на консоли JS в Firebug).

Paŭlo Ebermann 04.02.2012 02:52

похоже, это работает в ff9 на os x, $ ('# exPDF') [0] .focus (); $ ('# exPDF') [0] .contentWindow.print ();

Aaron Renoir 04.02.2012 03:03

Вы не можете распечатать 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». ржу не могу

ryanrain 05.07.2018 20:19

Другие вопросы по теме