PDF文档生成的几个库的试用

开发需求

最近接手一个已有系统的开发工作,是用C# ASP.NET Mvc开发,其中有一个要求是需要生成几个文档,文档格式要求是PDF,而且有修改格式内容的需求,比如换Logo,换备注,换字体等,但也都是基于一下固定元素的调整。

查找资料

生成PDF文档也不是什么难事,就想着找个库,然后往里插文本,插表格,插图片,然后保存就行了。

FastReport

分析了需要的文档和页面样式,算是比较简单的主从关系内容,但想着要能够以后可以变部分样式,不要再来写编译代码,所以看了几款报表工具,从自定义模板入手,FastReport.NET是最先看的。

选择FastReport的主要原因相对比较便宜,老项目增加支出很难,要找老板批预算。下了Fastreport试用版,看几个demo就做完一张报表,也就是提供一个数据集,绑定模板,直接在服务器端导出下载就可以了,还算顺利,但是整个过程还是有点复杂,让用户使用设计器改模板,对齐那些格子也不简单,有的时候需要调整属性中数字才能对齐,拖放对齐不好使。

PDFsharp

Fastreport毕竟要钱,看到一个网友推荐PDFsharp,完全免费的,所以这个肯定要测试了,赶紧到官方(http://www.pdfsharp.net)去下载了一个,进去一看还有个MigraDoc,一开始有点闷,不知道下哪个了,再仔细一看原来是PDFsharp是纯PDF组件,画文本,画图形,所有的内容输出都是最原始的方式,而MigraDoc基于PDFsharp做了更高级的功能,用于输出文档,主要是增加了表格,样式等对象,输出一张表格就不要再代码去画了,那肯定选MigraDoc来用了。

一顿猛操作,也生产了需要的PDF文件,但是字体好像不对劲,改用雅黑字体,好了,问题来了,中文乱码,这个坑也不浅,查了所有文档和论坛,一个上午就过去了,最后说是ttc格式的字体不支持,但可以用ttf的雅黑,需要先将字体装入,然后再生成文档,总算能用其他字体,导出发现文档的尺寸大了不少,就用了用雅黑,一页文档从100K到360K了,我用其他报表工具生成的PDF可以更小啊,有的只有60K,emmm....

GemBox.Document

MigraDoc算是比较完美了,毕竟免费的,但是生成一个文档代码一大堆,又回看报表,两者很难决定用哪个,报表虽然模板可维护,但是维护一个模板也需要专业知识,比如数据集,字段,主从。就这个这个时候我有看到了GemBox.Document,这个名字更直接,就是做文档的,赶紧下来测试,这个比MigraDoc高大上多了,直接支持word模板,然后读入模板后再往模板写数据,省了好多代码,这个好,字体支持也完美,没有MigraDoc那货还需要加载字体注入,GemBox.Document直接创建样式,创建字体应用即可,非常简单,导出的文档加上雅黑字体也就100K多点,能够接受。

GemBox.Document因为支持word模板,所有在做文档样式非常方便,相比Fastreport,我感觉还是用Word画模板方便,这不为了文档好看,我在页脚画了一条贝塞尔曲线,噗呲,导出为PDF丢失了。emmmmm...,可能有些Word对象不支持吧,但是主要的内容是正确输出的。

Aspose.Word

已经测试了好几个组件了,再测试一个Aspose.Word也不嫌多,直接nuget上拉了一个下来,用过GemBox.Document后,发现这两货基本差不多,代码稍微改改就能用,最后SaveToPdf,一看就是好,那条贝塞尔曲线也导出了。

总结

测试了好几个方案,最后报老板批用哪个,反正钱是老板的,用那个还是他说了算。就生成文档来说,不预览,还是用读写库比较好,轻量,性能也高,如果直接生成word,省去了布局计算的性能,而报表组件首先是生成布局,再导出成word,相对来讲比较耗CPU吧。

当然现在生产PDF的库很多,有些没有测试,估计都差不太多,关键还是看谁便宜,代码一样写,多几行代码也就喝杯咖啡的时间。

注意:转载请标明出处 http://www.commuch.com/a/pdf-export-lib-compare