JavaScript 打印 PDF Blob 流 - 解决方案和优化
<p>"printPDFs(pdfBlobs) {\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n document.body.appendChild(iframe);\n\n const printWindow = iframe.contentWindow || iframe.contentDocument;\n const printDocument = printWindow.document;\n // 创建一个打印容器\n const printContainer = document.createElement('div');\n printContainer.style.display = 'none';\n printDocument.body.appendChild(printContainer);\n\n // 遍历所有的PDF Blob流\n for (let i = 0; i < pdfBlobs.length; i++) {\n const pdfBlob = pdfBlobs[i];\n\n // 创建一个新的<embed>元素用于加载PDF\n const embed = document.createElement('embed');\n embed.src = URL.createObjectURL(pdfBlob);\n embed.type = 'application/pdf';\n embed.setAttribute('class', 'pdf-page');\n embed.style.width = '100%';\n embed.style.height = '100%';\n printContainer.appendChild(embed);\n }\n\n // 等待所有PDF加载完成后打印\n setTimeout(() => {\n printWindow.print();\n\n // 清除打印容器\n printDocument.body.removeChild(printContainer);\n document.body.removeChild(iframe);\n }, 1000); // 延迟1秒钟以确保PDF加载完成\n },\n"该方法打印出来是空白的内容:这段代码是用于打印PDF的方法。它首先创建一个隐藏的iframe,并将其添加到文档的body中。然后,它在iframe中创建一个打印容器,并将所有的PDF Blob流加载到该容器中。\n\n接下来,它使用setTimeout函数设置一个延迟1秒的定时器,在定时器触发后执行打印操作。打印操作通过调用iframe的contentWindow对象或contentDocument对象的print方法来实现。\n\n最后,打印完成后,它从文档中移除打印容器和iframe。\n\n如果这段代码打印出来是空白的,可能有以下几个原因:\n1. PDF Blob流加载失败:请确保pdfBlobs数组中的每个元素都是有效的PDF Blob流。\n2. PDF Blob流加载时间过长:可能需要更长的时间来加载PDF Blob流。您可以尝试增加延迟的时间,例如将setTimeout函数的延迟时间增加到更长的值,看是否能解决问题。\n3. 打印容器显示问题:请确保打印容器的display属性设置为'none',以确保它在打印时不会显示在页面上。\n\n如果上述方法都没有解决问题,可能还需要检查其他与打印相关的代码或浏览器设置。</p>
原文地址: https://www.cveoy.top/t/topic/p91M 著作权归作者所有。请勿转载和采集!