바운딩된 QuickJS 런타임

HPDFQuickJS 및 HPDFQuickJSStatic은 Win32 및 Win64에서 동일한 애플리케이션 제어 JavaScript 평가 API를 노출합니다

배포 모드 선택

DLL 바인딩은 명시적 경로, HOTPDF_QUICKJS_DLL 환경 값 또는 실행 파일 상위 아래에서 찾은 플랫폼 디렉터리를 수락합니다

기본 빌드는 브리지를 Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll 또는 Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll에 배치합니다

Linux x86-64에서는 HPDFQuickJS가 tools/Build-HotPDFQuickJSLinux.sh로 만든 네이티브 libhpdfquickjs.so 브리지를 로드합니다. 명시적 경로와 환경 변수는 같은 소유권과 ABI 규칙을 따릅니다

Linux 기본 탐색은 실행 파일 디렉터리와 Lib/thirdparty/QuickJS/bin/Linux64를 확인합니다. 네이티브 정적 OMF 배포는 여전히 Windows 전용입니다

스크립트 평가

uses
  HPDFQuickJS;

var
  Engine: THPDFQuickJS;
  EvalResult: THPDFQuickJSResult;
begin
  Engine := THPDFQuickJS.Create;
  try
    if not Engine.Available then
      raise Exception.Create(Engine.LoadError);
    EvalResult := Engine.Eval('JSON.stringify([1, 2, 3].map(x => x * 2))');
    if not EvalResult.Success then
      raise Exception.Create(EvalResult.Error);
  finally
    Engine.Free;
  end;
end;

Eval은 최종 JavaScript 값을 UTF-8 텍스트로 변환하고 Delphi 문자열을 반환할 때 유니코드를 유지합니다

EvalInt 및 EvalFloat은 ABI 경계를 넘어 엔진 값을 노출하지 않고 엄격한 숫자 변환을 추가합니다

실행 제한

Limits := THPDFQuickJSLimits.CreateDefault;
Limits.MemoryBytes := 32 * 1024 * 1024;
Limits.StackBytes := 64 * 1024;
Limits.MaxScriptBytes := 256 * 1024;
Limits.TimeoutMs := 250;
Limits.MaxInterruptChecks := 250000;
Engine := THPDFQuickJS.Create(Limits);

기본값은 64 MiB 엔진 메모리, 64 KiB 스택, 1 MiB UTF-8 스크립트, 1초 벽 시계 시간 및 백만 회 인터럽트 검사를 허용합니다

Win32 정적 런타임은 컴파일러 안전 재귀 경계 안에 머물도록 0 이상의 요청 스택 예산을 48 KiB에서 제한하며, DLL 및 Win64 모드는 요청된 값을 직접 준수합니다

메모리 및 스택 제한은 런타임 전체이고, 스크립트, 시간 및 인터럽트 제한은 각 평가에 적용됩니다

상태 및 복구

거부되거나 중단된 평가는 보류 중인 예외와 버퍼를 지우므로, 동일한 엔진 인스턴스가 이후의 유효한 스크립트를 실행할 수 있습니다

하나의 엔진 인스턴스는 재진입이 아닙니다. 동시 작업자마다 인스턴스 하나를 사용합니다

XFA 양식 스크립팅

XFA 평탄화 엔진은 THotPDF.XFAJavaScriptEnabled가 명시적으로 설정될 때만 이 런타임을 재사용하며, 파일, 프로세스, 브라우저 또는 네트워크 객체 없이 제한된 데이터 퍼사드, 기본 형식 배열 및 검증된 인스턴스 요청을 제공합니다

TXFAFormScriptOptions.JavaScriptEvaluator는 모든 HotPDF 애플리케이션에 정적 QuickJS 객체를 강제하지 않고 정적 런타임을 적용할 수 있습니다

바운딩된 XFA FormCalc 및 JavaScript를 참조하십시오

재현 가능한 런타임 빌드

powershell -ExecutionPolicy Bypass -File Lib\thirdparty\build-quickjs-runtime.ps1

빌드 스크립트는 번들 소스에서 두 정적 객체 집합과 두 브리지 DLL을 모두 생성한 다음, 런타임 매트릭스가 Win32 및 Win64에 대한 정적 및 DLL 프로브를 컴파일하고 실행합니다