Berdasarkan komentar di bawah, ini tidak lagi berfungsi di browser modern.
Pertanyaan ini menunjukkan pendekatan yang mungkin berguna bagi Anda: Cetak diam-diam PDF yang disematkan
Ini menggunakan <embed>
tag untuk menyematkan PDF di dokumen:
<embed
type="application/pdf"
src="path_to_pdf_document.pdf"
id="pdfDocument"
width="100%"
height="100%" />
Kemudian Anda memanggil .print()
metode pada elemen di Javascript saat PDF dimuat:
function printDocument(documentId) {
var doc = document.getElementById(documentId);
if (typeof doc.print === 'undefined') {
setTimeout(function(){printDocument(documentId);}, 1000);
} else {
doc.print();
}
}
Anda dapat menempatkan sematan di iframe tersembunyi dan mencetaknya dari sana, memberi Anda pengalaman yang mulus.
Berikut adalah fungsi untuk mencetak PDF dari iframe.
Anda hanya perlu meneruskan URL PDF ke fungsi tersebut. Ini akan membuat iframe dan memicu pencetakan setelah PDF dimuat.
Perhatikan bahwa fungsi tersebut tidak merusak iframe. Sebaliknya, ia menggunakannya kembali setiap kali fungsinya dipanggil. Sulit untuk menghancurkan iframe karena diperlukan hingga pencetakan selesai, dan metode cetak tidak memiliki dukungan panggilan balik (sejauh yang saya tahu).
printPdf = function (url) { var iframe = this._printIframe; if (!this._printIframe) { iframe = this._printIframe = document.createElement('iframe'); document.body.appendChild(iframe); iframe.style.display = 'none'; iframe.onload = function() { setTimeout(function() { iframe.focus(); iframe.contentWindow.print(); }, 1); }; } iframe.src = url; }
sumber
setTimeout
, fungsi cetak terkadang akan gagal. Tidak tahu mengapa dan berharap seseorang akan menemukannya.onafterprint
. Saya sedikit khawatir bahwa menggunakan kembali iframe dapat menyebabkan kondisi balapan di mana seseorang mengklik dua tombol dengan cepat dan akhirnya mencetak PDF kedua dua kali karena URL iframe telah ditukar sebelum dialog cetak pertama muncul.Unduh Print.js dari http://printjs.crabbly.com/
$http({ url: "", method: "GET", headers: { "Content-type": "application/pdf" }, responseType: "arraybuffer" }).success(function (data, status, headers, config) { var pdfFile = new Blob([data], { type: "application/pdf" }); var pdfUrl = URL.createObjectURL(pdfFile); //window.open(pdfUrl); printJS(pdfUrl); //var printwWindow = $window.open(pdfUrl); //printwWindow.print(); }).error(function (data, status, headers, config) { alert("Sorry, something went wrong") });
sumber
https://github.com/mozilla/pdf.js/
untuk demo langsung http://mozilla.github.io/pdf.js/
mungkin itu yang Anda inginkan, tetapi saya tidak mengerti maksudnya karena browser modern menyertakan fungsionalitas seperti itu, juga akan berjalan sangat lambat pada perangkat berdaya rendah seperti perangkat seluler yang, omong-omong, memiliki plugin dan aplikasi yang dioptimalkan sendiri .
sumber
Saya menggunakan fungsi ini untuk mengunduh aliran pdf dari server.
function printPdf(url) { var iframe = document.createElement('iframe'); // iframe.id = 'pdfIframe' iframe.className='pdfIframe' document.body.appendChild(iframe); iframe.style.display = 'none'; iframe.onload = function () { setTimeout(function () { iframe.focus(); iframe.contentWindow.print(); URL.revokeObjectURL(url) // document.body.removeChild(iframe) }, 1); }; iframe.src = url; // URL.revokeObjectURL(url) }
sumber
Solusi lintas browser untuk mencetak pdf dari string base64:
.
const blobPdfFromBase64String = base64String => { const byteArray = Uint8Array.from( atob(base64String) .split('') .map(char => char.charCodeAt(0)) ); return new Blob([byteArray], { type: 'application/pdf' }); }; const isIE11 = !!(window.navigator && window.navigator.msSaveOrOpenBlob); // or however you want to check it const printPDF = blob => { try { isIE11 ? window.navigator.msSaveOrOpenBlob(blob, 'documents.pdf') : printJS(URL.createObjectURL(blob)); // http://printjs.crabbly.com/ } catch (e) { throw PDFError; } }; printPDF(blobPdfFromBase64String(base64String))
BONUS - Membuka file blob di tab baru untuk IE11
Jika Anda dapat melakukan beberapa pemrosesan awal dari string base64 di server, Anda dapat mengeksposnya di bawah beberapa url dan menggunakan tautan di
printJS
:)sumber