thai-bank-statement-pdf-reader
v1.0.24
Published
Extract data from Thai bank statement PDFs and convert it to JSON.
Downloads
160
Readme
thai-bank-statement-pdf-reader
Extract transaction data from Thai bank statement PDFs and convert it to structured JSON.
Supported Banks
| Bank | Method |
|------|--------|
| SCB (ไทยพาณิชย์) | .scb() |
| KTB (กรุงไทย) | .ktb() |
| KTB Corporation (กรุงไทย นิติบุคคล) | .ktbCorporation() |
| KSME (กสิกร SME) | .ksme() |
Installation
npm install thai-bank-statement-pdf-readerUsage
import BankStatementReader from "thai-bank-statement-pdf-reader"
import fs from "fs"
const reader = new BankStatementReader()
// Read PDF file as Buffer
const buffer = fs.readFileSync("statement.pdf")
// Parse SCB statement
const { data, PDFBuffer } = await reader.scb(buffer)
console.log(data)
// Save annotated PDF (optional, useful for debugging column layout)
fs.writeFileSync("output.pdf", PDFBuffer)With password-protected PDF
const { data, PDFBuffer } = await reader.ktb(buffer, { password: "your-password" })Return Value
Each method returns an object with:
| Field | Type | Description |
|-------|------|-------------|
| data | Statement[] | Array of parsed transactions |
| PDFBuffer | Buffer | Annotated PDF with column layout highlighted (for debugging) |
Statement Object
interface Statement {
lineNumber: number // Row number in the statement
datetime: string // Format: "YYYY-MM-DD HH:mm:ss"
amount: number // Positive = deposit, Negative = withdrawal
balance: number // Remaining balance after transaction
description: string // Transaction description
}Example Output
[
{
"lineNumber": 1,
"datetime": "2024-01-15 09:30:00",
"amount": -500.00,
"balance": 10000.00,
"description": "โอนเงิน | ค่าอาหาร | สาขา สีลม"
},
{
"lineNumber": 2,
"datetime": "2024-01-15 14:20:00",
"amount": 5000.00,
"balance": 15000.00,
"description": "รับโอน | เงินเดือน | สาขา อโศก"
}
]API
class BankStatementReader {
scb(buffer: Buffer, options?: ReaderOptions): Promise<{ data: Statement[], PDFBuffer: Buffer }>
ktb(buffer: Buffer, options?: ReaderOptions): Promise<{ data: Statement[], PDFBuffer: Buffer }>
ksme(buffer: Buffer, options?: ReaderOptions): Promise<{ data: Statement[], PDFBuffer: Buffer }>
ktbCorporation(buffer: Buffer, options?: ReaderOptions): Promise<{ data: Statement[], PDFBuffer: Buffer }>
}
interface ReaderOptions {
password?: string
}