复制
收藏
提问
简洁
downloadOneReimbursement(ids).then(res=>{ const styleSheet = `<style> body{margin: 0 0} .content {width: 522px;height: 384.2px;background-color:#e2f4d2;page-break-after:always} .prinRight {width: 519.7px;height: 384.2px;display: flex;justify-content: space-between;align-items: center;position: relative;font-family: STFangsong;} .rightNumLeft {width: 53%;height: 100%;margin-left:12.5px;display: flex;flex-direction: column;justify-content: center;} .photoDiv {width: 71px;height: 99px;text-align: center;margin-left:96px;margin-bottom: 12.5px;} .photo {width: 100%;height: 100%} .rightTitle {margin: 14.5px 0;width: 100%;text-align: left;font-size: 15px;font-family: STFangsong;} .rightTitles {margin: 0 0;width: 100%;text-align: left;font-size: 15px;font-family: STFangsong;} .rightTabRight {width: 47%;height:100%;display: flex;align-items: center;} th,td {margin: 0;padding: 0;} table {*border-style: solid;*border-color: #333;*border-width: 1px 0 0 1px;font-size: 13px;border-collapse: collapse;} table td,table th {font-family: STFangsong;border-width: 1px;*border-width: 0 1px 1px 0;border-style: solid;border-color: #333;box-sizing: border-box;text-justify: inter-ideograph;} table th {text-align: center;} table td {color: #000;font-weight: bold;font-size: 17px;} .border0 {padding: 0;*border-width: 0;} .border0 table {margin-left: -1px;border-style: hidden;*border-style: solid;border-width: 0;}</style>` // ids.forEach((attachment) => { // }); let url=process.env.VUE_APP_BASE_API+'/'+res.data.url console.log('打印地址',process.env.VUE_APP_BASE_API+'/'+res.data.url) const pdfWindow = window.open(url); pdfWindow.document.head.innerHTML = styleSheet //给打印的内容加上样式 pdfWindow.focus(); pdfWindow.print(); pdfWindow.close(); }) 为什么无法打印
1个月前
全网
文档
学术
百科
知识库
回答简洁模式
深入研究一些
这段代码看起来是用于生成并打印PDF文件的JavaScript代码。从代码中可以看出,你正在尝试通过调用window.open
来打开一个新的窗口,并设置其document.head.innerHTML
为一个样式字符串,然后调用print()
方法来打印这个窗口的内容。如果打印没有成功,可能的原因有:
-
样式未正确应用:确保样式字符串
styleSheet
是正确的,并且没有语法错误。 -
PDF内容未加载:
window.open(url)
可能没有足够的时间来加载PDF内容。在打印之前,你可能需要等待PDF内容完全加载。 -
浏览器安全限制:某些浏览器可能会阻止跨域打印,或者在打开的窗口中执行打印操作。
-
打印功能被禁用:用户的浏览器可能禁用了打印功能,或者打印设置不正确。
-
process.env.VUE_APP_BASE_API
未正确设置:确保环境变量VUE_APP_BASE_API
已经正确设置,并且拼接后的URL指向的是正确的PDF文件。 -
PDF文件格式问题:确保PDF文件是有效的,并且浏览器支持打印该格式的文件。
-
异步操作问题:
downloadOneReimbursement(ids)
是一个异步操作,如果.then
中的代码执行太快,可能在PDF内容加载完成之前就尝试打印。 -
缺少文档内容:在设置样式之后,你需要确保将PDF内容添加到新窗口的
body
中,而不仅仅是head
。
为了解决这个问题,你可以尝试以下步骤:
- 确保PDF文件可以通过浏览器直接访问并打印。
- 在
pdfWindow.document.head.innerHTML = styleSheet
之后,添加PDF内容到pdfWindow.document.body
。 - 使用
pdfWindow.onload
事件来确保在PDF内容加载完成后再调用print()
方法。 - 检查浏览器的控制台是否有任何错误信息,并根据错误信息进行调试。
例如,你可以添加一个检查PDF加载的事件监听器:
pdfWindow.onload = function() {
pdfWindow.document.body.innerHTML = '这里是PDF内容'; // 这里应该是实际的PDF内容
pdfWindow.print();
};
请注意,直接修改pdfWindow.document.body.innerHTML
可能不会有效,因为PDF通常是以二进制格式加载的。你可能需要使用其他方法来将PDF内容嵌入到新窗口中,例如使用<iframe>
或<object>
标签。
你觉得结果怎么样?