Files
FoFreeXit/docs/13-phase4-user-tests.md
adminandClaude Fable 5 58cba1f415 Sửa 3 lỗi edit inline vòng 2 (file thật Word-export): hết □ thay dấu cách, dòng không vỡ khi thêm ký tự, ô sửa WYSIWYG đúng cỡ từng dòng
Chẩn đoán □: PDFium FPDFText_LoadFont nạp LẠI font subset rồi SetText map
U+0020 ra .notdef (hộp vuông) dù cmap font CÓ glyph space (đã probe cả 2
subtable) — lỗi PDFium với font nạp động, không phải do font.

Engine (edit.rs):
- Tầng 0 mới của thang font reflow: DÙNG LẠI chính font object gốc trong
  PDF (PdfFontToken của run neo, không nạp lại) — glyph + charcode map gốc
  xử lý dấu cách chuẩn, file không phình; chỉ chọn sau khi PROBE ghi/đọc-lại
  toàn bộ text mới thành công (tạo object nháp → so text → gỡ + mem::forget)
- Ghi từng dòng xong ĐỌC LẠI NGAY tự kiểm; PDFium vẫn vứt ký tự → gỡ và ghi
  lại TỪNG TỪ tự đặt vị trí bằng advance hmtx (không bao giờ ghi glyph dấu
  cách) — lưới an toàn cuối cho font lạ
- Dòng cứng (\n từ ô sửa) NỞ tới +35% bề rộng khối (chặn mép trang) trước
  khi bẻ lại — hộp text tự nở như Foxit; khối căn giữa nở đều quanh tâm
- line_styles theo baseline gốc: dòng cứng thứ i giữ ĐÚNG CỠ dòng gốc thứ i
  (tiêu đề 22.5/20pt không bị ép cả khối về 1 cỡ)

UI (main.js + styles.css):
- Ô sửa cả đoạn đổi textarea → contenteditable plaintext-only: MỖI DÒNG GỐC
  = 1 div đúng font/cỡ/màu/đậm-nghiêng CỦA DÒNG ĐÓ, khối căn giữa hiện căn
  giữa (nở đều 2 phía quanh tâm), khung bù lệch dọc line-box → chữ trong ô
  TRÙNG vị trí chữ gốc khi mở; con trỏ đặt đúng điểm đúp (caretRangeFromPoint);
  Enter xuống dòng, Ctrl+Enter/blur áp dụng, Esc huỷ, dán luôn chữ thuần

Kiểm chứng file thật: "HỢP"→"HỢPP" giữ đúng 2 dòng căn giữa cỡ 22.5/20,
font BAAAAA+TimesNewRomanPS-BoldMT gốc, dấu cách nguyên vẹn, render khớp
bản gốc. Test: +2 hồi quy (giữ cỡ từng dòng; dòng nở không bẻ) → edit 21/21,
các suite annot/organize/redact/form xanh. Docs 12 (mục vá vòng 2), 13
(E39–E42).

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

7.7 KiB
Raw Permalink Blame History

13 — Checklist test thủ công Phase 4 (Sửa nội dung)

Kéo-chuột (di chuyển/resize) không tự động test đầy đủ trong WebView2 (xem docs/08), nên cần bạn thử bằng chuột thật. Đặc biệt cần xác nhận lưu ra file mở lại đúng và tiếng Việt đúng dấu ở phần mềm khác.

Chạy

cd c:\Project\FoFreeXit\app\src-tauri
cargo run

Bảng test

# Thao tác Kỳ vọng KQ
E1 Bấm ✏️ Sửa nội dung Viewport đổi thành trang lớn + khung mờ quanh từng đối tượng (text/ảnh)
E2 Bấm 1 lần vào 1 khung text Khung viền xanh (đã chọn); ô Cỡ chữ + Màu bật lên
E3 Bấm đúp (double-click) 1 khung text Hiện ô sửa tại chỗ với nội dung cũ
E4 Sửa thành chữ có dấu tiếng Việt, Enter Trang render lại đúng nội dung mới, đúng dấu
E5 Chọn text rồi đổi Cỡ chữ Chữ đổi kích thước
E6 Chọn text rồi đổi Màu Chữ đổi màu
E7 Bấm Thêm chữ → click lên trang → gõ → Enter Chữ mới xuất hiện đúng chỗ
E8 Bấm Thêm ảnh → chọn ảnh → click lên trang Ảnh xuất hiện tại chỗ click
E9 Chọn 1 ảnh → Thay ảnh → chọn ảnh khác Ảnh được thay, giữ khung cũ
E10 Chọn 1 đối tượng → Kéo để di chuyển Đối tượng dời theo chuột
E11 Chọn 1 đối tượng → kéo ô vuông góc để resize Đối tượng to/nhỏ lại
E12 Chọn 1 đối tượng → phím Delete (hoặc nút Xoá) Đối tượng biến mất
E13 Hoàn tác (Ctrl+Z) sau vài thao tác Lùi lại từng bước đúng
E14 Làm lại (Ctrl+Y) Tiến lại bước vừa hoàn tác
E15 Lưu thay đổi nội dung → chọn nơi lưu Tạo file PDF mới; app mở lại file đó
E16 Mở file đã lưu ở Foxit/Adobe/Chrome Nội dung đã sửa hiển thị đúng (text, ảnh, tiếng Việt đúng dấu), file không hỏng

Bổ sung Iteration 2 — GIỮ FONT + sửa cả dòng (chuẩn Foxit)

# Thao tác Kỳ vọng KQ
E17 Bấm đúp 1 dòng text bị cắt thành nhiều mảnh (PDF xuất từ Word thường vậy) Ô sửa phủ CẢ DÒNG (không chỉ 1 mảnh), nội dung ghép đủ
E18 Sửa 1 từ trong dòng, Enter Font giữ nguyên y hệt phần còn lại của trang (so bằng mắt + panel chọn hiện tên font cũ)
E19 Trong ô sửa đang gõ Chữ trong ô hiển thị đúng font/cỡ/màu/đậm-nghiêng của dòng (WYSIWYG khi gõ, không phải font hệ thống chung chung)
E20 Chọn text → chỉ đổi Cỡ chữ hoặc Màu Font KHÔNG đổi, nội dung không đổi, vị trí neo không trôi
E21 Chọn text → bấm B (Đậm) Chữ thành đậm cùng họ font (Times → Times Bold, không nhảy sang Arial)
E22 Chọn text → đổi Font trong dropdown Chữ đổi đúng family chọn; dropdown mặc định hiển thị "(giữ nguyên: <font gốc>)"
E23 Kéo di chuyển / kéo handle resize Khung đi theo con trỏ NGAY khi kéo (live), thả chuột mới ghi nhận
E24 Sửa text tiếng Việt trên file có font nhúng (file Word xuất PDF) Đúng dấu và giữ nguyên font nhúng (mở lại ở Foxit xem tên font trong Edit)
E25 Sửa nhiều lần rồi thoát chế độ sửa (không lưu) Không còn file ff_edit_*.pdf rác trong thư mục %TEMP%

Bổ sung — Sửa đoạn hoàn chỉnh với PDF Word-export (khắc phục theo phản hồi thật)

# Thao tác Kỳ vọng KQ
E34 Mở PDF xuất từ Word (tiêu đề bị cắt thành từng từ/ký tự), bật chế độ Sửa Overlay hiện 1 khung mỗi DÒNG (không phải hàng chục ô nhỏ từng từ)
E35 Đúp vào tiêu đề 2 dòng (kể cả đúp vào KHE giữa 2 từ) Ô sửa mở cho CẢ ĐOẠN 2 DÒNG, giữ nguyên xuống dòng
E36 Trong ô sửa: click chuột chỗ khác của đoạn để đổi vị trí con trỏ Con trỏ di chuyển bình thường, KHÔNG thoát edit
E37 Sửa vài chữ rồi Ctrl+Enter Chữ mới thay SẠCH chữ cũ (không chồng chữ), tiêu đề căn giữa vẫn căn giữa
E38 Khi ô sửa đang mở Ô che kín chữ cũ bên dưới (không thấy 2 lớp chữ)
E39 Mở ô sửa trên tiêu đề 2 dòng 2 cỡ chữ (22.5/20pt) Chữ trong ô hiện đúng cỡ TỪNG DÒNG + căn giữa + đậm/màu như bản gốc, vị trí chữ TRÙNG chữ gốc (không xê dịch khi bắt đầu sửa)
E40 Thêm 1–2 ký tự vào dòng dài nhất (vd "HỢP"→"HỢPP") rồi áp dụng Dòng NỞ ra, KHÔNG bị bẻ thành dòng mới; số dòng giữ nguyên
E41 Sau khi áp dụng, nhìn khoảng trắng giữa các từ Dấu cách bình thường — KHÔNG có ô vuông □; mở lại ở Foxit/Adobe font vẫn là font gốc của file
E42 Sửa tiêu đề rồi đo bằng mắt cỡ 2 dòng Dòng 1 vẫn to hơn dòng 2 đúng như gốc (cỡ chữ giữ THEO DÒNG)

Bổ sung — Đúp chuột vào chữ từ viewer thường (chuẩn Foxit Editor)

# Thao tác Kỳ vọng KQ
E31 Đang XEM bình thường (không bật chế độ sửa), đúp chuột vào 1 dòng chữ Tự vào chế độ Sửa nội dung đúng trang đó và Ô SỬA mở sẵn ngay tại dòng/đoạn vừa đúp
E32 Đúp chuột vào VÙNG TRỐNG của trang Không có gì xảy ra (như Foxit)
E33 Đang cầm công cụ chú thích (highlight/note...) rồi đúp vào chữ KHÔNG nhảy vào chế độ sửa (công cụ chú thích được ưu tiên)

Bổ sung Iteration 3 — Sửa cả đoạn với reflow "như Word"

# Thao tác Kỳ vọng KQ
E26 Bấm đúp vào 1 đoạn văn NHIỀU dòng Textarea phủ CẢ ĐOẠN, nội dung ghép đủ các dòng, đúng font/cỡ/màu
E27 Thêm 1 câu dài vào giữa đoạn → Ctrl+Enter (hoặc bấm ra ngoài) Chữ tự bẻ dòng lại trong đúng bề rộng khối, không tràn phải, khoảng cách dòng giữ nguyên, font giữ nguyên
E28 Trong textarea bấm Enter giữa chừng rồi áp dụng Vị trí Enter thành xuống dòng cứng (đoạn tách dòng tại đó)
E29 Xoá bớt chữ cho đoạn ngắn lại → áp dụng Đoạn co lại còn ít dòng hơn, không sót dòng cũ
E30 Hoàn tác (Ctrl+Z) sau 1 lần reflow Cả đoạn quay về nguyên trạng trong 1 bước

Mẫu phản hồi

[Mã] (vd E16) — Phần mềm mở: <Foxit/Adobe/Chrome> — Hiện tượng: <mô tả> —
Kỳ vọng: <...> — Ưu tiên: cao/vừa/thấp

Quan trọng nhất: E4 (sửa tiếng Việt), E15/E16 (lưu + mở lại cross-viewer) — đường GHI nội dung là rủi ro nhất. Engine đã test round-trip nội bộ (gồm tiếng Việt), nhưng xác nhận cross-viewer của bạn rất giá trị.

Giới hạn đã biết (Iteration 1): sửa text ở mức dòng/run (chưa reflow cả đoạn như Word); thêm ảnh mặc định khung 150×112pt (kéo handle để chỉnh); lưu áp cho trang đang sửa. Xem docs/12-phase4-summary.md mục 5.