##### Giới thiệu

PDFEX giúp bóc tách và số hóa hồ sơ lưu trữ từ file PDF scan nhiều văn bản. Ứng dụng dùng OCR (Tesseract) để đọc nội dung, tự nhận diện ranh giới từng văn bản (theo quốc hiệu, số hiệu…), tách thành file PDF riêng và xuất bảng kê kèm báo cáo JSON/HTML.

PDF đầu vào nên là bản scan thẳng, đủ sáng; mỗi văn bản mới thường bắt đầu bằng quốc hiệu hoặc dòng số hiệu.

##### Quy trình nhanh

1. Điền Mã đơn vị và các thông tin cấu hình (Phông, Phiên bản, Ngày scan…).
2. Chọn Loại văn bản phù hợp hoặc để Tự nhận diện.
3. Kéo thả file PDF vào vùng upload hoặc bấm Chọn file.
4. Bấm Phân tích — chờ OCR và tách PDF (theo dõi thanh tiến trình).
5. Xem bảng kết quả, bấm ZIP để tải hoặc Thư mục để mở nơi lưu file.

##### Cấu hình

Mục | Mô tả | Ví dụ
--- | --- | ---
Mã đơn vị | Tiền tố đặt tên file PDF đầu ra; tự điền khi chọn loại văn bản. | `H38.141`
Loại văn bản | Quy tắc nhận diện số hiệu, loại VB. Tự nhận diện phù hợp hồ sơ hỗn hợp. | QĐ, TTr, CV…
Phông | Số phông 6 chữ số (tùy chọn), định dạng giống số thứ tự tài liệu; nằm giữa mã đơn vị và phiên bản. | `000068`
Phiên bản | Phiên bản bóc tách / lần số hóa. | `v1`
Ngày scan | Ngày scan hồ sơ, định dạng `yyyymmdd`. | `20260607`
DPI | Độ phân giải khi chuyển PDF → ảnh để OCR. 200 là cân bằng tốc độ/chất lượng; 300 cho scan mờ. | 150 / 200 / 300
OCR | Ngôn ngữ nhận dạng: Tiếng Việt hoặc English. | Việt Nam
Luồng | Số luồng OCR song song (1–4). Tăng nhanh hơn nhưng tốn RAM/CPU. | 2

Tên file xuất ra theo mẫu `MãĐV_Loạivănbản_Phông_PhiênBản_NgàyScan_STT.pdf` (ví dụ có phông: `H38.141_QĐ_000068_v1_20260607_000001.pdf`; bỏ trống phông: `H38.141_QĐ_v1_20260607_000001.pdf`). `STT` (ví dụ `000001`) là số thứ tự tài liệu trong hồ sơ — 6 chữ số, phần mềm tự đánh theo thứ tự văn bản tách được.

##### Giao diện chính

- Cấu hình (cột trái): form upload và nút Phân tích.
- Lịch sử: danh sách các lần xử lý trước; bấm một dòng để xem lại kết quả.
- Kết quả: bảng STT, tên file, trang, loại VB, số hiệu, trích yếu, ngày ban hành.
- Thanh tiến trình: hiện khi đang OCR/tách; có thể Hủy giữa chừng.

##### Kết quả & tải file

Sau khi hoàn tất, trong thư mục kết quả có:

- Các file PDF đã tách (mỗi văn bản một file).
- report.json và report.html — bảng kê chi tiết, mở HTML offline được.

Trên giao diện:

- ZIP — nén toàn bộ thư mục kết quả (trên desktop sẽ hỏi nơi lưu).
- Thư mục — mở thư mục chứa file trên máy.
- Xóa — xóa công việc và dữ liệu liên quan khỏi lịch sử.

##### Loại văn bản

Bấm Loại VB trên thanh menu để xem danh sách profile nhận diện (mã, nhãn, tiền tố mặc định, mẫu số hiệu…). Chọn đúng loại giúp OCR nhận số hiệu và phân đoạn chính xác hơn.

Mở danh sách loại văn bản

##### License & dùng thử

- Dùng thử: xử lý giới hạn số trang đầu mỗi PDF; thời hạn thử hiển thị trên thanh cảnh báo.
- Mua key trực tuyến: mở modal Giới thiệu hoặc truy cập PayShop — chọn PDFEX, nhập mã máy, thanh toán VietQR và nhận key tự động.
- Kích hoạt: bấm biểu tượng chìa khóa → dán License key (hoặc sao chép Mã máy khi mua thủ công).
- Giới thiệu (biểu tượng ): phiên bản, hướng dẫn mua bản quyền, QR chuyển khoản thủ công.

License gắn với một máy. Hết hạn hoặc key không hợp lệ sẽ không phân tích được PDF mới.

##### Poppler & Tesseract — thư viện OCR bắt buộc

PDFEX cần hai phần mềm bên ngoài (không nằm trong Python) để đọc PDF scan. Nếu thiếu hoặc cấu hình sai, phân tích vẫn chạy nhưng OCR trống — số hiệu, trích yếu rỗng, chỉ tách được 1 file lớn.

Thư viện | Vai trò | File cần có
--- | --- | ---
Poppler | Chuyển từng trang PDF thành ảnh để OCR. | `pdftoppm.exe`
Tesseract OCR | Nhận dạng chữ trên ảnh (Tiếng Việt / English). | `tesseract.exe` + `tessdata\vie.traineddata`, `eng.traineddata`

###### Bản đã có sẵn `tools\` (khuyến nghị)

Nếu bạn nhận bản zip đầy đủ, cạnh `PDFEX.exe` có thư mục:

    PDFEX\
      PDFEX.exe
      tools\
        poppler\Library\bin\pdftoppm.exe
        tesseract\tesseract.exe
        tesseract\tessdata\vie.traineddata

Giữ nguyên cấu trúc thư mục — không chỉ copy mỗi file `.exe`. Không cần cài Poppler/Tesseract riêng trên Windows.

###### Tự cài khi bản phân phối không có `tools\`

Poppler

1. Tải bản Windows: poppler-windows releases.
2. Giải nén vào `C:\poppler` (hoặc thư mục khác).
3. Kiểm tra có file `C:\poppler\Library\bin\pdftoppm.exe`.

Tesseract

1. Tải installer: UB Mannheim Tesseract.
2. Cài vào `C:\Program Files\Tesseract-OCR`.
3. Trong bước chọn ngôn ngữ, tick thêm Vietnamese và English.
4. Sau khi cài, kiểm tra có: `C:\Program Files\Tesseract-OCR\tessdata\vie.traineddata` và `eng.traineddata`.

###### Chỉ định đường dẫn thủ công (tùy chọn)

Khi cài ở ổ/ thư mục khác mặc định, tạo biến môi trường Windows (hoặc chạy lệnh trước khi mở PDFEX):

    set PDFEX_POPPLER_PATH=D:\tools\poppler\Library\bin
    set PDFEX_TESSERACT_CMD=D:\tools\tesseract\tesseract.exe

Tesseract 5.x: nếu log báo `Failed loading language` / `TESSDATA_PREFIX`, đặt thêm (trỏ thẳng vào thư mục tessdata, không phải thư mục cha):

    set TESSDATA_PREFIX=C:\Program Files\Tesseract-OCR\tessdata

Kiểm tra nhanh: mở Command Prompt, gõ `"C:\Program Files\Tesseract-OCR\tesseract.exe" --list-langs` — phải thấy `vie` và `eng` trong danh sách. Khởi động lại PDFEX sau khi cài hoặc đổi biến môi trường.

##### Xử lý sự cố thường gặp

Triệu chứng | Gợi ý xử lý
--- | ---
OCR chậm hoặc treo | Giảm DPI hoặc số luồng; đóng ứng dụng khác; PDF quá lớn nên chia nhỏ.
Tách sai / thiếu văn bản | Thử loại VB cụ thể thay vì Tự nhận diện; tăng DPI lên 300; kiểm tra chất lượng scan.
Số hiệu / trích yếu trống; log OCR trống N trang | Xem mục Poppler & Tesseract: cài đủ thư viện, có `vie.traineddata`, đặt `TESSDATA_PREFIX` nếu cần.
Log `Failed loading language` / `TESSDATA_PREFIX` | Cài lại Tesseract và chọn ngôn ngữ Vietnamese; hoặc `TESSDATA_PREFIX=...\Tesseract-OCR\tessdata` (thư mục `tessdata`, không phải thư mục cha).
Log `Lỗi Poppler` / không render được trang | Cài Poppler hoặc bổ sung `tools\poppler\`; đặt `PDFEX_POPPLER_PATH` trỏ tới thư mục chứa `pdftoppm.exe`.
Lỗi khi phân tích PDF | Kiểm tra thư mục `tools\` cạnh EXE; xem Poppler & Tesseract; khởi động lại ứng dụng.
License hết hạn / không kích hoạt được key | Bấm biểu tượng chìa khóa → dán key mới (không dán lại key cũ). Key phải đúng mã máy hiển thị trong app.
App không mở; lỗi `Python.Runtime` hoặc `Could not load file or assembly` / `0x80131515` | Windows chặn file tải từ mạng (zip qua Zalo/Downloads). Giải nén đủ thư mục `PDFEX\`. Trước giải nén: zip → Thuộc tính → Unblock. Hoặc chạy `unblock_portable.bat` trong thư mục PDFEX rồi mở lại.
Cửa sổ trắng | Cài WebView2 Runtime.

Chi tiết kỹ thuật dành cho người build/cài đặt: file `CAIDAT.md` trong gói nguồn.