Omeđeno QuickJS izvođenje
HPDFQuickJS i HPDFQuickJSStatic izlažu isto programom kontrolirano API sučelje za vrednovanje JavaScripta na Win32 i Win64
Odabir načina primjene
HPDFQuickJSučitava ABI-neutralnu most DLL datotekuquickjs.dlli zadržava QuickJS vrijednosti unutar C kodaHPDFQuickJSStaticpovezuje platformski specifične OMF objekte u aplikaciju i ne zahtijeva DLL datoteku tijekom rada- Ne uključujte obje jedinice u jedan program jer one objavljuju ista imena javnih tipova
DLL sučelje prihvaća eksplicitnu putanju, vrijednost okoline HOTPDF_QUICKJS_DLL ili platformski direktorij pronađen ispod neke izvršne nadređene datoteke
Zadane gradnje smještaju most na Lib\thirdparty\QuickJS\bin\Win32\quickjs.dll ili Lib\thirdparty\QuickJS\bin\Win64\quickjs.dll
Vrednovanje skripte
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 pretvara konačnu JavaScript vrijednost u tekst UTF-8 i čuva Unicode pri vraćanju Delphi niza
EvalInt i EvalFloat dodaju strogu numeričku pretvorbu bez izlaganja vrijednosti stroja preko granice ABI-ja
Ograničenja izvršenja
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);
Zadane vrijednosti dopuštaju 64 MiB memorije stroja, stog od 64 KiB, UTF-8 skriptu od 1 MiB, jednu sekundu zidnog vremena i milijun provjera prekida
Statičko izvođenje na Win32 ograničava zatraženi proračun stoga od nule ili veći na 48 KiB kako bi ostao unutar kompilatoru sigurne granice rekurzije; DLL i Win64 načini poštuju zatraženu vrijednost izravno
Ograničenja memorije i stoga su široka za cijelo izvođenje dok se ograničenja skripte, vremena i prekida primjenjuju na svako vrednovanje
Status i oporavak
qjsSuccessizvještava o pretvorenom rezultatuqjsScriptErrorizvještava o pogreškama sintakse, bačenim vrijednostima i pogreškama pretvorbeqjsTimeLimitiqjsInterruptLimitrazlikuju dva proračuna izvršenjaqjsBusy,qjsInvalidArgument,qjsResourceErroriqjsUnavailablečuvaju kvarove infrastrukture
Odbijeno ili prekinuto vrednovanje čisti svoju čekajuću iznimku i međuspremnike, pa ista instanca stroja može izvršiti kasniju ispravnu skriptu
Jedna instanca stroja nije reentrantna; koristite po jednu instancu po istodobnom radniku
XFA skriptiranje obrasca
Stroj za izravnavanje XFA-ja ponovno koristi ovo izvođenje samo kada je THotPDF.XFAJavaScriptEnabled izričito postavljen; on osigurava ograničenu podatkovnu fasadu, izvorne tipkane nizove, provjerene zahtjeve instanci i nikakve datotečne, procesne, pregledničke ili mrežne objekte
TXFAFormScriptOptions.JavaScriptEvaluator može prilagoditi statičko izvođenje bez prisiljavanja statičkih QuickJS objekata u svaku HotPDF aplikaciju
Pogledajte Omeđeni XFA FormCalc i JavaScript
Ponovljiva gradnja izvođenja
powershell -ExecutionPolicy Bypass -File Lib\thirdparty\build-quickjs-runtime.ps1
Skripta gradnje proizvodi oba seta statičkih objekata i obje most DLL datoteke iz priloženog izvora, a zatim matrica izvođenja sastavlja i vježba statičke i DLL sonde za Win32 i Win64