使用iTextSharp進行PDF檔案套版
主題: |
使用iTextSharp進行PDF檔案套版 |
文章簡介: |
將已定義好的PDF可填寫表單,使用iTextSharp進行資料與PDF樣版的套版 |
作者: |
陳偉仁 |
版本/產出日期: |
V1.0/2016.12.26 |
1. 前言
一般PDF檔案除了可利用程式產生外,也可以先利用PDF編輯軟體(如Adobe Acrobat)先行製作可填寫的文件底稿,再利用iTextSharp將資料填入對應的欄位,以達到文件格式一致而內容依據對象及狀況對應填入
iTextSharp 是一套讓.Net可以處理PDF的library,它是從java 版的 iText衍生過來的。
本文簡單介紹如何讀入已定義好的PDF可填寫表單,再使用iTextSharp將資料填入欄位中。
2. iTextSharp 安裝與使用
● 安裝
可使用NuGut安裝
或至官網下載後再加入參考中
● 已定義好的PDF可填寫表單
在利用PDF編譯軟體時,紅框中即是常見的填寫欄位,一般常見的欄位有Text、Multi Line Text、Checkbox、Radio Button等。
● 讀取PDF檔案
在加入iTextSharp參考後,記得先using iTexSharp
25行: 使用PdfReader將pdf檔案讀入,PdfReader一共有13種讀入來源的方式,例如檔名(含路徑)、byet[]、Uri等,並且有相關參數可使用,需要的朋友再查詢即可
29行: 使用PdfStamper將讀入的PdfReader放入MemoryStream,以方便接下來Pdf的操作。另外,若想取得此份PDF中所有的欄位名稱,可用[ pdfFormFields.Fields.Keys ],取出來的資料型態為ICollection<string>
30行: AcroFields是針對Pdf中欄位的部份,利用pdfStamper.AcroFields讀出PDF中的欄位資料
31、32行: 記得完成PDF操作後要其關閉,以免佔用資源
● 欄位填入資料
先前提到一般常用的欄位有Text、Multi Line Text、Checkbox、Radio Button、Check Box,但各自將資料設定至欄位的方式各有不同及要注意的部份,以下針對這些欄位做個簡單說明。記得欄位的操作都是在AcroFields裡,以下皆用pdfFormFields來表示
• Text
利用SetField來將資料填入Text Field,第一個是Pdf欄位的名字, 第二個是填入值,第三個是顯示的值。由於PdfStamper的屬性關係,若第三個沒有填入的話,會造成部份欄位無法正確的顯示資料
• Multi Line Text
Multi Line Text實際上跟一般Text設定資料值的方式一樣,所以要去判斷它的屬性,上圖便是判斷方式的寫法,關於各屬性的意義有興趣的朋友再自行上網查詢
• Checkbox
一般網路範例查到如何勾選Checkbox的方式會是第2行,但實際在開發時發現Checkbox與Text的填值方式皆相同,要填入Checkbox的設定值。在建立checkbox時會設定預設值,一般是Yes,所以網路範例大都會填入Yes,但實際在建立PDF套版時要確認一下Checkbox的預設值是否有改過。
另外,checkbox的勾選有好幾種顯示方式,如圓點、星號等,所以在設定時會填入第三個屬性為true,第三個屬性為bool saveAppearance(param saveAppearance save the current appearance of the field or not),這樣在合併PDF時才能正確的顯示
• Radio Button
Radio button看起來設定的方式也與Text一樣嗎? 是的,但差別在於Radio button是同樣名稱,例如要做詢問有「同意」、「不同意」兩種,在PDF設定上其Field Name都是相同名稱,但各自的預設值不同,見下圖
PDF編輯軟體可能有不同的命名方式,但大致上是如此的,因此在設定RadioButton時設定該欄位與要選擇的值即可
3. 結語
不論是自行產出PDF或是PDF套版,iTextSharp都是很方便的library,網路上也可以找到許多相關的範例可供參考
本文僅簡單介紹如何使用iTextSharp進行PDF套版,更多的操作方式有機會再寫文介紹或自行上網搜尋。
4. 參考來源
• 使用ASP .NET (C#) 產生PDF檔的好幫手—iTextSharp library - http://www.cc.ntu.edu.tw/chinese/epaper/0015/20101220_1509.htm
• 網路,查詢多篇文章才理解iTextSharp的操作方式,因此不一一列出(至少30篇文章以上),需要的朋友再上網搜尋即可