使用iTextSharp与淘汰JavaScript或其他MVC / MVVM框架?

好吧,因为我确实发现我可以使用iTextSharp生成PDF,所以我走了那条路。

我已经把它用于保存HTML的基本格式化为PDF。 那不是问题。

我现在需要做的是在其中使用敲除标记,并使用生成的 HTML(即DOM)作为我的字符串传递到创建PDF的方法。

所以,例如,我有一个用淘汰生成的表。 我需要将由knockout生成的DOM作为字符串传递给我的C#控制器,以便我可以构建PDF。

基本上,如果你看一下这里生成的内容:

http://knockoutjs.com/documentation/foreach-binding.html

如果你仔细阅读例2(它产生了三个要点),它就说明了我正在谈论的那一代。 在我的情况下,我想要获取生成的项目符号并将它们传递给我的控制器 – HTML和所有 – 作为字符串,以便我可以保存它们。

有什么想法吗? 老实说,我甚至不确定从哪里开始

该问题适用于执行MVCMVVM 任何 JavaScript Framework。 上文提到的:

我需要将由knockout生成的DOM作为字符串传递给我的C#控制器,以便我可以构建PDF。

所以我将使用一个简单的工作示例来完成在ASP.NET MVC中完成此操作。 以前从未使用过knockout.js ,所以要获取DOM元素并使用jQuery发送Ajax请求。

该视图基于您在上面引用的示例: 1。获取ul outerHTML ; 2.向控制器发送Ajax请求:

 

People

@section scripts { }

笔记:

  1. FileSaver.js在技​​术上不是必需的,但是节省了大量时间而不必处理不同的浏览器实现。 参考浏览器兼容
  2. 如果使用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(); } 

将让您决定如何处理内联样式。 ;)