使用iTextSharp与淘汰JavaScript或其他MVC / MVVM框架?
好吧,因为我确实发现我可以使用iTextSharp生成PDF,所以我走了那条路。
我已经把它用于保存HTML的基本格式化为PDF。 那不是问题。
我现在需要做的是在其中使用敲除标记,并使用生成的 HTML(即DOM)作为我的字符串传递到创建PDF的方法。
所以,例如,我有一个用淘汰生成的表。 我需要将由knockout生成的DOM作为字符串传递给我的C#控制器,以便我可以构建PDF。
基本上,如果你看一下这里生成的内容:
http://knockoutjs.com/documentation/foreach-binding.html
如果你仔细阅读例2(它产生了三个要点),它就说明了我正在谈论的那一代。 在我的情况下,我想要获取生成的项目符号并将它们传递给我的控制器 – HTML和所有 – 作为字符串,以便我可以保存它们。
有什么想法吗? 老实说,我甚至不确定从哪里开始 。
该问题适用于执行MVC
或MVVM
任何 JavaScript Framework。 上文提到的:
我需要将由knockout生成的DOM作为字符串传递给我的C#控制器,以便我可以构建PDF。
所以我将使用一个简单的工作示例来完成在ASP.NET MVC中完成此操作。 以前从未使用过knockout.js
,所以要获取DOM
元素并使用jQuery
发送Ajax
请求。
该视图基于您在上面引用的示例: 1。获取ul
outerHTML
; 2.向控制器发送Ajax
请求:
People
- Name at position : Remove
@section scripts { }
笔记:
- FileSaver.js在技术上不是必需的,但是节省了大量时间而不必处理不同的浏览器实现。 参考浏览器兼容
- 如果使用
jQuery
则需要BinaryTransport – 遗憾的是,框架在我检查后不支持此function 。 像AngularJS
这样的其他框架确实支持二进制。 参考发送和接收二进制数据 。
jquery-binary.js
是我为几个内部项目编写的一个简单的 jQuery
插件:
(function ($) { $.fn.downloadFile = function(url, data, requestType) { $.ajax({ url: url, data: data, type: requestType || 'POST', dataType: 'binary' }) .done(function(data, textStatus, jqXHR) { var type = jqXHR.getResponseHeader('Content-Type'); var filename = jqXHR.getResponseHeader('Content-Disposition'); filename = filename && filename.indexOf('attachment') > -1 ? filename.replace(/(?:[^=])+=/, '') : 'file.bin'; var blob = new Blob([data], { type: type }); saveAs(blob, filename); }) .fail(function(jqXHR, textStatus, errorThrown) { alert(errorThrown); }) ; return false; }; }(jQuery));
控制器: 1。用XMLWorkerHelper
解析HTML
字符串; 2.返回PDF。
[HttpPost] // some browsers have URL length limits [ValidateInput(false)] // or throws HttpRequestValidationException public ActionResult Index(string xHtml) { Response.ContentType = "application/pdf"; Response.AppendHeader( "Content-Disposition", "attachment; filename=test.pdf" ); using (var stringReader = new StringReader(xHtml)) { using (Document document = new Document()) { PdfWriter writer = PdfWriter.GetInstance( document, Response.OutputStream ); document.Open(); XMLWorkerHelper.GetInstance().ParseXHtml( writer, document, stringReader ); } } return new EmptyResult(); }
将让您决定如何处理内联样式。 ;)