XFA 호스트 모델
상태를 가진 xfa.host 모델을 함께 제공되는 QuickJS 엔진으로 쓰려면 TXFAWidgetRuntimeOptions.ScriptOptions.EnableJavaScript를 켜세요
런타임을 만들기 전에 TXFAWidgetRuntimeOptions.HostModel로 애플리케이션 메타데이터를 설정하고, 현재 상태는 TXFAWidgetRuntime.HostModel로 읽습니다
프로퍼티
| 프로퍼티 | 동작 |
|---|---|
name, version, appType, platform, variation, language | 임베딩 애플리케이션이 공급하는 읽기 전용 애플리케이션 메타데이터 |
numPages | field 위젯 밖에 배치된 콘텐츠까지 포함한 실제 레이아웃 페이지 수, 읽기 전용 |
currentPage | 0부터 시작하는 현재 페이지, numPages 기준 검증. field에 포커스하면 그 페이지가 선택됩니다 |
title | Unicode 런타임 제목, MaxValueChars로 제한되고 트랜잭션과 함께 발행됩니다 |
calculationsEnabled | 자동 calculate 스크립트를 제어합니다. 기본값은 true입니다 |
validationsEnabled | 편집된 값에 대한 validate 스크립트를 제어합니다. 기본값은 true입니다 |
애플리케이션 버전은 임베딩 애플리케이션을 식별합니다. 라이브러리가 자기 릴리스 번호로 대체하지 않습니다
호스트 상태는 런타임 소유입니다. 제목과 페이지 변경은 원본 PDF 객체 그래프를 바꾸지 않고 저장된 XDP 데이터에 인코딩되지도 않습니다
내비게이션, 포커스와 데이터 리셋
| 메서드 | 동작 |
|---|---|
pageUp(), pageDown() | 페이지 경계 안에서 이동하고 첫 페이지나 마지막 페이지에서 멈춥니다 |
getFocus() | 포커스된 라이브 field occurrence를 반환하고, 포커스가 없거나 제거되었거나 가려져 있으면 null을 반환합니다 |
setFocus(fieldOrSOM) | 보이는 라이브 field occurrence에 포커스를 요청합니다. null이나 빈 텍스트는 포커스를 지웁니다 |
resetData(paths="") | 쉼표로 구분된 SOM 목록이 고르는 field의 템플릿 기본값을 복원하고, paths가 비면 모든 field를 복원합니다. 반복 인스턴스 수와 무관한 occurrence는 유지됩니다 |
리셋된 field는 편집 모드를 벗어나고 유효한 상호작용 상태를 되찾아, 오래된 편집 버퍼가 리셋 값을 덮어쓰지 않게 합니다
리셋과 Data DOM loadXML은 같은 event에서 실행될 수 있습니다. 두 변경은 event 트랜잭션을 공유하고, 실패한 스크립트나 소진된 예산은 재시도 전에 데이터 값, 편집 버퍼, 호스트 상태, script 객체 어휘 상태를 복원합니다
인스턴스 매니저가 반복 subform을 재배치하면 field 식별자는 자기 데이터 occurrence를 따라가고, 스냅샷 복원은 이 논리 식별자를 유지합니다
포커스 수명 주기와 트랜잭션
런타임 포커스 변경은 대기 중인 소스 편집을 커밋·검증하고, 소스 exit 스크립트를 실행하고, 새 field를 선택한 뒤, calculate와 레이아웃이 안정되기 전에 대상 enter 스크립트를 실행합니다
enter나 exit 스크립트가 만든 포커스 요청은 대상을 다시 향하게 할 수 있습니다. 포커스 드레인 하나는 전환 64회까지 허용하며 스크립트 연산과 경과 시간 예산을 공유합니다
스크립트는 xfa.event.name으로 이 활동을 봅니다. calculate와 validate는 각각의 컨텍스트 이름을 받습니다
공개 FocusWidget과 enter/exit DispatchEvent 호출은 같은 트랜잭션 수명 주기를 씁니다. ClearFocus는 exit 수명 주기 전에 현재 편집 버퍼를 취소하며 기존 취소 동작을 유지합니다
OnFocusChanged는 커밋 후 순서화된 콜백을 발행합니다. 중간 재지정은 트랜잭션 안에 머물고, 실패한 스크립트·검증·예산은 호스트 상태, 포커스, 편집 버퍼, 문서 값, 스크립트 렉시컬 상태를 함께 복원합니다
Options := TXFAWidgetRuntimeOptions.Default;
Options.ScriptOptions.EnableJavaScript := True;
Options.HostModel.Name := 'Application';
Options.HostModel.Version := '1.0';
Options.HostModel.Language := 'en-US';
Runtime := TXFAWidgetRuntime.Create(XDPBytes, 595, 842, Options);
xfa.host.title = "Order form";
xfa.host.setFocus("rows[1].quantity");
xfa.host.resetData("rows[1].quantity,rows[1].price");
xfa.host.calculationsEnabled = false;
애플리케이션 효과와 남은 적용 범위
대화상자, 인쇄, 외부 내비게이션, 임포트/익스포트, HTTP 효과는 명시적 애플리케이션 호스트 트랜스포트와 기록된 응답을 씁니다. 상태 모델 자체는 UI나 네트워크 연산을 일으키지 않습니다
추가 호스트 대화상자 API, Acrobat 호스트 프로퍼티 전체, 동기 reflow 질의, 완전한 SOM 연산자는 별도 통합 과제로 남아 있습니다
관련 API: TXFAHostModelState, PXFAHostModelState, HPDFXFAHostModelJavaScript, 인터랙티브 XFA 위젯 런타임