需求說明
解析指定的 PDF 檔案(格式25發票01.pdf)中以下資訊 :
- 發票號碼
- 買受人
- 買受人統一編號
- 賣方
- 賣方統一編號
且此 PDF 有多頁發票,需一併解析出來成為一 TXT 文字檔案,文字檔內容格式如下 :
頁數 : 1
發票號碼 :
買受人 :
買受人統一編號 :
賣方 :
賣方統一編號 :頁數 : 2
發票號碼 :
買受人 :
…
需要檔案
- 格式25發票01.pdf
技能設計
1. 流程規劃
- PDF 表單分析
2. 流程細節
2.1 使用 PDF 表單分析模組,並選擇相關檔案
選擇 PDF 表單分析
使用 PICK 選擇 格式25發票01.pdf,並點選 VIEW 查看預覽畫面,確認 PDF 文件有讀取進來
2.2 程式碼撰寫
2.2.1 總頁數
因需要解析多張發票於同一份 PDF 文件中,所以利用以下程式碼先找出此文件共有幾頁 :
//總頁數
let totalPages = input.totalPages
//根據總頁數 for loop
for(let i = 1; i<=totalPages; i++){
//解析每一頁的程式碼放在此 loop 中
}
接著再利用此變數做 for loop 來一頁一頁解析
2.2.2 解析資訊
操作 VIEWER 來自動產生程式碼
將滑鼠移至 Anchor 文字物件,按住 Shift 後再按下頁解析的方向(右)
發票號碼
將程式碼貼至 TRAIN 區域,並修改變數名稱obj → invoice_num與解析範圍 page :1 → page:i
//總頁數
let totalPages = input.totalPages
//解析每一頁
for(let i = 1; i<=totalPages; i++){
//發票號碼
let invoice_num = input.resolve( {"keyName":"發票號碼:","keyBounds":{"page":i}, "valPos":"RIGHT"})
}
重複操作以上步驟來解析所需資訊
買受人
買受人統一編號
賣方
賣方統一編號
利用 CodeGen 功能產生的程式碼,修改後如下 :
//總頁數
let totalPages = input.totalPages
//解析每一頁
for(let i = 1; i<=totalPages; i++){
//發票號碼
let invoice_num = input.resolve( {"keyName":"發票號碼:","keyBounds":{"page":i}, "valPos":"RIGHT"})
//買受人
let buyer = input.resolve( {"keyName":"人:","keyBounds":{"page":i}, "valPos":"RIGHT"})
//買受人統一編號
let buyerTaxID = input.resolve( {"keyName":"統一編號:","keyBounds":{"page":i}, "valPos":"RIGHT"})
//賣方
let seller = input.resolve( {"keyName":"賣","keyBounds":{"page":i}, "valPos":"RIGHT"})
//賣方統一編號
let sellerTaxID = input.resolve( {"keyName":"賣","keyBounds":{"page":i}, "valPos":"DOWN"})
}
接著有些文字物件因為斷字關係包含了不需要的資訊,需要利用字串處理來去除
- 賣方要去除 方:
//將字串中的 方: 取代為空字串
let resultText = originalText.replaceAll("方:", "")
- 賣方統一編號要去除 統一編號:
//將字串中的 統一編號: 取代為空字串
let resultText = originalText.replaceAll("統一編號:", "")
最後參考程式碼如下 :
//總頁數
let totalPages = input.totalPages
//宣告輸出的結果
output['發票資訊'] = ""
//解析每一頁
for(let i = 1; i<=totalPages; i++){
//發票號碼
let invoice_num = input.resolve( {"keyName":"發票號碼:","keyBounds":{"page":i}, "valPos":"RIGHT"})
//買受人
let buyer = input.resolve( {"keyName":"人:","keyBounds":{"page":i}, "valPos":"RIGHT"})
//買受人統一編號
let buyerTaxID = input.resolve( {"keyName":"統一編號:","keyBounds":{"page":i}, "valPos":"RIGHT"})
//賣方
let seller = input.resolve( {"keyName":"賣","keyBounds":{"page":i}, "valPos":"RIGHT"})
//賣方統一編號
let sellerTaxID = input.resolve( {"keyName":"賣","keyBounds":{"page":i}, "valPos":"DOWN"})
//輸出頁數
output['發票資訊'] += `頁數 : ${i}\n`
//輸出發票號碼
output['發票資訊'] += `發票號碼 : ${invoice_num.text}\n`
//輸出買受人
output['發票資訊'] += `買受人 : ${buyer.text}\n`
//輸出買受人統一編號
output['發票資訊'] += `買受人統一編號 : ${buyerTaxID.text}\n`
//輸出賣方,且去除多餘字串
let sellerText = seller.text.replaceAll('方:', "")
output['發票資訊'] += `賣方 : ${sellerText}\n`
//輸出賣方統一編號,且去除多餘字串
let sellerTaxIDText = sellerTaxID.text.replaceAll('統一編號:', "")
output['發票資訊'] += `賣方統一編號 : ${sellerTaxIDText}\n`
}