2013/11/18

如何在 android app 裡面產生 PDF 檔案

最近測試了如何在 android app 裡面產生 PDF 檔案,我們的需求是:

  1. 不透過app server,直接產生PDF,並寫入到 SD Card
  2. 必須要能顯示 繁體中文 簡體中文 及英文
  3. 必須要能繪製文件表格

我們選擇了兩種 pdf library,測試在 android 產生 pdf 的能力


  1. iText:這是最有名氣,處理pdf的library,但因為要在 android 上使用,我們不能直接使用原本的 itext library,要到 http://sourceforge.net/projects/itextg/ 下載 可在 android 平台運作的 itextg


  2. Android PDF Writer:http://sourceforge.net/projects/apwlibrary/ 這是個簡單的 PDF library

解決問題的想法有兩種

  1. 直接產生有文字、圖片等內容的 PDF,但必須要解決中文字型的問題
  2. 先將內文資料用圖片的方式,以 Android Graphic Library 將文字、線條等資料,先畫在一張圖片上,然後再將圖片貼到 PDF 檔案中

測試結果如下:


  1. iText 可直接用程式產生 文字 tables images 等東西
    最大的問題是 中文字型。


  2. 如果要使用外部字型,例如 Truetype 的字型,會因為字型檔案過大,而造成 android 程式 out of memory


  3. 最好的方式是使用 iTextAsian.jar (參考 iText中文問題的解決之道)

    此檔案可在 itext 的 extrajars 裡面取得 http://sourceforge.net/projects/itext/files/extrajars/

    在程式中,可用以下的方式指定文字的字型

    Font textfont = new Font(BaseFont.createFont("MHei-Medium", "UniCNS-UCS2-H", BaseFont.EMBEDDED));


  4. 需要搭配 android 及 pc 的 pdf reader 測試,必須確認產生出來的檔案 可以被 兩個平台的 pdf reader 讀取,尤其是繁體與簡體中文字型的部份


  5. 使用 apwlibrary 以畫圖的方式處理,在 ASUS 平板測試 PDF 正常,但是以 Samsun Galaxy-S 測試時,內建的PDF Reader 顯示出來的圖片卻都是 X

版權問題


  1. iText 採行 Affero GPL ,以我們的專案來說,沒有問題,可以一併遵循 AGPL的規範,公開 source code


  2. Android PDF Writer 採行 BSD,可以很自由地使用它