[流程設計參考] L04 作業 - 格式 25 發票解析

需求說明

解析指定的 PDF 檔案(格式25發票01.pdf)中以下資訊 :

  1. 發票號碼
  2. 買受人
  3. 買受人統一編號
  4. 賣方
  5. 賣方統一編號

且此 PDF 有多頁發票,需一併解析出來成為一 TXT 文字檔案,文字檔內容格式如下 :

頁數 : 1
發票號碼 :
買受人 :
買受人統一編號 :
賣方 :
賣方統一編號 :

頁數 : 2
發票號碼 :
買受人 :

需要檔案

  1. 格式25發票01.pdf

技能設計

1. 流程規劃

  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 後再按下頁解析的方向(右)
image
發票號碼

將程式碼貼至 TRAIN 區域,並修改變數名稱objinvoice_num與解析範圍 page :1page: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"})
}

接著有些文字物件因為斷字關係包含了不需要的資訊,需要利用字串處理來去除

  1. 賣方要去除 方:
//將字串中的 方: 取代為空字串
let resultText = originalText.replaceAll("方:", "")
  1. 賣方統一編號要去除 統一編號:
//將字串中的 統一編號: 取代為空字串
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`
}

輸出結果 :