Xps轉Pdf


一、功能說明與定義

把Xps轉成Pdf

二、產生背景

由於項目的需求有用到相關的技術,因此進行了研究與整理。

三、實現方式

由於項目上已經有了相關的功能和實現(用的是開源的PdfSharp實現的),但是存在一些問題,在此的基礎上我花了些時間進行了整理和研究,因此進行的整理和總結,下面將對三種實現方式進行簡單的說明。

  • 存在的問題

         問題一:基於PdfSharp的轉換工具都有一個問題,就是在Xps的總頁碼大於50頁時,把Xps轉成Pdf最多只能生成出50頁的Pdf,查看源碼都能發現原來轉換接口中有如下的代碼塊 

    

#if DEBUG
            // stop at page...
            if (pageIndex == 50)
              break;
#endif

 

  如上,如果PdfSharp相關的代碼是Debug版本,則都會出現此問題,解決辦法就是找到相關的源碼生成一個Release版本就可以了。

         問題二 :由於PdfSharp的轉換工具存在緩存機制,因此如果Xps轉換為Pdf是用在服務端進行轉換那么將導致服務器內存的不斷增長,最終將導致服務的崩潰。解決辦法就是推薦采用第三種 3、GhostXPS 進行轉換。

  • 實現方式

  以下將簡單的介紹三種Xps轉Pdf的實現。

  1、XpsToPdf

  GIT地址:https://github.com/XpsToPdf/XpsToPdf

  Framework版本:默認是

<TargetFrameworks>net48</TargetFrameworks>

  支持 framework4.7但是要額外引入如下程序集

     

 

  由於引入的 System.IO.Packaging 包的最低framework版本支持的是4.7因此無法在往下降了,除非找到相應的源碼同步調整相應的framework版本。

  此項目其實就是基於PdfSharp的實現,因此也存在Debug下編譯的dll最多只能轉出50頁PDF的問題,詳見 存在的問題

 

  2、PdfSharp.Xps

  GIT地址:https://github.com/EbenZhang/PdfSharp.XPS

  Framework版本:

  默認是framework3.5的項目

  此項目也是基於PdfSharp的實現,實現代碼基本與(1)中的一樣,這里不再重復闡述,由於對framework的版本要求更低,因此更能符合大部分項目的要求。

  總結:(1),(2)實現都是基於PdfSharp的方式,因此都存在Debug下編譯的版本只能生成50頁PDF的問題,其次轉換出來的PDF通常都比較大,目測會大10倍左右,我測試的Xps是200多頁1.6M左右,生成后的Pdf是16-17M。

 

  3、GhostXPS

  GIT地址:https://github.com/nmanichev/GhostXPS

  Framework版本:

  默認是framework4.0的項目

  實現原理是通過帶參啟動gxpswin64.exe程序把Xps轉成Pdf,通過此方式生成的Pdf大小通常是Xps大小的3倍左右。

 

以上就是我本次分享的全部內容,由於都是開源項目,項目里都有對項目使用的詳細介紹因此這里都是簡單的說明和引入。

如果大家還有其他更好的方式也歡迎大家踴躍分享。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM