Files
FoFreeXit/docs/13-phase4-user-tests.md
T
adminandClaude Fable 5 fed43b2fb7 Phase 4 Iteration 3: reflow đoạn văn 'như Word' (EditOp::ReflowText)
Engine:
- EditOp::ReflowText { indices, text }: engine tự suy hình học từ các run
  (lề trái/bề rộng từ bounds, baseline từ matrix.f gom cụm ±1pt, khoảng cách
  dòng = median hiệu baseline); bẻ dòng greedy đo bằng hmtx của font thật
  (fontmatch::wrap_lines + char_advance, ttf-parser); \n = ngắt dòng cứng,
  từ quá dài cắt theo ký tự, dòng rỗng giữ nhịp baseline
- Giữ font theo thang 4 mức nhất quán với iteration 2: (1) font nhúng parse
  được + phủ đủ glyph → nhúng lại chính bytes đó; (2) family base-14 + ASCII
  → font chuẩn PDF qua FPDFText_LoadStandardFont (BaseFont giữ tên chuẩn,
  không nhúng, file không phình; đo bằng font metric-compatible); (3) font
  hệ thống cùng họ; (4) fallback. FontLoad enum Bytes/Builtin cho pha nạp font
- Dòng mới giữ phần tuyến tính matrix của run neo (scale/nghiêng), Tf =
  unscaled run neo → cỡ hiển thị không đổi

UI + Tauri:
- paragraphLines: gom đoạn nhiều dòng (baseline cách đều ±25%, cỡ chữ tương
  đồng, giao ngang ≥30%); double-click đoạn ≥2 dòng → textarea sửa CẢ ĐOẠN
  WYSIWYG (đúng font/cỡ/màu/kiểu + line-height đúng nhịp baseline)
- Enter = xuống dòng cứng · Ctrl+Enter/bấm ra ngoài = áp dụng · Esc = huỷ;
  1 commit = 1 op reflowText = 1 nấc undo
- DTO reflowText (indices) trong Tauri

Test: 3 integration mới (wrap giữ font nhúng + tiếng Việt + baseline đều;
hard break; base-14 giữ BaseFont Helvetica chuẩn) + 3 unit wrap_lines.
Toàn bộ suite engine ngoài qpdf: 52/52 xanh.

Docs: 12 (Iteration 3 + giới hạn v1), 13 (E26–E30), 14 (mục 3.1 → đã giải,
cập nhật thứ tự việc tiếp theo), README.

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

5.3 KiB
Raw 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 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.