如何使用JavaScript将pdf文件直接发送到打印机?

时间:2011-08-16 05:49:02

标签: javascript html pdf printing

如何使用JavaScript将PDF文件直接发送到打印机?

我在论坛中找到了两个答案:

<embed src="vehinvc.pdf" id = "Pdf1" name="Pdf1" hidden>
<a onClick="document.getElementById('Pdf1').printWithDialog()" style="cursor:hand;">Print file</a>

<OBJECT id = "Pdf2" name="Pdf2" CLASSID="clsid:CA8A9780-280D-11CF-A24D-444553540000" WIDTH="364" HEIGHT="290">
     <PARAM NAME='SRC' VALUE="file.pdf">
</OBJECT>
<a onClick="document.Pdf2.printWithDialog()">Print file</a> 

但我的问题是它只适用于IE,并且在Firefox或Chrome中无效。

有没有解决方案?

6 个答案:

答案 0 :(得分:11)

我认为这个JavaScript库可能会帮助您:

它名为 Print.js

首先包括

<script src="print.js"></script>
<link rel="stylesheet" type="text/css" href="print.css">

它的基本用法是调用printJS()并传入PDF文档网址:printJS('docs/PrintJS.pdf')

我做的是这样的,这也将显示&#34;正在加载......&#34;如果PDF文件太大。

<button type="button" onclick="printJS({printable:'docs/xx_large_printjs.pdf', type:'pdf', showModal:true})">
    Print PDF with Message
</button>

但请记住:

  

Firefox目前不允许使用iframe打印PDF文档。 Mozilla的网站上有一个关于此的公开bug。使用Firefox时,Print.js会将PDF文件打开到新选项卡中。

答案 1 :(得分:8)

您需要采取两个步骤。

首先,您需要将PDF放在iframe中。

  <iframe id="pdf" name="pdf" src="document.pdf"></iframe>

要打印iframe,您可以在此处查看答案:

Javascript Print iframe contents only

如果要在加载PDF后自动打印iframe,可以向<iframe>添加一个onload处理程序:

  <iframe onload="isLoaded()" id="pdf" name="pdf" src="document.pdf"></iframe>

加载程序可能如下所示:

function isLoaded()
{
  var pdfFrame = window.frames["pdf"];
  pdfFrame.focus();
  pdfFrame.print();
}

这将显示浏览器的打印对话框,然后仅打印PDF文档本身。 (我个人使用onload处理程序启用“打印”按钮,以便用户可以决定是否打印文档。)

我在Safari和Chrome中几乎逐字使用此代码,但尚未在IE或Firefox上试用。

答案 2 :(得分:5)

试试这个:有一个按钮/链接打开一个网页(在新窗口中),其中只嵌入了pdf文件,然后打印网页。

在主页的头部:

<script type="text/javascript">
function printpdf() 
{
myWindow=window.open("pdfwebpage.html");
myWindow.close;  //optional, to close the new window as soon as it opens
//this ensures user doesn't have to close the pop-up manually
}
</script>

在主页的正文中:

<a href="printpdf()">Click to Print the PDF</a>

内幕pdfwebpage.html:

<html>
<head>    
</head>

<body onload="window.print()">
<embed src="pdfhere.pdf"/>

</body>
</html>

答案 3 :(得分:3)

实际上,使用dataURI会容易得多,因为您可以在返回的窗口对象上调用print。

// file is a File object, this will also take a blob
const dataUrl = window.URL.createObjectURL(file);

// Open the window
const pdfWindow = window.open(dataUrl);

// Call print on it
pdfWindow.print();

这将在新选项卡中打开pdf,然后弹出打印对话框。

答案 4 :(得分:0)

一个容纳打印触发器的功能......

function printTrigger(elementId) {
    var getMyFrame = document.getElementById(elementId);
    getMyFrame.focus();
    getMyFrame.contentWindow.print();
}

一个给用户提供访问权限的按钮......

(an onClick on an a or button or input or whatever you wish)

<input type="button" value="Print" onclick="printTrigger('iFramePdf');" />
an iframe pointing to your PDF...

<iframe id="iFramePdf" src="myPdfUrl.pdf" style="dispaly:none;"></iframe>

更多:http://www.fpdf.org/en/script/script36.php

答案 5 :(得分:-1)

<?php

$browser_ver = get_browser(null,true);
//echo $browser_ver['browser'];

if($browser_ver['browser'] == 'IE') {
?>

<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pdf print test</title>
<style>
    html { height:100%; }
</style>
<script>
    function printIt(id) {
        var pdf = document.getElementById("samplePDF");
        pdf.click();
        pdf.setActive();
        pdf.focus();
        pdf.print();
    }
</script>
</head>

<body style="margin:0; height:100%;">

<embed id="samplePDF" type="application/pdf" src="/pdfs/2010/dash_fdm350.pdf" width="100%" height="100%" />
<button onClick="printIt('samplePDF')">Print</button>


</body>
</html>

<?php
} else {
?>
<HTML>
<script Language="javascript">

function printfile(id) { 
    window.frames[id].focus();
    window.frames[id].print();
} 

</script>
<BODY marginheight="0" marginwidth="0">

<iframe src="/pdfs/2010/dash_fdm350.pdf" id="objAdobePrint" name="objAdobePrint" height="95%" width="100%" frameborder=0></iframe><br>

<input type="button" value="Print" onclick="javascript:printfile('objAdobePrint');">

</BODY>
</HTML>
<?php
}
?>