MVC 导出PDF
http://www.simple-talk.com/dotnet/asp.net/asp.net-mvc-action-results-and-pdf-content/
http://www.subvert.ca/Blog/wkhtmltopdf-in-MVC3
http://www.cnblogs.com/ryanding/archive/2010/12/26/1915915.html
http://www.cnblogs.com/shanyou/archive/2012/09/07/2676026.html
Building PDFs dynamically using wkhtmltopdf in a MVC3 application
While working on a recent project, I needed to build a series of PDF documents dynamically, then zip them up into a single file. I checked out a couple of options, including iTextSharp and some non-open-source options. I then decided that I liked the looks of wkhtmltopdf.
In my previous life as a Java developer, I had a similar requirement and used iReport to design and fill a Jasper report with data. I knew that I wanted to stay as far away from that solution as possible. I had to have the ability to quickly make data/style/layout changes and have them all testable, without having to recompile or redeploy anything.
The solution I came up with used Razor views just like any other MVC3 page. So, I was able to preview and debug those views without having to actually generate the PDF, download it, and open it. Once I had the views perfected, I built a few helper classes that would render the view in the background, then use the wkhtmltopdf engine to build my PDF.
wkhtmltopdf introduced a couple of interesting problems, not the least of which is that it uses an executable to generate the PDF. I got around that by putting the executable into my application’s bin directory. This gave me the ability to fire it up in a process, sending in the appropriate parameters, then wait for it to finish and grab the file it created.
I put the following method into a helper class and pass into it an instance of my HttpServerUtilityBase so that I can get the executable’s path, and the url to my view that I had previously developed. It saves the PDF to a temp file, then I read the bytes from it, and promptly delete it.
public byte[] ConvertHtmlToPDF(HttpServerUtilityBase server, string inputUrl){ byte[] bytes = null;
FileInfo tempFile = new FileInfo(Path.GetTempFileName());
StringBuilder argument = new StringBuilder(); argument.Append(" --disable-smart-shrinking"); argument.Append(" --no-pdf-compression"); argument.Append(" " + inputUrl); argument.Append(" " + tempFile.FullName);
try { // to call the exe to convert using (Process p = new System.Diagnostics.Process()) { p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true; p.StartInfo.FileName = server.MapPath("/bin/wkhtmltopdf.exe"); p.StartInfo.Arguments = argument.ToString(); p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true;
p.Start(); p.WaitForExit(); }
using (FileStream stream = new FileStream(tempFile.FullName, FileMode.Open, FileAccess.Read)) { bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); } } catch (Exception) { //logging }
tempFile.Delete(); return bytes;}
Depending on your application, once you have the byte array, you can just return that to the client in a FileResult using the appropriate mime-type or drop them into a ZIP file like I did. Hopefully this will help you guys out there that need to produce PDFs in your next MVC3 project.
MVC 导出PDF的更多相关文章
- .Net导出pdf文件,C#实现pdf导出
最近碰见个需求需要实现导出pdf文件,上网查了下代码资料总结了以下代码.可以成功的实现导出pdf文件. 在编码前需要在网上下载个itextsharp.dll,此程序集是必备的.楼主下载的是5.0版本, ...
- JS导出PDF插件(支持中文、图片使用路径)
在WEB上想做一个导出PDF的功能,发现jsPDF比较多人推荐,遗憾的是不支持中文,最后找到pdfmake,很好地解决了此问题.它的效果可以先到http://pdfmake.org/playgroun ...
- mvc导出excel 之 新
前段时间做的mvc导出excel 老大说要进行优化,我原来导出是用npoi插件进行导出,格式是将数据放入到datatable中,然后进行导出. 说要优化的时候就想着将datatable数据导出格式改为 ...
- ITextSharp导出PDF表格和图片(C#)
文章主要介绍使用ITextSharp导出PDF表格和图片的简单操作说明,以下为ITextSharp.dll下载链接 分享链接:http://pan.baidu.com/s/1nuc6glj 密码:3g ...
- MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult
导出EXCEL方法总结 MVC导出数据到EXCEL的方法有很多种,常见的是: 1.采用EXCEL COM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可: 优点:可设置丰富的EXC ...
- JAVA导出pdf实例
一.直接导出成PDF Java代码 1. import java.io.FileNotFoundException; 2. import java.io.FileOutputStream; 3. ...
- 利用ITextSharp导出PDF文件
最近项目中需要到处PDF文件,最后上网搜索了一下,发现ITextSharp比较好用,所以做了一个例子: public string ExportPDF() { //ITextSharp Usage / ...
- iText导出pdf、word、图片
一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...
- Itext导出PDF,word,图片案例
iText导出pdf.word.图片 一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生 ...
随机推荐
- abstract
/// <summary> /// 抽象类不能被直接实例化 /// is a /// </summary> public abstract class BasePhone { ...
- (转)分布式搜索Elasticsearch——配置
配置文件位于%ES_HOME%/config/elasticsearch.yml文件中,用Editplus打开它,你便可以进行配置. 所有的配置都可以使用环境变量,例如: node.r ...
- Koajs原理
Koajs让习惯阻塞式代码写法的同学感到很舒服,再也不用盖楼式的callback了,而且也不需要学习Promise的then,catch这些新东西. 但实际上,Koajs这样的写法有点像是语言的语法糖 ...
- POJ 3928 Ping pong
题目链接:http://poj.org/problem?id=3928 乒乓比赛,有N个人参加,输入每个玩家的技能等级,对每个人设置一个特定ID和一个技能值,一场比赛需要两个选手和一个裁判,只有当裁判 ...
- python学习之html从0开始(二)
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- PHP 跨域写cookie
实际工作中,类似这样的要求很多,比如说,我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是PASSPORT的功能. 我只写一个大概,为了测试的方便,先编辑hosts文件,加 ...
- dapper extensions (predicates)
https://github.com/tmsmith/Dapper-Extensions/wiki/Predicates The predicate system in Dapper Extensio ...
- win10 安装scrapy
在win10的环境下安装scrapy,并不能直接按照官网的手册(http://doc.scrapy.org/en/1.0/intro/install.html)一次性安装成功,根据我自己的安装过程中遇 ...
- C/C++错误分析errno,perror,strerror和GetLastError()函数返回的错误代码的意义
在C语言编译中,经常会出现一些系统的错误,这些错误如果在编译的时候不能很好的“预见”,会使系统“崩溃”,常见的捕获错误函数有: errno #include<errno.h> 这个变量是程 ...
- 1062 Talent and Virtue (25)
/* L (>=60), the lower bound of the qualified grades -- that is, only the ones whose grades of ta ...