在資料處理中,C# PDF 解析是一個常見需求,例如擷取文件內容或整理資料。本篇將使用 PdfPig 套件,帶你完成 PDF 內容擷取的完整教學,讓你快速掌握文件自動化處理技巧。
今天財務部同仁又有新需求跑來找我們,他們說當公司帳戶收到匯款時,銀行會提供PDF檔案(圖一),他們不想要一個一個檔案打開來看帳款金額,有沒有辦法用程式的方式讀取金額並且顯示出來?
(圖一)

專案開發
語言:asp.net c#
應用程式: windows forms
1 . 建立專案
- 打開Visual Studio 2022 建立一個asp.net c# windows forms專案,選Windows Forms App(.NET Framework),下一步後按建立。(圖一)
(圖一)

- 拉一個button在畫面上提供程式的進入點。(圖二)
(圖二)

- 對(圖二)button1點左鍵兩下,進入程式執行的區塊。(圖三)
(圖三)

2 . 詢問ChatGPT
- 語言、框架、功能需求清楚的表達給GPT如下:
asp.net c# windows form app(.Net FrameWork) 解析PDF裡的文字,並取得 金額: 後面的數字。 (GPT可以附圖,如果把PDF內容截圖貼上去,可以讓GPT更準確回答。)
- 取得GPT給的範例,並把範例程式碼放到我們button1按下後會執行程式的區塊內,private void button1_Click(object sender, EventArgs e)的大括號{}裡面。
(請先用我查到的範例,後續有一定的基礎後可以自己使用GPT查出的範例,以免初學階段看不懂GPT的範例導致學習成效不彰)
private void button1_Click(object sender, EventArgs e)
{
string pdfPath = @"C:\MailAttachments\範例.pdf";
StringBuilder sb = new StringBuilder();
using (PdfDocument document = PdfDocument.Open(pdfPath))
{
foreach (UglyToad.PdfPig.Content.Page page in document.GetPages())
{
sb.Append(page.Text);
}
}
string text = sb.ToString();
Match m = Regex.Match(text, @"金\s*額\s*[::]\s*([0-9,\.]+)");
if (m.Success)
{
string amount = m.Groups[1].Value;
MessageBox.Show("金額 = " + amount);
}
else
{
MessageBox.Show("找不到金額");
}
}
- PDFPig元件下載
當程式碼放到程式裡面你會發現 PdfDocument 底下反紅,這是因為我們沒有下載PDFPig這個內建的套件,所以編譯器就會顯示錯誤,告訴你它不知道這是什麼。(圖一)
(圖一)

PDFPig是第三方套件,需要透過Nuget下載。
找到右方方案總管 → 對著專案按下右鍵 → 彈跳出來的選管理NuGet套件(N)...。(圖二)
(圖二)

在搜尋框打上 pdfpig→ 選PdfPig→ 安裝(圖三)
(圖三)

回到程式碼頁面。
之前我們都是教在程式碼最上方引用套件,今天我們要利用Visual Studio2022 厲害的功能。
滑鼠指到被反紅的程式碼PdfDocument → 出現一個像燈泡的東西,對著燈泡的下拉選項按下左鍵 → 彈出的下拉選單,我們選第一個 using UglyToad.PdfPig;(圖四)
這時候Visual Studio2022就會自動幫我們在最上面加上using UglyToad.PdfPig;。
現在的編譯器已經做到這麼方便,很厲害吧!
(圖四)

這時候你會看到 foreach 跟 Text 底下還是反紅,這是因為 .ne t 跟 PdfPig 都有 Page型態的容器,所以編譯器不知道你要用誰的Page容器,因此會出錯。(圖五)
(圖五)

GPT告訴我們要在程式碼最上面多引用 using UglyToad.PdfPig.Content; , 我們就直接複製貼上程式碼最上面。
引用後會只剩下反紅的程式碼Page。
滑鼠指到被反紅的程式碼Page → 出現一個像燈泡的東西,對著燈泡的下拉選項按下左鍵 → 彈出的下拉選單,我們選第二個UglyToad.PdfPig.Content.Page;(圖六)
這樣一來錯誤訊息就沒了。
為什麼 Page 要改成 UglyToad.PdfPig.Content.Page ? 其實,就是我上一段說的,編譯器不知道你是要用.net 內建的Page容器,還是PdfPig的Page容器。所以我們就明確的告訴編譯器我們要用PdfPig的Page容器。
(圖六)

3 . 測試效果
開始前要在 "C:\MailAttachments\範例.pdf" 放一個範例PDF檔才有辦法正常運作喔!
(圖一)

內容則是自己隨便創作即可,記得要有 金額: ,程式才能抓出後方的數字喔!(圖二)
(圖二)

直接開始程式並且按下button 1,就會成功的跳出金額瞜!(圖三)
(圖三)

結論
這篇的程式碼偏短,而且你會發現範例程式碼已經可以達成財務部提出的需求,基本上不用改動,只需要去了解一下程式的運作即可。
順便分享一下,在職場上資訊部有時候需求比較趕,老闆沒時間等待,我們有可能就會做出一個範例版本或是基礎版就直接上線,之後才回過頭來了解程式碼或做適當的微調。
下一篇我們會來研究範例程式碼的細節。















