项目中需要把网页生成PDF,我分别对比了itextsharp和pechkin,下面以我在项目中遇到的问题总结出两者各自的优缺点:
itextsharp
优点:
1、接口较多,可以更细致的定制PDF文档 ;
2、没有提供打印页码的接口,需要变项实现;
缺点:
1、对CSS支持的较少,比如:after{content:""},所以相对原网页样式差距较大;
2、html标签嵌套后有的不显示,比如p中放div;
3、适合订制PDF,直接把html转为pdf的功能较弱。
pechkin
优点:
1、对css、html和js支持非常好,所以适合用于把html转为pdf;
2、显示页码比较简单,有相应的接口方法。
缺点:
1、我直接运行源码然后生成pdf,结果发现只能生成几次,就不能再生成pdf了,然后发现iis占用cup为25%,一直不释放;
然后我做成控制台程序会发现首次会报这个错误:Qt:Could not initialize OLE<error 80010106>,首次可以正常生成pdf的,再继续生成几次pdf就会失败,网上查了不少资料没发现这个问题的解决办法,我是运行的源码,并不是我自己写的,所以这个问题应该是pechkin的问题(测试环境win7\vs2010\.net4.5)。
其他没发现pechkin的缺点,但是就这一点就决定项目中用不了,其他都很棒!!看到此文的朋友如知道原因希望可以告诉我!!邮箱:496493740@qq.com,谢谢!
我分别把itext 和 pechkin 整理成了独立的服务,然后用下面代码的方式去调用生成pdf的服务:
//获取服务实例
public static readonly Lazy<ICreatePDF> RemotingPDF = new Lazy<ICreatePDF>(delegate
{
string url = "http://127.0.0.1:2345";
return (ICreatePDF)System.Activator.GetObject(typeof(ICreatePDF), url);
});
//生成pdf ,以.net mvc举例,返回pdf文件
byte[] buf = RQERP.Tools.TPDF.RemotingPDF.Value.todo("内容", 缩放比较);
return File(buf, "application/pdf", "文件名.pdf");
我花了很长时间测试,发现做成独立的生成PDF的服务然后需要的项目去调用这个服务较方便,另外pechkiin生成pdf的功能放到项目中如果生成pdf遇到错误,会占用较高的cpu,异常都捕获不到,直接影响项目的运行,甚至出现请求无响应的问题,希望这两个插件的例子能帮到您(因为做成了服务,几乎不用调整就可以直接使用,包括生成页码和水印等)!
下载源码后,不会使用的可以联系我:496493740@qq.com, 我辛辛苦苦整理出来的示例分享给大家参考使用,既然还有人投诉我前边分享的例子,也不说原因,我又不收钱不收费,有必要吗!