簡體   English   中英

如何從瀏覽器打印 PDF

[英]How to print a PDF from the browser

在 Web 應用程序中,是否可以強制在客戶端打印 PDF 文件? 如果瀏覽器配置為在窗口內打開 PDF,我猜調用 window.print() 會起作用,但某些瀏覽器(如我的)配置為從外部打開 PDF。

google docs 的方法是將 JavaScript 嵌入到 PDF 中,告訴 Acrobat Reader 或任何其他兼容的閱讀器打印它。

您需要一個 PDF 工具包來使用隨機 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>

與 taeyoung 的建議類似,您可以使用 iframe 渲染 pdf,然后使用 contentWindow.print();

您可以將 http 標頭設置為 application/pdf,然后使用 javascript 強制打開一個新窗口並以這種方式打印。 但誰真的會那樣做呢? 我的意思是現在來吧。

您可以使用簡單的令人驚嘆的庫printjshttp://printjs.crabbly.com ”,它需要PDF文件並在不顯示打印對話框的情況下打印它,下面是一種簡單的方法:

 <button type="button" onclick="printJS('docs/printjs.pdf')"> Print PDF </button>

您的意思是要強制將文件發送到打印機嗎? 您是否在考慮意外后果定律——用戶的設備未連接到打印機? 可能是黑莓,也可能是有 Wi-Fi 的筆記本電腦。 如果用戶不希望它轉到默認打印機怎么辦?

您無法使用 Javascript 直接從瀏覽器打印 PDF 文檔。 Javascript 函數 window.print() 使用瀏覽器打印功能,這不是您需要的。 您可以通過 Java Web Start 開始打印來實現您的目標。 將您的 PDF 文檔直接放入 jnlp,這樣您就可以運行接收原始 PDF 文檔作為參數的 Java 程序。 現在你是在系統中運行,不再在瀏覽器中運行,所以你可以通過JAVA API直接與打印驅動程序交互。 這看起來很簡單,但實際上並不是因為 JAVA 打印 API 不接受文件作為輸入,而是因為實現了 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 程序將直接從 Web 服務下載。 您還可以將一些打印選項設置為份數、面數等

如果要通過瀏覽器的打印對話框打印 PDF,可以在調用print()方法的 iframe 內呈現 PDF。

// create iframe element
const iframe = document.createElement('iframe');

// create object URL for your blob or file and set it as the iframe's src
iframe.src = window.URL.createObjectURL(fileOrBlob);
iframe.name = 'pdf';

// call the print method in the iframe onload handler
iframe.onload = () => {
    const pdfFrame = window.frames["pdf"];
    pdfFrame.focus();
    pdfFrame.print();
}
document.body.appendChild(iframe);

你也可以設置iframe.hidden = true; 在隱藏的 iframe 中完成所有這些操作,用戶不會注意到。

此解決方案應適用於除舊版 Microsoft Edge 之外的所有主要瀏覽器。 如果您需要與舊版 Microsoft Edge 兼容,您可以使用 npm 包 print-js: https : //www.npmjs.com/package/print-js

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM