前言
最近同事詢問,它把好的 PDF 檔案呼叫 Web Service 另存新檔後,
那個 PDF 就壞了,透過 Browser 開起來都是白的,
用 Adobe PDF Reader 來開啟會出現 「檔案已損壞且無法修復」 的訊息。
想到之前 為什麼 Crystal Report 匯出成 PDF 內容都是白的? 的問題,
該不會又是編碼的問題吧?
找問題
首先一樣先透過 Notpad++ 來比較一下好/壞的檔案編碼是否不同,
結果都是 ANSI 。
再來就是比較一下內容,
可以發現在資料區塊有些內容不相同,
有可能是資料編碼跟 ASCII 編碼不同所造成的。
Web Service 的程式碼如下,
1 | [ ] |
看起來是直接將 Byte Array 的資料存起來,
完全不會動到編碼,所以應該不是它的問題。
讀取 PDF 檔案的 Byte Array 程式如下,
1 | var pdfPath = @"C:\temp\pdf\suc.pdf"; |
哦~ 這裡有編碼(Encoding.Default
)
以繁體中文的作業系統,Encoding.Default ,應該為 Big5
而 PDF 檔的編碼大多是 Encoding.ASCII。
所以這裡應該要改成 Encoding.ASCII。
所以這裡改成了 ASCII 就可以了。
但是,比較好的方式是不要特別去設定讀取的編碼,
直接使用 File.ReadAllBytes 就可以了,
程式碼也比較簡潔,如下,
1 | var pdfPath = @"C:\temp\pdf\suc.pdf"; |