私は同じことをしなければならず、Chrome と Firefox の両方で機能する別のアプローチを使用しました。
私のソリューションには、PDFファイルのURLをGETタイプのパラメーターとして受け取り、iframe内にpdfをロードするprint.htmlヘルパーファイルが含まれていました。次に、pdfが完全にロードされたかどうかを確認し続け(チェックをonload
イベントにバインドしても機能しませんでした)、完了するとprintメソッドがトリガーされました。
ここ:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">
<title>Print Page</title>
<meta name="title" content="Print" />
<script>
(function (window, document, undefined) {
var printy = {
urlGET: function (param) {
var params = document.URL.split('?');
if(params.length > 1) {
params = params[1].split('&');
for (var i = 0, len = params.length; i < len; i++) {
if (params[i].split('=')[0] === param) {
return params[i].split('=')[1];
}
}
}
return null;
},
init: function () {
var self = this;
window.onload = function () {
var src = self.urlGET('path');
//creating an iframe element
var ifr = document.createElement('iframe');
document.body.appendChild(ifr);
// making the iframe fill the viewport
ifr.width = '100%';
ifr.height = window.innerHeight;
// continuously checking to see if the pdf file has been loaded
self.interval = setInterval(function () {
if (ifr.contentDocument.readyState === 'complete') {
clearInterval(self.interval);
// doing the actual printing
ifr.contentWindow.print();
}
}, 100);
ifr.src = src;
}
}
}
printy.init();
})(window, document, undefined);
</script>
</head>
<body>
</body>
</html>
ただし、このソリューションは IE ではテストされていません。仕事でMacを使用しているため、それはオプションではありませんでした.
印刷を行うために、次のような URL を呼び出して使用します。http://example.com/print.html?path=docs/myfile.pdf