0

我有一个打印报告和证书的 grails 应用程序,我正在尝试使用 jQuery printElement 打印一部分 html。我的 Html 包含水印徽标以及一些不属于应用程序但存储在服务器文件系统中的图像。虽然我能够在 Firefox 中正确打印(pdf 以及使用打印机),但在 Google Chrome 中打印时出现问题。我的图像和徽标不是应用程序的一部分,而是图像存储在文件系统中,并使用 Java outputStreams 传输到浏览器。所有图像都在 chrome 中正确显示,但是当我尝试使用 jQuery printElement 打印到文件或使用打印机时,它无法打印 html 页面中显示的图像,而是在没有图像的情况下打印。

我正在使用 html img 标签进行打印,当我尝试使用以下代码打印存储在服务器上下文中的本地图像时,它在 chrome 中打印效果很好

<img src="${resource(dir:'images',file:'exclamation.png')}" alt="" />

但是当我尝试使用以下代码片段访问文件系统图像时,尽管它显示在 html 页面中,但它无法打印图像。

<img src="${createLink(action:'getImage', controller:'image')}?image=${logoPath}"/>

在 html 中呈现为

<img src="/myApp/image/getImage?image=/home/dave/pictures/logo.png" >

其中 logoPath 是存储在服务器文件系统中的图像的绝对路径。我也尝试过使用绝对属性,<img>但它没有帮助。

我可以在 Firefox 中打印它,但不能在 chrome 中打印。出于这个原因,我将应用程序限制为仅适用于 Firefox,如果我能让它也可以与 google chrome 一起使用,那将有很大的帮助。

使用

apache tomcat 6、JAVA 1.6、grails 1.3.7、jquery.printElement.min.js、Google Chrome 23(Linux 和 Windows 7)、Firefox 16、17

4

1 回答 1

0

回答我自己的问题。我在 chrome 中找到了适合我的解决方案。我从 jquery.printElement.min.js 切换到 jquery.printElement.js 并按照作者的建议。

https://github.com/erikzaadi/jQuery.printElement/issues/2

在 jquery.printElement.js

代替:

documentToWriteTo.open();
documentToWriteTo.write(html);
documentToWriteTo.close();
_callPrint(popupOrIframe);

和:

documentToWriteTo.onload = _callPrint(popupOrIframe);
documentToWriteTo.open();
documentToWriteTo.write(html);
documentToWriteTo.close();

我尝试了上述建议,但仍然无法打印图像。所以我在js的_callPrint(element)函数中更改了超时,并将超时设置为75而不是50,它正在打印所有图像。

于 2013-10-01T13:33:52.677 回答