Searched for 2 patterns, read 1 file, recalled 1 memory (ctrl+o to expand) ● RptView 處理 ~Xn; 的方式 單位與預設值 - X_UNIT_PT = 0.2pt (1/360") - 預設 x_unit = 12 - ~Xn 解析後存入 State.x_unit 核心公式(來自 winet.exe) nNumber = (W*T + X) / 2 ASCII: advance = nNumber CJK: advance = 2 × nNumber ← X extra 也一起加倍 關鍵實作:wide_mult 決定 X 是否加倍 1. char_advance() extra = x_unit * X_UNIT_PT * wide_mult — ASCII × 1、CJK × 2 2. 齊行/置中寬度計算 逐字判斷 ord(ch) > 0x7F 決定 ×1 或 ×2 3. UDC(造字)一律 × 2(全形) PDF 渲染的特殊處理 PDF 的 Tc(charSpace) 對每個 glyph 加相同量, 無法在同一個 text run 裡同時保留ASCII/CJK 的 2:1 比例, 因此 _draw_segment(): - 把 run_text 依 ASCII/CJK 切成子片段 - cs_ascii = x_unit * X_UNIT_PT / tz_factor - cs_cjk = 2 × cs_ascii - 分別以不同 Tc 輸出 備註:~G2(glyph_connect)只影響框線字元繪製端點,不改變 advance,所有字寬保持一致(winet.exe lpDx 均勻)。