2009-10-19 67 views
3

这些浏览器(Windows版本)正确打印网页其中有超过img标签图像的帆布覆盖:问题打印内容器(Chrome,Opera)的

IE6,IE7,IE8,火狐,Safari

(最多最新正如我在版本3.0.195.27键入此)和歌剧(最多最新的I型这个版本10.0生成1750)没有。 Chrome会完全忽略画布渲染。 Opera将整个画布呈现为一个白色的矩形,遮蔽了它后面的图像。

我知道画布标签相当新颖,打印网页总是很冒险。我该如何处理?有什么设置我错过了使这项工作?是否有一个我可以从JavaScript中捕获的“即将打印”事件,至少会警告用户?


更新:它甚至比看起来更奇怪。组合图像(画布覆盖img)可以在我的Brother激光打印机上正确打印,但不能在我的惠普喷墨打印机上打印)。

所以目前情况是大多数浏览器都能正确打印到我的喷墨打印机,但Chrome浏览器不支持。 Opera在两台打印机上都拧紧了。

这是所有打印机驱动程序以及各种浏览器如何与他们沟通?


更新:我注意到Google Docs构建了一个用于打印的PDF。

+1

http://www.twiddla.com/test/ChromeCanvas.html测试页面,可能有助于找出问题!? – powtac 2009-10-19 16:59:13

+0

@powtac ...你让问题变得更有趣。在Chrome浏览器中,您链接的那个页面可以在我的黑白激光打印机上正确打印,但左侧的红色框不会打印在我的彩色喷墨打印机上(但是右侧的两个红色数字 - 这是位图)。 – Nosredna 2009-10-19 17:04:16

+0

请参阅上面的“更新”。 – Nosredna 2009-10-19 17:08:49

回答

0

我建议将页面保存为PDF并尝试打印。要打印的PDF文档应该是所见即所得。如果PDF呈现正确,任何打印机都应该打印正确。

+0

那么如何将页面保存为PDF?我可以通过编程来做到吗? – Nosredna 2009-11-16 18:21:31

+0

对不起,如果我认为你有一个mac。无论何时您尝试从Mac中的浏览器进行打印,您都会在左下角看到一个PDF菜单。您可以使用其中一个选项将其另存为PDF。 – 2009-11-16 21:10:45

+0

在Ubuntu等大多数Linux发行版上,您也可以打印到PDF。我认为Windows上的Adobe Acrobat Reader也带有这个选项,但我不确定。 – richard 2009-11-17 14:21:43

1

我不知道,如果不是渲染到<canvas>元素:如果你要渲染到非文档画布上的对象,并设置一个CSS样式上<div>background-image设置为"url("+myCanvasObject.toDataUrl()+")"它可能正确打印。

另外,您可以将一个新的<img />元素的src属性设置为相同的myCanvasObject.toDataUrl()。这应该比我上面提到的方法更好地处理..

+0

一个有趣的想法。 :-)我打赌IE,至少,不会那样吃,但。也许Chrome和Opera会。 – Nosredna 2009-11-16 20:38:09

+0

你可能是对的IE浏览器,虽然值得一试! – JasonWyatt 2009-11-16 21:57:41

+0

我添加了另一种可能的解决方案,这可能更准确/有用。 – JasonWyatt 2009-11-17 14:15:52

2

您可以使用PHP's PDF functions以编程方式创建PDF。这很简单!

要创建一个新的PDF:

$pdf = pdf_new(); 

打开文件:

pdf_open_file($pdf, "pdfName.pdf"); 

您可以设置一些变量,如作者:

pdf_set_info($pdf, "Title", "pdf Title here"); 

现在,您需要使用pdf_begin_page()功能:

pdf_begin_page($pdf, 595, 842); 

这些是A4的尺寸。

内容

并关闭所有与文件:

pdf_end_page($pdf); 
pdf_close($pdf); 

对于一个完整的参考,看看PHP's PDF manual

+2

很酷。假设我获得了所有信息到服务器,当然,包括所有画布操作的历史记录(我必须以某种方式模仿服务器)。 – Nosredna 2009-11-17 14:42:15