我成功地在HTML5画布上绘制,并将画布保存到服务器上的PNG文件中。然后我用iTextsharp将PNG打印成PDF。这一切都很好,但这是我的问题。
当我不想显示PNG时,我的代码将它显示到屏幕上。然后,我必须让用户按后退按钮来查看PDF列表。当这种情况发生时,一切都很好,但我不想要PNG。但是,如果我关闭PNG的内容类型代码,那么PNG就不会显示,那么PDF列表就不会被最后生成的PDF填充,并且代码会在之前的Canvas签名上再次运行。这比看到PNG并按下后退键更糟糕。
设置"的反应。end"在我的代码情况下不起作用。因为我必须用Base64 PNG代码填充一个隐藏的表单变量,并运行一些jquery。
你能建议我能做些什么,不显示PNG,但显示屏幕与更新后的列表?我正在使用asp.net vb,我不精通asp.net,但正在学习。
' take the canvas signature and write it to the Build folder path as a PNG
' the txtPNG hidden form field has the png base64
Dim base64 As String = txtPNG.Text
base64 = base64.Replace("data:image/png;base64,", "")
Dim bytes As Byte() = Convert.FromBase64String(base64)
Response.Buffer = True
Response.Clear()
Response.ClearContent()
System.IO.File.WriteAllBytes(strBuildFilePath & "" & strFilenameToSave & ".png", bytes)
Response.ContentType = "image/png"
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.BinaryWrite(bytes)
'do not use Response.end() or code doesn't work to generate the PDF etc.
这是我用来移动PNG/canvas图像的JQUERY的一部分:
$(function() {
$("#btnSaveASP").on('click', function(e) {
e.preventDefault();
var canvas = document.getElementById('cnvSignatureSketch');
var imgData = canvas.toDataURL();
//alert(imgData);
$("#<%=imgASP.ClientID %>")
.attr("src", imgData)
$("#<%=txtPNG.ClientID %>")
.attr("value", imgData)
//now click another button, btnexport, via jquery
//so user doesn't need to click two buttons
$("#<%=btnExport.ClientID %>").click();
});
});
一个好的老式Response.redirect
在WriteAllBytes
之后工作。