可攜 XFA runtime

原生 TXFAWidgetRuntime 的資料、版面與事件模型,可在 Windows 上以 Delphi 或 FPC 執行,在 Linux x86-64 上以 FPC 執行

Linux 核心執行不需要 LCL、桌面工作階段或 Windows 相容層;Windows 的 FPC 建置保留既有的 Lazarus UTF-8 RTL 初始化

原生 JavaScript 橋接

bash tools/Build-HotPDFQuickJSLinux.sh /var/tmp/hotpdf-native
export HOTPDF_QUICKJS_DLL=/var/tmp/hotpdf-native/libhpdfquickjs.so
export HOTPDF_SUPPRESS_AUTO_LAUNCH=1

Linux 橋接以 GCC 相容編譯從隨附的 QuickJS 原始碼建置,並使用與 Windows DLL 相同的版本化 HPDFQJS ABI

在 Linux 上,QuickJSDLLPath 與 HOTPDF_QUICKJS_DLL 接受明確的共享程式庫路徑;既有 API 名稱為原始碼相容而保留

預設探索會檢查執行檔旁的 libhpdfquickjs.so,以及執行檔祖先目錄中的 Lib/thirdparty/QuickJS/bin/Linux64

每個 session 都持有對其實際載入模組的參照,直到原生引擎、context 與 callback 釋放為止;各 session 保留獨立的 script 狀態與 journal

原生單調時鐘強制執行既有的事件、XML 與版面預算;確定性的 epoch 值、隨機回應與外部 transport 回應仍會被錄製,並以交易方式重播

Linux locale

原生 Linux locale 後端讀取系統 ICU 的曆法名稱、小數與分組符號、貨幣符號與代碼、上午/下午標記,以及數字/日期/時間模式

具名 locale 使用完整解析的 BCP47 識別碼與已知的 ICU 語言資料;底線分隔符會正規化,不支援的語言或格式錯誤的識別碼回傳 False

空名稱選用 ICU 設定的預設 locale;文件的 localeSet 定義與明確的應用程式 locale provider 保留既有優先權

libicuuc 與 libicui18n 都必須存在;載入器會解析相符的 ICU 匯出版本,包括沒有開發用 symlink 的版本化 runtime 程式庫

ICU 與 Windows 依各自安裝的 locale 資料,可能提供不同的地區模式與空白字元;明確的文件 locale 定義可選出確定性的應用程式格式化

持久化與 PDF 消費端

SaveToBytes 持久化原生 XDP,包括 Data DOM 匯入、逐 instance 值、命名空間對應、註解與 processing instructions,兩個平台具有相同的 rollback 行為

Linux 已存 XDP 消費端 fixture 會重新載入 TXFAWidgetRuntime,並透過 THPDFHeadlessDocument 的欄位 setter 與原生外觀產生套用實際值

該消費端使用獨立準備的 PDF 欄位 template;自動的 Linux XFA 轉 PDF 欄位建立與完整的互動 render,仍是獨立的整合工作