gpt4 book ai didi

html - 在页面上仅打印 Canvas 元素

转载 作者:太空宇宙 更新时间:2023-11-04 15:39:40 25 4
gpt4 key购买 nike

我在使用 html5 中的 canvas 元素时有点卡住了,已经在网上搜索了一个可行的解决方案,但无济于事!

主要问题是我想单击一个按钮并将页面上的 Canvas 元素发送到打印机。

我尝试过使用 toDataUrl() - 但这似乎只会导致一个空白的白色图像,其中没有任何 Canvas 内容!

我遇到的另一个问题是,尝试使用附加到表单按钮的“onClick”来启动任何 javascript 函数似乎充其量是情绪化的!

这是我目前的尝试 - 这在某种意义上是有效的,它确实打开了一个新窗口并尝试将其发送到打印机并且它确实创建了一个 base64 字符串(使用倒数第二个文档上的“dataUrl”输出对此进行了测试。写行),但如前所述,图像似乎完全空白! ( Canvas 本身肯定是填满的,既有导入的图像也有一些文本)

function printCanv()  
{
var dataUrl = document.getElementById('copy').toDataURL(); //attempt to save base64 string to server using this var
document.getElementById('testBox').value = dataUrl; //load data into textarea
//attempt open window and add canvas etc
win = window.open();
self.focus();
win.document.open();
win.document.write('<'+'html'+'><'+'head'+'><'+'style'+'>');
win.document.write('body, td { font-family: Verdana; font-size: 10pt;}');
win.document.write('<'+'/'+'style'+'><'+'/'+'head'+'><'+'body'+'>');
((image code is here but site will not let me post it for some reason?))
win.document.write(dataUrl);
win.document.write('<'+'/'+'body'+'><'+'/'+'html'+'>');
win.document.close();
win.print();
win.close();
}

注意:从“win = window.open()”开始的代码目前是从教程中获取的,而不是我自己的作品!

目前正在使用 <body onload="printCanv";"> 调用它- 出于某种原因,我根本无法使用按钮使其正常工作(下面的一小段代码是我的尝试,但似乎失败了)

<input type="button" id="test" value="click me" onClick="printCanv();"> </input>  

抱歉,这个帮助请求到处都是!我以前没有发布到这样的网站,它不喜欢我发布一些 html/脚本!

在此先感谢您提供的任何帮助:)

编辑:绘制函数:

function copydraw() {  //function called "copydraw" (could be anything)
var testimage3 = document.getElementById('copy').getContext('2d'); //declare variable for canvas overall (inc paths)
var img3 = new Image(); //declare image variable called "img3"
var testVar = document.getElementById('userIn').value; //take value from userin box. only updating on browser refresh?
img3.onload = function(){ //when image has loaded (img.onload) run this function
testimage3.drawImage(img3,0,0); //draw "img" to testimage
testimage3.font = "30pt 'Arial'"; //font method varies font attrib (weight, size, face)
testimage3.fillStyle = "#000000"; //sets fill color
testimage3.fillText(testVar, 310, 360); //filltext method draws text (xup ydown)
}
img3.src = 'images/liecakeA4.jpg'; //source of image
}

这个函数工作得很好,它绘制对象并从变量中添加文本,但出于某种原因,它似乎阻止我将它作为图像输出。我真的很困惑!

最佳答案

我不确定您的代码到底出了什么问题,我怀疑在您当前的版本中,在 body load 事件中调用 printCanv 将意味着您正在尝试在绘制 Canvas 之前打印 Canvas 。从按钮上运行它应该会更好,我不确定为什么它对你不起作用,因为原则上没有理由为什么它不应该起作用。

为了得到一个工作版本,我稍微修改了你的代码:

function printCanvas(el) {  
var dataUrl = document.getElementById(el).toDataURL(); //attempt to save base64 string to server using this var
var windowContent = '<!DOCTYPE html>';
windowContent += '<html>'
windowContent += '<head><title>Print canvas</title></head>';
windowContent += '<body>'
windowContent += '<img src="' + dataUrl + '">';
windowContent += '</body>';
windowContent += '</html>';
var printWin = window.open('','','width=340,height=260');
printWin.document.open();
printWin.document.write(windowContent);
printWin.document.close();
printWin.focus();
printWin.print();
printWin.close();
}

works for me在 Firefox 4.0 nightly 中。

关于html - 在页面上仅打印 Canvas 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com