9.0 KiB
9.0 KiB
FoFreeXit
Mục tiêu dự án: Xây dựng một phần mềm chỉnh sửa PDF trên desktop có thể thay thế Foxit PDF Editor (và một phần Adobe Acrobat) cho các nhu cầu phổ biến — miễn phí / mã nguồn mở.
Dự án được thực hiện qua nhiều session Claude Code. Token và thời gian không phải là ràng buộc. Ưu tiên số 1: tạo ra được một sản phẩm dùng được, thay thế Foxit cho các tác vụ chính.
Tài liệu
| File | Nội dung |
|---|---|
| docs/01-research.md | Khảo sát tính năng Foxit, tính năng "đáng tiền", khó khăn kỹ thuật, thuật toán Foxit/Adobe, khảo sát thư viện PDF |
| docs/02-tech-stack.md | Phân tích & lựa chọn ngôn ngữ / framework / engine |
| docs/03-roadmap.md | Lộ trình theo phase, mục tiêu, phương pháp, định nghĩa hoàn thành (DoD) |
| docs/04-architecture.md | Kiến trúc kỹ thuật chi tiết (sẽ chi tiết hóa dần) |
| docs/14-foxit-gap-analysis.md | Đánh giá định hướng/công nghệ/tiến độ so với tham vọng thay Foxit; các khoảng cách còn lại + giải pháp |
| docs/17-phase6-summary.md | Tổng kết Phase 6 (Form/AcroForm) |
Trạng thái hiện tại
- Phase 0 — Nghiên cứu & lập kế hoạch
- Đã chốt stack: Rust + Tauri (App/UI) trên engine PDFium + QPDF (xem docs/02-tech-stack.md)
- Phase 1 — Engine core + Viewer ✅ HOÀN TẤT (10/10 test xanh)
- Cargo workspace + app Tauri; engine render qua PDFium
- CLI
ff:info/render/pages/text/search/outline - Engine: render,
page_dims,extract_text,search(+toạ độ),outline,page_char_boxes - Viewer: mở file (hộp thoại), cuộn liên tục + lazy render (file 1000+ trang), zoom/Fit, thumbnails, outline, tìm kiếm + highlight, chọn & copy text (text-layer)
- Tổng kết: docs/06-phase1-summary.md · Checklist test cho bạn: docs/07-phase1-user-tests.md
- Phase 2 — Annotate ✅ lõi hoàn tất (13/13 test xanh)
- Engine: 6 loại annotation (Highlight/Underline/Strikeout/Square/FreeText/Note) + lưu file + đọc lại — round-trip test
- UI: thanh công cụ + vẽ bằng chuột + preview + chọn màu + tab Chú thích + lưu qua hộp thoại
- Follow-up: Ink, sửa/di chuyển annotation đã lưu, XFDF — xem docs/08-phase2-summary.md
- Checklist test cho bạn: docs/09-phase2-user-tests.md
- Phase 3 — Organize trang + lưu file vững ✅ lõi hoàn tất (36/36 test xanh)
- Engine: chèn/xoá/xoay/trích/thay/đảo trang, merge/split, crop, watermark, header/footer + đánh số trang
- Lưu file vững: QPDF repair file hỏng + mã hoá lại an toàn (
qpdf.rs) - UI: chế độ "Tổ chức trang" (lưới + kéo-thả + multi-select), undo/redo toàn cục (chú thích + tổ chức trang chung 1 stack), dialog cho mọi thao tác (có xem trước thật cho Watermark/Header-Footer)
- Follow-up: preview thật cho Insert/Extract/Replace/Crop, tách theo outline, watermark ảnh — xem docs/10-phase3-summary.md
- Checklist test cho bạn: docs/11-phase3-user-tests.md
- Phase 4 — Chỉnh sửa nội dung (Edit) ⭐ tính năng lõi/moat ✅ Iteration 1 + 2 + 3 hoàn tất (52/52 test xanh ngoài qpdf)
- Engine
edit.rs: liệt kê object + sửa text run (tiếng Việt), xoá, di chuyển/resize, thêm chữ/ảnh, thay ảnh — round-trip test - UI chế độ "Sửa nội dung": overlay đối tượng, sửa text tại chỗ WYSIWYG, thêm chữ/ảnh, xoá, cỡ chữ/màu, undo/redo, lưu
- Iteration 2 — GIỮ FONT khi sửa (chuẩn Foxit): sửa tại chỗ giữ nguyên font gốc/nhúng (kể cả tiếng Việt); thiếu glyph mới thay font CÙNG HỌ (
fontmatch.rs); đổi cỡ/màu không đụng font (fix bug phóng đại kép); sửa CẢ DÒNG (gộp run); WYSIWYG khi gõ; B/I + đổi font family; kéo-thả live; dọn file tạm - Iteration 3 — Reflow đoạn "như Word": double-click đoạn nhiều dòng → sửa cả đoạn, tự bẻ dòng theo bề rộng khối (đo hmtx bằng ttf-parser), giữ font (nhúng lại bytes gốc / font chuẩn base-14 / cùng họ), giữ nhịp baseline; Enter = ngắt cứng
- Đúp chuột từ viewer thường (chuẩn Foxit): đang xem, đúp vào chữ → tự vào chế độ sửa đúng trang + mở ngay ô sửa tại đoạn đó; đúp vùng trống không làm gì
- Iteration 4 — Sửa text TRONG Form XObject: file gói nội dung vào form được "mở gói" ra cấp trang rồi sửa như thường, có cổng an toàn so render (lệch >0.5% pixel → từ chối + thông điệp rõ, bảo toàn file — file Canva phức tạp rơi vào nhóm này, kế hoạch hỗ trợ đầy đủ ở docs/12); CI chạy
cargo testtrước khi build - Follow-up: reflow v2 (justify, khối xoay, đa font), xoay/lật/clip, viền/opacity/căn lề, convert text→path — xem docs/12-phase4-summary.md
- Checklist test cho bạn: docs/13-phase4-user-tests.md (mới: E17–E30)
- Engine
- Phase 5 — Bảo mật ✅ Iteration 1 + 2 hoàn tất (62/62 test engine xanh)
- Engine: mã hoá AES-256 + quyền hạn (in/sửa/copy/chú thích), gỡ mật khẩu (
qpdf.rs); redaction THẬT (redact.rs: xoá object, bôi đen pixel ảnh trong chính dữ liệu ảnh, tỉa theo ký tự giữ phần ngoài vùng — test kiểm bytes/pixel/extract); xoá metadata /Info + XMP (meta.rs) - Chữ ký số PKCS#7/PAdES (
sign.rs): tạo Digital ID tự ký (RSA-2048), ký (CMS SignedData detached, ByteRange/Contents đúng chuẩn Adobe), xác thực + phát hiện giả mạo; lưu tối ưu (nén + dọn object rác) - UI thanh "🔒 Bảo mật": redact 2 bước như Foxit, Đặt/Gỡ mật khẩu + quyền, Xoá metadata, Tạo Digital ID / Ký số / Kiểm tra chữ ký / Lưu tối ưu
- Về sau: timestamp PAdES-T/LTV, đọc PFX/PKCS#12, multi-sig incremental — xem docs/15-phase5-summary.md mục 6.6
- Checklist test cho bạn: docs/16-phase5-user-tests.md (mới: S13–S19)
- Engine: mã hoá AES-256 + quyền hạn (in/sửa/copy/chú thích), gỡ mật khẩu (
- Phase 6 — Form (AcroForm) ✅ lõi hoàn tất (67/67 test engine xanh)
- Engine
form.rs: liệt kê field (text/checkbox/radio/combo/list), điền (giữ tiếng Việt qua UTF-16BE + NeedAppearances), tạo field mới (text/checkbox/combo), flatten (PDFium), export/import FDF + export CSV — round-trip test - UI thanh "📝 Form": Điền form (modal liệt kê field theo loại), Thêm field, Flatten, Xuất FDF/CSV, Nhập FDF
- Follow-up: radio-group/list/pushbutton khi tạo, XFDF, vẽ appearance riêng, điền overlay trực tiếp trên trang — xem docs/17-phase6-summary.md
- Checklist test cho bạn: docs/18-phase6-user-tests.md
- Engine
- Phase 7 — OCR & Convert ✅ lõi hoàn tất (73/73 test engine xanh)
- Engine
ocr.rs: OCR Tesseract (sidecar, Việt + Anh) → lớp text ẨN khớp toạ độ trên trang gốc (searchable/copy được, ảnh không đổi) — test dựng PDF-scan giả lập thật - Engine
convert.rs: PDF→PNG (theo DPI), PDF→TXT, PDF→DOCX tự viết (dòng thị giác + cỡ chữ, zip tự ghi); Office↔PDF qua LibreOffice headless (tự phát hiện, fallback rõ ràng) - UI thanh "🔁 Chuyển đổi": OCR (chọn ngôn ngữ), Xuất PNG/TXT/Word (tự chọn engine), Office→PDF; báo thiếu công cụ ngoài
- Follow-up: tiền xử lý ảnh scan (deskew), OCR theo vùng, PDF→Excel — xem docs/19-phase7-summary.md
- Checklist test cho bạn: docs/20-phase7-user-tests.md
- Engine
- Phase 8 — Hoàn thiện & Phát hành (kế tiếp) — xem docs/03-roadmap.md
Build & chạy: xem docs/05-dev-setup.md.
Nguyên tắc làm việc qua nhiều session
- Tài liệu là nguồn chân lý. Mọi quyết định kiến trúc phải được ghi vào
docs/. - Mỗi phase có Definition of Done rõ ràng và test kèm theo.
- Không viết lại engine PDF từ con số 0 ở giai đoạn đầu — đứng trên vai người khổng lồ (PDFium/QPDF), tự xây phần "editor" và "UX".
- Ưu tiên giấy phép permissive (BSD/Apache/MIT) để sản phẩm có thể tự do phân phối.