我一直在寻找一种从我的default.aspx.cs file...after中调用javascript函数的方法--在这里阅读一些问题,我发现了这种方法(Call JavaScript function from C#),但是我需要在file...after代码中使用来自javascript函数的返回值。
我需要抓取用户在画布上的输入,并将其保存到图像中,并将该图像附加到pdf文件中。
以下是js函数:
getSignatureImage: function () {
var tmpCanvas = document.createElement('canvas')
, tmpContext = null
, data = null
tmpCanvas.style.position = 'absolute'
tmpCanvas.style.top = '-999em'
tmpCanvas.width = element.width
tmpCanvas.height = element.height
document.body.appendChild(tmpCanvas)
if (!tmpCanvas.getContext && FlashCanvas)
FlashCanvas.initElement(tmpCanvas)
tmpContext = tmpCanvas.getContext('2d')
tmpContext.fillStyle = settings.bgColour
tmpContext.fillRect(0, 0, element.width, element.height)
tmpContext.lineWidth = settings.penWidth
tmpContext.strokeStyle = settings.penColour
drawSignature(output, tmpContext)
data = tmpCanvas.toDataURL.apply(tmpCanvas, arguments)
document.body.removeChild(tmpCanvas)
tmpCanvas = null
return data
}下面是在我的default.aspx.cs中生成代码的pdf:
document.SetMargins(20f, 20f, 85f, 20f);
long milliseconds2 = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
//Document document = new Document();
var output = new FileStream(Server.MapPath("~/PDFs/Test-File-" + milliseconds2 + ".pdf"), FileMode.Create);
pdfUrlLink = "Test-File-" + milliseconds2 + ".pdf";
var writer = PdfWriter.GetInstance(document, output);
// the image we're using for the page header
iTextSharp.text.Image imageHeader = iTextSharp.text.Image.GetInstance(Request.MapPath(
"~/Images/pdfHeader.jpg"
));
// instantiate the custom PdfPageEventHelper
MyPageEventHandler ex = new MyPageEventHandler()
{
ImageHeader = imageHeader
};
// and add it to the PdfWriter
writer.PageEvent = ex;
document.Open();
createContent();
document.Close();
submitEmail();
}
}这是从其他问题中修改的代码,将两个世界集成在一起:
string SignData = null;
Page page = HttpContext.Current.CurrentHandler as Page;
page.ClientScript.RegisterStartupScript(typeof(Page), "Test", "<script type='text/javascript'>" + SignData +"=getSignatureImage();</script>");它不work...Any的帮助或输入将不胜感激!
发布于 2014-03-14 19:41:47
您不想从您的C#代码中调用javascript函数。您想要做的是将javascript函数中的数据发布到您的web应用程序中,以便您的C#代码能够处理它。
画布所在的客户端HTML将有一个按钮,当单击该按钮时,调用您的javascript从画布中获取dataUrl,并将其放入表单字段(比如隐藏的输入或其他什么),然后提交表单。
您的C#代码将从Request.Form集合中提取值。该值是Base64编码的图像,因此您需要将其转换为位图,然后在您的PDF输出中使用它。
这里有一个快速的小提琴演示:http://jsfiddle.net/LSRYG/
function submitImage(){
var url = document.getElementById('canv').toDataURL();
//this will show you the image data but you won't actually want to do this. It's just for the demo
alert(url);
//put it in the hidden imput and submit the form.
document.getElementById('canvImg').value = url;
document.getElementById('theform').submit();
}我相信您可以找到如何将dataURL字符串转换为C#代码中的图像。
发布于 2014-03-14 19:23:45
您发现的是如何运行告诉浏览器在ASP.NET应用程序中的页面加载上运行Javascript。
我认为您正在寻找的是.NET中的Javascript编译器。
发布于 2014-03-14 19:32:38
您能更改任何导致回发只运行一些javascript的控件吗?然后,只需调用一个以__dopostback ()作为事件参数的getSignatureImage,并从中找出它。
基本上使用带有onclick="SendEmail();"的function SendEmail{ _doPostBack([controlClientID], getSignatureImage()); },然后在页面上检查__EVENTTARGET(第一个param) __EVENTTARGET(第一个param) == (任何客户端id ),如果匹配,则处理__EVENTARGUMENT(第二个param),这将是您的getSignatureImage()结果。
或者创建一个send方法或服务来发送带有getSignatureImage()结果的电子邮件
https://stackoverflow.com/questions/22413749
复制相似问题