Files
FoFreeXit/docs/03-roadmap.md
T
adminandClaude Fable 5 8d9076f60c Phase 5 Iteration 1: Bảo mật — mã hoá + quyền hạn, gỡ mật khẩu, redaction THẬT, xoá metadata
Engine:
- qpdf.rs: Permissions (in/sửa/copy/chú thích) map sang cờ AES-256 của qpdf;
  encrypt_with_password_perms (API cũ giữ tương thích); decrypt_remove_password
  (--password --decrypt, sai mật khẩu trả lỗi không ghi file rác)
- redact.rs MỚI — redaction thật, nghiêng về xoá thừa (an toàn):
  text/path/shading/form giao vùng → xoá nguyên object; ảnh giao vùng → đọc
  pixel gốc qua get_raw_image, BÔI ĐEN đúng phần giao trong dữ liệu ảnh rồi
  thay ảnh (không đọc được → xoá cả ảnh); vẽ khối đen phủ vùng
- meta.rs: strip_metadata — xoá /Info trailer + XMP /Metadata catalog, xoá cả
  tham chiếu lẫn object đích (lopdf; file trailer phi chuẩn qua qpdf trước)

Tauri + UI (thanh 🔒 Bảo mật):
- Commands: redact_apply (nhiều trang, chain file tạm), security_encrypt,
  security_decrypt, security_strip_metadata
- Redact 2 bước như Foxit: tool quét vùng (khối đen mờ viền đỏ, bấm để bỏ,
  giữ tool quét nhiều vùng) → Áp dụng (n) → lưu file mới
- Dialog Đặt mật khẩu (user/confirm/owner + 4 checkbox quyền), Gỡ mật khẩu,
  Xoá metadata — modal chuyên nghiệp, không prompt/alert

Test (6 mới, tổng 58/58 ngoài qpdf-fixture):
- redact: chuỗi mật biến mất khỏi extract + tâm vùng render đen; đọc lại RAW
  image từ file kết quả — nửa redact đen trong chính dữ liệu ảnh
- encrypt+perms round-trip + qpdf --show-encryption xác nhận cấm in;
  decrypt gỡ mật khẩu, mật khẩu sai fail; metadata biến mất khỏi BYTES file
- qpdf_safety: 5/7 xanh trên Linux; 2 test repair fixture corrupt-truncated
  fail do khác biệt qpdf 11.9 Linux (bản Windows dự án xử lý được) — ghi chú
  trong docs/15, cần xác nhận lại trên máy Windows

Docs: 15-phase5-summary (kèm kế hoạch Iteration 2: chữ ký số PAdES, lưu tối
ưu, redact tỉa ký tự), 16-phase5-user-tests (S1–S12), README, roadmap, 14.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HgnbPwSoRGNH7LHsDUmRpk
2026-07-15 08:26:20 +00:00

7.1 KiB
Raw Blame History

03 — Lộ trình dự án (Roadmap)

Mục tiêu tổng (North Star)

Một ứng dụng desktop có thể xem, chú thích, tổ chức trang, và chỉnh sửa text/ảnh trực tiếp trên PDF, kèm bảo mật cơ bản — đủ để một người dùng Foxit phổ thông bỏ Foxit cho công việc hằng ngày.

Phương pháp làm việc

  • Engine-first, UI-second trong mỗi tính năng: làm được ở tầng core + test CLI trước, rồi mới gắn UI.
  • Mỗi phase kết thúc bằng bản chạy được (demo) + test tự động + cập nhật docs.
  • Bộ PDF mẫu (test corpus) tích luỹ dần: file thường, file scan, file mã hoá, file hỏng, CJK/Việt/RTL, form, file nghìn trang.
  • Quy ước: nhánh/commit theo phase; mỗi tính năng có "DoD" (Definition of Done) checklist.
  • Không chuyển phase khi DoD chưa đạt và test chưa xanh.

Phase 0 — Nghiên cứu & Kế hoạch ✅ HOÀN TẤT

DoD: docs 01–03 hoàn tất; chốt ngôn ngữ/framework; dựng skeleton repo.

Phase 1 — Nền tảng & Viewer (MVP xem được) ✅ HOÀN TẤT

Mục tiêu: Mở và hiển thị PDF chính xác, mượt.

  • Tích hợp PDFium (prebuilt) qua FFI; dựng Core API tối thiểu (open, pageCount, renderPage).
  • Viewer: scroll liên tục, zoom/fit, thumbnails, outline/bookmarks, tìm kiếm text, chọn & copy text.
  • Mở file lớn (lazy render + cache tile). DoD: mở 20 file mẫu (gồm file 1000+ trang, CJK, Việt) không crash; render khớp mắt thường với Chrome; search & copy hoạt động; có test render-hash cho trang mẫu.

Phase 2 — Chú thích (Annotate) ✅ HOÀN TẤT (lõi) — xem docs/08-phase2-summary.md

Mục tiêu: Bộ comment dùng hằng ngày.

  • Highlight/underline/strikethrough, sticky note, text box, free draw, shapes, stamp.
  • Lưu annotation vào PDF (annotation dict), import/export XFDF.
  • Hiển thị & sửa/xoá annotation; danh sách comment ở sidebar. DoD: tạo/sửa/xoá mọi loại trên; lưu & mở lại giữ nguyên; Acrobat/Foxit đọc được annotation ta ghi; export/import XFDF round-trip.

Phase 3 — Tổ chức trang (Organize) + Lưu file vững ✅ HOÀN TẤT (lõi, 36/36 test) — xem docs/10-phase3-summary.md

Mục tiêu: Quản lý trang & ghi file an toàn.

  • Chèn/xoá/xoay/trích/thay/đảo trang; merge & split; crop; đánh số; header/footer; watermark/background.
  • Engine ghi file: incremental update và full rewrite (qua QPDF); giữ không hỏng file; undo/redo toàn cục. DoD: mọi thao tác trang round-trip đúng; merge 50 file OK; ghi không làm hỏng file mã hoá; undo/redo ổn định; test so khớp cấu trúc trang.

Phase 4 — ⭐ Chỉnh sửa nội dung (Edit) — TÍNH NĂNG LÕI ✅ Iteration 1 HOÀN TẤT (43/43 test) — xem docs/12-phase4-summary.md

Mục tiêu: Sửa text & object trực tiếp — moat chính.

  • Page Object Model: parse content stream → cây object (text/path/image/xobject).
  • Sửa ảnh/object: di chuyển, resize, xoá, thêm ảnh (dễ hơn → làm trước).
  • Sửa text: gom glyph → text run/line/paragraph (heuristic theo baseline & spacing); edit inline; đo lại width theo font (FreeType/HarfBuzz); reflow trong text box; xử lý font nhúng/subset + font substitution; hỗ trợ tiếng Việt (tổ hợp dấu) sớm, CJK/RTL sau.
  • Thêm text box mới, đổi font/size/màu. DoD: sửa được text 1 dòng & 1 đoạn trên ≥80% file mẫu thường; thêm/xoá/di chuyển ảnh; lưu mở lại đúng; tiếng Việt hiển thị & sửa đúng dấu; có test corpus chuyên cho edit.

Phase 5 — Bảo mật & Chữ ký ✅ Iteration 1 HOÀN TẤT (mã hoá+quyền, gỡ mật khẩu, redaction thật, xoá metadata — xem docs/15-phase5-summary.md) · Iteration 2: chữ ký số

Mục tiêu: Tính năng đáng tiền cho doanh nghiệp.

  • Mật khẩu mở/permission; mã hoá AES-256; xoá mật khẩu.
  • Redaction thật (xoá nội dung + ảnh + metadata, không chỉ vẽ đè) + kiểm chứng đã xoá.
  • Xoá metadata/ẩn; chữ ký số (PAdES, byte range, incremental update giữ chữ ký). DoD: mã hoá/giải mã round-trip; redaction qua kiểm chứng không còn text bị bôi; ký số được Acrobat xác thực hợp lệ.

Phase 6 — Form (AcroForm)

Mục tiêu: Điền & tạo form.

  • Điền form có sẵn, lưu; flatten form.
  • Tạo field: text/checkbox/radio/dropdown/button; import/export dữ liệu (FDF/CSV). DoD: điền & lưu giữ dữ liệu; tạo form mới mở được ở Acrobat; export/import round-trip.

Phase 7 — OCR & Convert

Mục tiêu: Hai tính năng "đáng tiền" còn lại, qua dự án mở.

  • OCR: Tesseract + tiền xử lý ảnh + layout → tạo searchable PDF (lớp text vô hình khớp toạ độ). Đa ngôn ngữ gồm tiếng Việt.
  • Convert: PDF→ảnh (sẵn từ PDFium); Office↔PDF qua LibreOffice headless; PDF→Word/Excel (giữ layout — bài toán khó, làm bản "đủ dùng" trước). DoD: OCR scan tạo PDF search được (Việt + Anh); convert Office↔PDF ổn; PDF→Word giữ được text & bố cục cơ bản.

Phase 8 — Hoàn thiện & Phát hành

  • So sánh 2 PDF (compare); in ấn đúng; preferences; đa ngôn ngữ UI (Việt/Anh); accessibility.
  • Installer (Windows MSI/winget; sau đó mac/Linux); auto-update; crash reporting.
  • Tối ưu hiệu năng & bộ nhớ; hardening bảo mật (fuzzing parser). DoD: cài đặt sạch trên máy mới; vượt bộ test hồi quy đầy đủ; tài liệu người dùng.

Phase 9 (tuỳ chọn) — AI

  • Tóm tắt, hỏi-đáp tài liệu, dịch (dùng Claude API / model cục bộ). Làm sau cùng vì không phải lý do chính thay thế Foxit.

Thứ tự ưu tiên giá trị (nếu phải cắt giảm)

1→2→3→4 là "core sản phẩm thay Foxit cho cá nhân". 5,6 thêm giá trị doanh nghiệp. 7 ngang hàng giá trị nhưng phụ thuộc dự án ngoài. 8 bắt buộc để phát hành. 9 là bonus.

Rủi ro & giảm thiểu

Rủi ro Giảm thiểu
Edit text quá khó (Phase 4) Làm object/ảnh trước; text bắt đầu từ ca đơn giản; tận dụng PDFium edit API + PDFBox tham khảo
Build/FFI PDFium phức tạp Dùng binary prebuilt + binding có sẵn
Convert PDF→Word kém Hạ kỳ vọng: "đủ dùng" trước; dựa LibreOffice
File lạ làm crash Test corpus file hỏng + fuzzing; chọn ngôn ngữ an toàn bộ nhớ
Phạm vi phình to DoD nghiêm ngặt; không nhảy phase khi chưa xanh

Bộ chỉ số thành công sản phẩm

  • Mở đúng ≥99% file PDF đời thực trong corpus.
  • Người dùng Foxit phổ thông làm được: xem, comment, sắp trang, sửa text/ảnh, đặt mật khẩu — không cần Foxit.
  • Không thua Foxit rõ rệt về tốc độ mở & render.