C# PDF 解析程式碼解析|資料擷取流程完整說明|C# PDF 系列

更新 發佈閱讀 11 分鐘

如果你已經完成 PDF 解析,本篇將針對程式碼進行詳細說明,解析 C# PDF 資料擷取的流程與邏輯,幫助你深入理解實作方式,並能應用在不同類型的文件處理場景中。

開始範例程式碼解析

1 . 開啟 C# PDF 解析教學|使用 PdfPig 擷取文件內容(完整範例)|C# PDF 系列 建立的程式

vocus|新世代的創作平台


2 . 程式碼研究

我們找到button1按下會執行的程式碼,開始一行一行解讀。

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("找不到金額");
}
}

程式碼片段:

  1. string pdfPath = @"C:\MailAttachments\範例.pdf";
  2. StringBuilder sb = new StringBuilder();

-------------------------------------------------------------------------------------------------------

第 1 行 因為我們一路從開始到現在已經是第六篇文章,我們已經開始是個初階工程師,所以我們也要開始學著用工程師的語言解釋。這裡是宣告一個string(字串型態)的變數pdfPath,並且把檔案的路徑存在這個變數裡面,等一下就能用這個變數找到檔案位置。

第 2 行 StringBuilder是一個.net 內建的型態,可以用來處理字串的串接。

並且,StringBuilder sb = new StringBuilder(); ,這是.net很基本的觀念,要使用東西前都要先初始化一下,不用特別背初始化的格式長怎樣,要使用時再上網查一下就行。

程式碼片段:

  1. using (PdfDocument document = PdfDocument.Open(pdfPath))
  2. {
  3. foreach (UglyToad.PdfPig.Content.Page page in document.GetPages())
  4. {
  5. sb.Append(page.Text);
  6. }
  7. }

-------------------------------------------------------------------------------------------------------

第 1 行 using 這是.net內建的用法而且相當常見,最常用到的地方,例如: 開啟檔案、連線資料庫。當離開這個using 的大括號{}裡面後,系統會自動幫你關閉檔案的占用、連線的佔用或資源占用等等。

PdfDocument document = PdfDocument.Open(pdfPath) 這是第三方套件的固定格式。我們創建一個PdfDocument型態的變數document,然後 PdfDocument.Open(pdfPath) 開啟路徑的檔案丟到 document 裡面,之後就能操作document這個變數來取得檔案內容等等的資訊。

第 3 行 PdfDocument這個型態裡面有提供取得Pdf總頁數的方法,所以我們用document.GetPages()取得所有頁數的資料,迴圈處理每一頁的資料。在迴圈裡創一個Page型態的變數page去接收每一頁的資料,不過我們要用第三方套件提供的Page型態,所以要明確地寫UglyToad.PdfPig.Content.Page系統才不會誤判。

第 5 行 在迴圈當中每次都會取回一頁的資料放在page變數裡面,然後我們用page.Text把頁面裡的文字取出來,再把文字丟到前面創的StringBuilder型態的變數 sb裡面,

sb.Append(page.Text); Append字面上的意思就是加上去,所以當迴圈跑完,每一頁的文字都被加進去後,sb裡面就存了整個pdf檔案的內容。

程式碼片段:

  1. string text = sb.ToString();
  2. Match m = Regex.Match(text, @"金\s*額\s*[::]\s*([0-9,\.]+)");

-------------------------------------------------------------------------------------------------------

第 1 行 string text 先創立一個string字串型態的變數text, sb.ToString()把sb裡面裝的pdf文字內容也轉成string型態放進去text。ToString()如字面上的意思轉成string型態。

第 2 行 Match m 先創立一個Match型態的變數m, Regex.Match(text, @"金\s*額\s*[::]\s*([0-9,\.]+)") 這是一個在程式開發不論任何語言都可以共用的方法,稱為正規表示式。 Regex.Match 是.net內建方法,如字面上意思,用Regex(正規表示式)去Match(匹配)小括號內text的內容與你想要找的某規則片段或文字,在text內容裡面如有匹配到你想要的規則,則那段匹配到規則的內容就會被取出來放進變數m裡面。

(*補充 : 正規表示式的規則還有用法博大精深,需要用到時直接問ChatGPT,會比你自己背那些規則更快且更準確喔!
因為這個正規表示式對初學者可能會有些困惑,所以我還是要重複提醒我的理念,我們先實做出來,了解大概的用法,再去精進自己,千萬不要像我之前走的冤忘路,什麼都想要理解到最透徹才往下一步,這時候就會失去對寫程式的興趣喔!因為程式牽扯到很多東西,不可能每項都完全弄懂或精通,弄懂以後可能人都老了! 所以還是要排優先順序,優先做出功能,再去理解或精通,當下不理解就先用固定且大眾的用法,回過頭來看第二遍第三遍相信你就會懂了。)

程式碼片段:

  1. if (m.Success)
  2. {
  3. string amount = m.Groups[1].Value;
  4. MessageBox.Show("金額 = " + amount);
  5. }
  6. else
  7. {
  8. MessageBox.Show("找不到金額");
  9. }

-------------------------------------------------------------------------------------------------------

第 1 行 先用Match型態的變數m提供的Success判斷是否有匹配成功。

第 3 行 匹配成功後我們用一個string型態的amount變數來取得匹配到的金額,m變數裡面有提供一個Groups的變數取位置[1]的值就是真正的金額。

第 4 行 MessageBox.Show是.net WindowsForm內建用法,可以彈跳出視窗顯示文字,("金額 = " + amount) 在""裡面的值,系統都會當作是字串,字串跟字串可以透過 + 號串起來,因此這裡就會組成 "金額 = 10000" 的字串顯示在這個彈跳視窗。

第 6 行 else 則是沒有達成if的條件就會進來這裡,依範例如沒有匹配到 金額: 10000 ,m.Success 就會是False , 就會進入else,我們的範例有這行字,所以就不會進入這個else。

第 8 行 MessageBox.Show是.net WindowsForm內建用法,可以彈跳出視窗顯示文字,如果很好奇又有時間的話,可以試著把範例檔改成沒有 金額: 10000 這行 ,就會彈跳出視窗顯示"找不到金額"

結論

程式很有趣的地方就在,當你一直接觸新需求新的開發或是改善的任何需求,每當你接觸一次你就會發現你又學到更多東西,又或者你又可以更深入去探討以前使用過的技術如何改善與精進等等。這樣的過程非常的有趣,會學習到新的事物,對於技術更純熟,並且完成一項任務就會有成就感,自然而然就會很開心,又變得很有自信。

像是我們在這一章節裡面就學到了正規表示式(Regex),並且這個東西裡面也是博大精深,可以花有空的時間去了解,雖然看似在做重複的程式開發工作,但一直做下去就會發現從中還能學習到很多新事物,讓工作變得超有趣。



留言
avatar-img
ITT Fun
0會員
15內容數
主要內容會教大家如何快速有效轉職到中大型公司內部系統的軟體工程師。 程式真的沒有很困難,不論之前覺得學習太枯燥乏味或是其他因素而放棄或從未開始,這邊會帶給大家不同的體驗。 我們會用實際案例來當作教學主軸,用我親身的經歷讓大家快樂學習程式,過程中可以累積很多程式作品還會提升很多成就感,同時還能增加成功轉職的機會!
ITT Fun的其他內容
2026/04/14
在資料處理中,C# PDF 解析是一個常見需求,例如擷取文件內容或整理資料。本篇將使用 PdfPig 套件,帶你完成 PDF 內容擷取的完整教學,讓你快速掌握文件自動化處理技巧。
Thumbnail
2026/04/14
在資料處理中,C# PDF 解析是一個常見需求,例如擷取文件內容或整理資料。本篇將使用 PdfPig 套件,帶你完成 PDF 內容擷取的完整教學,讓你快速掌握文件自動化處理技巧。
Thumbnail
2026/04/09
在了解基本操作後,本篇將進一步解析 C# Outlook 自動化範例,詳細說明郵件讀取的程式碼與邏輯流程,讓你可以依需求修改與擴充,打造屬於自己的 Email 自動化工具。 https://vocus.cc/article/69250a02fd89780001bff712
Thumbnail
2026/04/09
在了解基本操作後,本篇將進一步解析 C# Outlook 自動化範例,詳細說明郵件讀取的程式碼與邏輯流程,讓你可以依需求修改與擴充,打造屬於自己的 Email 自動化工具。 https://vocus.cc/article/69250a02fd89780001bff712
Thumbnail
2026/04/07
使用 C# 讀取 Outlook 郵件,可以實現許多自動化流程,例如自動下載附件或整理信件。本篇將帶你完成 Outlook 郵件讀取教學,並實作 Email 自動化流程,讓你減少重複性工作,提高工作效率。
Thumbnail
2026/04/07
使用 C# 讀取 Outlook 郵件,可以實現許多自動化流程,例如自動下載附件或整理信件。本篇將帶你完成 Outlook 郵件讀取教學,並實作 Email 自動化流程,讓你減少重複性工作,提高工作效率。
Thumbnail
看更多
你可能也想看
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
若說易卜生的《玩偶之家》為 19 世紀的女性,開啟了一扇離家的窄門,那麼《海妲.蓋柏樂》展現的便是門後的窒息世界。本篇文章由劇場演員 Amily 執筆,同為熟稔文本的演員,亦是深刻體察制度縫隙的當代女性,此文所看見的不僅僅是崩壞前夕的最後發聲,更是女人被迫置於冷酷的制度之下,步步陷入無以言說的困境。
Thumbnail
網路上提到自學程式的文章,都會說自學程式非常地辛苦,而且要很自律,決心夠強;而當自己踏上這條路後,才發現何止是辛苦,根本是佈滿荊棘,常常寸步難行,且被刺地遍體鱗傷(喂~是不是有點太浮誇了),但在每個寫出程式豁然開朗的當下,卻又成就感滿滿,所以想藉著寫部落格紀錄一下自己的學習過程!
Thumbnail
網路上提到自學程式的文章,都會說自學程式非常地辛苦,而且要很自律,決心夠強;而當自己踏上這條路後,才發現何止是辛苦,根本是佈滿荊棘,常常寸步難行,且被刺地遍體鱗傷(喂~是不是有點太浮誇了),但在每個寫出程式豁然開朗的當下,卻又成就感滿滿,所以想藉著寫部落格紀錄一下自己的學習過程!
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
全新版本的《三便士歌劇》如何不落入「復刻經典」的巢臼,反而利用華麗的秀場視覺,引導觀眾在晚期資本主義的消費愉悅之中,而能驚覺「批判」本身亦可能被收編——而當絞繩升起,這場關於如何生存的黑色遊戲,又將帶領新時代的我們走向何種後現代的自我解構?
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
長期以來,西方美學以《維特魯威人》式的幾何比例定義「完美身體」,這種視覺標準無形中成為殖民擴張與種族分類的暴力工具。本文透過分析奈及利亞編舞家庫德斯.奧尼奎庫的舞作《轉轉生》,探討當代非洲舞蹈如何跳脫「標本式」的文化觀看。
Thumbnail
前言:重新定義「被取代」的真正意涵 當我們談論 AI 將在 2030 年「取代」軟體工程師時,這個論述往往過於簡化了一個複雜的轉型過程。真正的問題不是 AI 是否會取代程式設計師,而是哪些工程師會被淘汰,哪些會成為下一代的技術領導者。 歷史告訴我們,每一次技術革命都會重新定義職業的本質,而非簡單
Thumbnail
前言:重新定義「被取代」的真正意涵 當我們談論 AI 將在 2030 年「取代」軟體工程師時,這個論述往往過於簡化了一個複雜的轉型過程。真正的問題不是 AI 是否會取代程式設計師,而是哪些工程師會被淘汰,哪些會成為下一代的技術領導者。 歷史告訴我們,每一次技術革命都會重新定義職業的本質,而非簡單
Thumbnail
曾經因為工作上的衝突,體驗到被甲方的語言攻擊與情緒勒索的不適,引發我思索如何改變現況。朋友的建議點燃了我嘗試轉職的火苗:成為具有專業技能且不受他人左右的自己。由於在資訊服務產業從事PM工作,自然聯想到專注於程式碼的工程師,他們在工作上相對具有專業技能,更不受甲方干擾。
Thumbnail
曾經因為工作上的衝突,體驗到被甲方的語言攻擊與情緒勒索的不適,引發我思索如何改變現況。朋友的建議點燃了我嘗試轉職的火苗:成為具有專業技能且不受他人左右的自己。由於在資訊服務產業從事PM工作,自然聯想到專注於程式碼的工程師,他們在工作上相對具有專業技能,更不受甲方干擾。
Thumbnail
要轉換到另一個領域,需要投入相當的時間,一旦準備的時間拉得越長,轉職要面臨的壓力也就可能隨之增加。 這次就將 Podcast 先前邀請到多位軟體工程師分享的轉職經驗彙整成整理包,讓大家可以更快找到自己需要的轉職資訊,把更多時間留在提升專業技能上!
Thumbnail
要轉換到另一個領域,需要投入相當的時間,一旦準備的時間拉得越長,轉職要面臨的壓力也就可能隨之增加。 這次就將 Podcast 先前邀請到多位軟體工程師分享的轉職經驗彙整成整理包,讓大家可以更快找到自己需要的轉職資訊,把更多時間留在提升專業技能上!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News