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(使用總結)

第二種方法


分享到:


相關文章: