iTextSharp 插件生成PDF(使用总结)

最近在工作上遇到一个需要生成PDF文件并提供下载的需求,由于是使用.net开发的。

经过综合考虑时候,决定使用iTextSharp 这个插件。

这里总结一下遇到的问题和解决方法。

先看看这个插件的基本用法:


iTextSharp  插件生成PDF(使用总结)

基本用法

可以看出 当你创建一个Document时,就需要指定一个存放路径,生成的pdf会存放到对应的位置。

可是我是需要返回一个文件流呀。

这里我想到了两种做法,都实践过了,各有优点和缺点。

先来讲讲遇到的第一个坑:中文显示问题

如果你使用该插件,啥都不设置的话,默认是指显示英文字体,中文的字体和标点符号都不会显示出来的。需要显示中文字体,就需要设置字体来支持中文显示。上代码


iTextSharp  插件生成PDF(使用总结)


第一种方法

我在项目的相对路径上创建了一个临时的文件夹,将生成的pdf存放到这个文件夹里面。在返回的时候,读取这个文件,然后将临时文件夹删除,再将这个流包装成返回格式返回。

这种做法对于大部分项目应该是可以正常运行的,然而,如果你的项目有特别严格的文件夹权限管理的话,操作起来可能就比较麻烦(大佬不用考虑这个问题)。因为我只是想实现一个下载pdf的功能,当时项目转测之后,需要在好几个项目上运行,然后测试对应的生成pdf功能。大部分项目是正常运行的,但是其中有一个项目就因为创建临时文件夹失败(权限不够,被拒绝了),导致该功能不可用。有人说,改一下文件夹的权限就好了。嗯是的,改完之后,确实通过测试了,但是线上环境,谁能说的清呢。稳妥起见。我决定使用第二种方法。

iTextSharp  插件生成PDF(使用总结)

第一种方法①


iTextSharp  插件生成PDF(使用总结)

第一种方法②

第二种方法

使用MemoryStream ms = new MemoryStream(); 生成一个内存流。将生成的pdf文件输出到这个内存流里面,再从内存流读取字节,内存流关闭,返回字节。

之所以使用这个方法,是因为本身生成的pdf不大,而且生成pdf功能使用频率也不高。所以直接内存转出就完事了。代码撸起来也比较清晰。大Pdf不推荐这种做法,还是老老实实用第一种,排查文件夹权限更好一点

iTextSharp  插件生成PDF(使用总结)

第二种方法


分享到:


相關文章: