是否可以只打印画布元素?

Is it possible to print just the canvas element?

提问人:bruceatk 提问时间:10/6/2008 最后编辑:bruceatk 更新时间:3/19/2013 访问量:5412

问:

我创建了一个网页,可让您输入一些信息,然后根据该信息在画布元素中绘制图像。除了打印之外,我几乎按照我想要的方式工作。

有没有办法打印出画布元素,或者创建一个新窗口来绘制,这是唯一的方法?

更新:

答案很简单。我正在考虑更复杂的解决方案。

我希望我能选择不止一个答案。当我使用 * 禁用显示时,我无法打印画布。最简单的解决方案是关闭我用于输入的表单,在 @media print{} 内的 CSS 中使用表单 {display:none;}。感谢您的快速回复。



    @media print {
           form {
         display:none;
       }
    }

JavaScript 打印 画布

评论


答:

1赞 Darryl Hein 10/6/2008 #1

我不是 100% 确定支持,但您可以使用 CSS 并在标签中放置一个属性。在这个CSS文件中,只需隐藏打印时不想显示的元素:<link>media="print"display:none;

5赞 Zack The Human 10/6/2008 #2

你可以尝试这样的东西:

@media print {
  * {
    display:none;
  }

  #SOME-CANVAS-ID {
    display:block;
  }
}

我不确定画布是否默认是块的,但您可以尝试类似的东西,看看它是否有效。这个想法是,只要规则的优先级更高,它就会隐藏打印媒体的所有内容 (*),除了其他一些任意元素(这就是我使用 ID 选择器的原因)。

编辑:如果CSS3(特别是否定伪类)得到更多支持,您的规则可以像这样简单:

*:not(canvas) {
  display:none;
}

但是,这可能会导致隐藏 <html> 和 <body> 标签,从而有效地隐藏您的画布......

评论

0赞 olliej 10/6/2008
我知道 Safari 支持 :not(),如果 Opera 不支持,我会感到震惊,我相信 firefox trunk 支持它(我不知道 Firefox 3.0)——鉴于它们是真正支持 Canvas 元素的浏览器,这应该足够:D
0赞 olliej 10/6/2008
css3.info/selectors-test/test.html 声称所有 3 个都支持 not -- 所以如果你使用的是 canvas,:not() 就可以了。
0赞 Dedan 11/23/2012 #3

您可以尝试创建仅用于打印的画布:

this.Print = function () {
    var printCanvas = $('#printCanvas');
    printCanvas.attr("width", mainCanvas.width);
    printCanvas.attr("height", mainCanvas.height);
    var printCanvasContext = printCanvas.get(0).getContext('2d');
    window.print();
}