把文件變成可核對資料的 PDF OCR
用 space-ocr 從 PDF 頁面擷取結構化資料:宣告你需要的欄位,每個值都連同 data.cells 裡的來源座標回傳,需要複核的路徑列在 data.review.flagged。
PDF 是資料藏身的地方。一張發票、一疊收據、一張送貨單——數字明明就在頁面上,但要進到試算表裡通常意味著重新輸入。PDF OCR 承諾解決這件事:讀文件,回傳結構化欄位。問題是,大多數工具止步於一個看似合理的猜測,剩下的就要你自己去信。
space-ocr 回答的是一個更嚴格的問題。你宣告需要的欄位,每個值都連同它被讀取的頁面區域——data.cells 裡的 box 與 quad——一起回傳,沒有通過核對的路徑則列在 data.review.flagged。你拿到的不是一個需要解讀的分數,而是一份待辦清單。
看一次你可以親自核對的真實擷取
把滑鼠移到下方任一欄位上——收據上的框就是這個值被讀取的位置。這裡的每個值、框與比對率,都直接讀自一次真實的解析結果,而不是擺拍。

Each value with a box carries a verified on-page location — in data.cells[path], that is box + 4-point quad + evidence.match_ratio — on a 0–1000 normalized grid (0,0 top-left → 1000,1000 bottom-right), the same shape the live API returns. Hover a field to trace it back to the pixels it came from.
space-ocr 裡的 PDF OCR 如何運作
把 PDF 拖進應用程式,每一頁都會在瀏覽器裡被算繪成 PNG,再被讀取並轉成結構化欄位——一份多頁 PDF 會變成一組可以排序、篩選、匯出的列。
公開 API 更嚴格:它只讀點陣圖像,不讀 PDF 位元組。POST /upload 會直接拒絕 PDF,並提示先把頁面算繪成圖片。呼叫 API 時請自行點陣化,再傳送頁面圖片。兩條路徑都是一頁一點數。
一次 /ocr/fields 呼叫回傳的內容如下:
data.values— 完全按你宣告的 schema 組織的業務資料。data.cells[path]— 該路徑的box、quad、verified、review與evidence。data.review—declared、returned、boxed、verified,以及作為待辦清單的flagged。data.normalized— 宣告了number、integer、date的欄位的解析結果。data.image— 所有座標所依據的寬與高。
verified 是判定而不是字元比對結果:儲存格帶有複核理由時為 false,比對跑過且沒有理由時為 true,沒有可比對的對象時為 null。字元比對本身在 evidence.text_match,evidence.match_ratio 作為旁證列在它旁邊。
# API 讀的是圖片而不是 PDF 位元組 —— 先把頁面算繪成圖片
pdftoppm -r 200 -jpeg invoice.pdf page
curl -s https://api.space-ocr.com/ocr/fields \
-H "Authorization: Bearer $SPACE_OCR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"image": "https://example.com/page-1.jpg",
"imageType": "url",
"fields": [
{ "name": "invoice_no", "type": "string", "required": true },
{ "name": "issue_date", "type": "date", "required": true },
{ "name": "total", "type": "number", "required": true, "min": 0 },
{ "name": "items", "type": "array", "children": [
{ "name": "description", "type": "string" },
{ "name": "quantity", "type": "number" },
{ "name": "amount", "type": "number" }
] }
]
}'如何對 PDF 做 OCR
- 把頁面算繪成圖片在應用程式中拖入 PDF,每一頁會在瀏覽器裡被算繪成 PNG。直接呼叫 API 時,請自行算繪頁面,以 url 或 base64 傳送到 POST /ocr/fields,或用 POST /upload 把圖片傳入工作表。
- 宣告你的欄位列出需要的 fields:name 與 type,需要時再加 required、pattern、min/max、enum、label 或 near。明細列表格用帶 children 的 array 欄位;版式陌生時可傳 autoFields: true 取得一份欄位方案。
- 讀取結構化結果業務資料按你的 schema 放在 data.values,每個路徑的 box、quad、verified、review、evidence 放在 data.cells[path],宣告了 number、integer、date 的欄位的解析值放在 data.normalized。
- 處理 review.flagged走訪 data.review.flagged。每一項是一個 path 與一個按優先順序排序的 reasons 陣列,第 0 項是主要理由。打開 data.cells[path],以 data.image 為基準畫出它的 box 或 quad,在來源區域旁邊修正這個值。
- 匯出或查詢下載 CSV(UTF-8 BOM,明細列已展開),或用 GET /view 搭配 where、sort、select、boxes 查詢已儲存的工作表——該讀取免費,也不會重跑 OCR。
簡單、可預期的定價
一點數處理一頁,$0.05(含稅)。每個帳號每月有 100 點數的免費額度,免信用卡,失敗的掃描不計費。方案計畫增加每月點數、更多工作表與儲存空間。