ÐÑебÑоÑванеÑо на ÑÑÑаниÑиÑе в ÑканиÑан аÑÑ
ив Ñ ÑÐ°Ð·Ð¼ÐµÑ 1,4 GB би ÑÑÑбвало да бÑде евÑина опеÑаÑиÑ. ÐзвикванеÑо на LoadFromFile за ÑакÑв Ñайл обаÑе пÑÐ¾Ð¼ÐµÐ½Ñ Ñова: HotPDF анализиÑа данниÑе за кÑÑÑÑоÑани пÑепÑаÑки (cross-reference data) и изгÑажда Ð¾Ð±ÐµÐºÑ Ð² памеÑÑа за вÑеки един Ð¾Ñ Ð½ÑколкоÑо ÑÑоÑиÑи Ñ
илÑди коÑвени обекÑа в докÑменÑа, каÑо 32-биÑов пÑоÑÐµÑ Ð´Ð¾ÑÑига лимиÑа на адÑеÑноÑо пÑоÑÑÑанÑÑво Ð¾Ñ 2 GB нÑкÑде по ÑÑедаÑа на Ñози анализ. ÐпеÑаÑиÑÑа, коÑÑо иÑкаÑе (бÑоÑÑ Ð½Ð° ÑÑÑаниÑиÑе), вÑÑÑноÑÑ Ð½Ðµ Ñе нÑждае Ð¾Ñ Ð½Ð¸Ñо един Ð¾Ñ Ñези обекÑи. ÐÑждае Ñе единÑÑвено Ð¾Ñ Ð´ÑÑвоÑо на ÑÑÑаниÑиÑе (page tree). Тази Ñазлика Ð¼ÐµÐ¶Ð´Ñ Ñова, коеÑо дадена задаÑа изиÑква, и Ñова, коеÑо пÑлноÑо заÑеждане пÑедоÑÑавÑ, е пÑиÑинаÑа за ÑÑÑеÑÑвÑванеÑо на Direct File API.
Direct File API пÑедоÑÑÐ°Ð²Ñ Ð½Ð° Delphi и C++Builder доÑÑÑп до PDF на ниво Ñайл: бÑой ÑÑÑаниÑи, копиÑане, деÑиÑÑиÑане, инкÑеменÑално добавÑне, вÑиÑко Ñова ÑÑез ÑеÑене Ð¾Ñ Ð´Ð¸Ñка Ñамо на Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ñо, вмеÑÑо да Ñе вÑзÑÑановÑва ÑелиÑÑ Ð¼Ð¾Ð´ÐµÐ» на докÑменÑа в RAM памеÑÑа. УмениеÑо Ñе ÑÑÑÑои в Ñова да ÑÑпоÑÑавиÑе вÑÑка задаÑа Ñ Ð½Ð°Ð¹-лекоÑо ниво (tier), коеÑо може да Ñ Ð¸Ð·Ð¿Ñлни. ÐапÑавеÑе Ñова пÑавилно и ваÑаÑа ÑÑлÑга Ñе поддÑÑжа ÑÑабилна конÑÑмаÑÐ¸Ñ Ð½Ð° Ð¿Ð°Ð¼ÐµÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ ÑазмеÑа на Ð²Ñ Ð¾Ð´ÑÑиÑе данни. СгÑеÑеÑе и пÑÑвиÑÑ Ð¸Ð·Ð²ÑнгабаÑиÑен Ñайл Ñе ÑÑине ÑабоÑÐ½Ð¸Ñ Ð¿ÑоÑеÑ.
Ðакво ви ÑÑÑÑва пÑлноÑо заÑеждане
LoadFromFile не е вÑаг. То опÑавдава памеÑÑа Ñи: Ñлед каÑо дÑÑвоÑо е в RAM памеÑÑа, имаÑе пÑоизволен доÑÑÑп (random access) до вÑÑка ÑÑÑаниÑа и вÑеки обекÑ, коеÑо е ÑоÑно Ñова, коеÑо изиÑÐºÐ²Ð°Ñ InsertPagesFromDocument, MovePage и ÑеÑеÑиализаÑиÑÑа ÑÑез SaveLoadedDocument. ÐÑма ÑÑкÑаÑен пÑÑ Ð·Ð° иÑÑинÑко ÑеÑÑÑÑкÑÑÑиÑане: ÑÑÑбва да заÑедиÑе ÑÐµÐ»Ð¸Ñ Ð´Ð¾ÐºÑменÑ, за да го пÑенаÑедиÑе.
ÐÑоблемиÑе запоÑваÑ, когаÑо нÑмаÑе конÑÑол над ÑазмеÑа на Ð²Ñ Ð¾Ð´ÑÑиÑе данни. ÐаÑваниÑÑа Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñи, ÑезÑлÑаÑиÑе Ð¾Ñ ÑкенеÑи и аÑÑ Ð¸Ð²Ð¸Ñе оÑпÑеди деÑеÑилеÑие не Ñе ÑÑобÑазÑÐ²Ð°Ñ Ñ Ð¿ÑедположениÑÑа на ÑеÑÑÐ¾Ð²Ð¸Ñ Ð²Ð¸ набоÑ. Ðко заÑеждаÑе вÑÑка Ð²Ñ Ð¾Ð´ÑÑа инÑоÑмаÑÐ¸Ñ Ð±ÐµÐ·ÑÑловно, лимиÑÑÑ Ð½Ð° памеÑÑа ви Ñе Ñе опÑÐµÐ´ÐµÐ»Ñ Ð¾Ñ Ð½Ð°Ð¹-Ð³Ð¾Ð»ÐµÐ¼Ð¸Ñ Ñайл, койÑо нÑкой нÑкога Ñе изпÑаÑи. ÐÑемеÑо за анализ Ñледва бÑÐ¾Ñ Ð½Ð° обекÑиÑе, а заеÑаÑа RAM Ð¿Ð°Ð¼ÐµÑ Ñе ÑÑÑановÑва на ÑÑойноÑÑ, нÑколко пÑÑи по-голÑма Ð¾Ñ ÑазмеÑа на Ñайла Ñлед оÑÑиÑане на ÑÑÑÑкÑÑÑиÑе на обекÑиÑе и декодиÑаниÑе поÑоÑи, Ñака Ñе един Ð³Ð¸Ð³Ð°Ð±Ð°Ð¹Ñ Ð½Ð° диÑка може да ознаÑава нÑколко гигабайÑа в памеÑÑа.
РекомпилиÑанеÑо за 64-биÑова аÑÑ Ð¸ÑекÑÑÑа пÑÐµÐ¼Ð°Ñ Ð²Ð° огÑаниÑениеÑо на адÑеÑноÑо пÑоÑÑÑанÑÑво, но запазва ÑÐ°Ð·Ñ Ð¾Ð´Ð° на ÑеÑÑÑÑи. РабоÑниÑÑ Ð¿ÑоÑÐµÑ Ð²Ñе оÑе изÑÐ°Ð·Ñ Ð¾Ð´Ð²Ð° ÑекÑнди пÑоÑеÑоÑно вÑеме и памеÑ, многокÑаÑно надвиÑаваÑа ÑазмеÑа на Ñайла, за да оÑговоÑи на вÑпÑоÑ, на койÑо ÑобÑÑвенаÑа ÑÑÑÑкÑÑÑа на Ñайла би могла да оÑговоÑи за милиÑекÑнди. ÐÑи паÑалелна обÑабоÑка ÑмеÑкаÑа ÑÑава неблагопÑиÑÑна: ÑеÑиÑи големи заÑежданиÑ, изпÑлнÑвани едновÑеменно, ÑподелÑÑ ÐµÐ´Ð¸Ð½ бÑÐ´Ð¶ÐµÑ Ð¾Ñ Ð¿Ð°Ð¼ÐµÑ Ð¸ пÑоизводиÑелноÑÑÑа Ñе ÑÑива ÑоÑно когаÑо опаÑкаÑа е най-дÑлга.
ЧеÑене на Ñайл ÑÑез манипÑлаÑоÑ
ÐивоÑо за ÑеÑене (read-only tier) оÑваÑÑ Ñайл каÑо манипÑлаÑÐ¾Ñ (handle), оÑговаÑÑ Ð½Ð° ÑÑÑÑкÑÑÑни вÑпÑоÑи за него и го заÑваÑÑ. Ðез дÑÑво на обекÑиÑе, без ÑендеÑиÑане на ÑÑÑаниÑи и без ÑÐ°Ð·Ñ Ð¾Ð´ на памеÑ, коÑÑо ÑаÑÑе Ñ ÑазмеÑа на Ð²Ñ Ð¾Ð´ÑÑиÑе данни.
var
Pdf: THotPDF;
Handle, PageCount: Integer;
begin
Pdf := THotPDF.Create(nil);
try
Handle := Pdf.DAOpenFileReadOnly('archive-2026-06.pdf', '');
if Handle > 0 then
try
PageCount := Pdf.DAGetPageCount(Handle);
RouteByPageCount('archive-2026-06.pdf', PageCount);
finally
Pdf.DACloseFile(Handle);
end;
finally
Pdf.Free;
end;
end;
ТÑи навика Ð¿Ð¾Ð¼Ð°Ð³Ð°Ñ Ð´Ð° поддÑÑжаÑе Ñова ниво еÑекÑивно. ÐÑÑво, пÑовеÑÑвайÑе вÑÑнаÑаÑа ÑÑойноÑÑ. ÐеположиÑелен манипÑлаÑÐ¾Ñ Ð¾Ð·Ð½Ð°Ñава, Ñе оÑваÑÑнеÑо е неÑÑпеÑно, а извикванеÑо на DAGetPageCount Ñ Ð½ÐµÐ²Ð°Ð»Ð¸Ð´ÐµÐ½ манипÑлаÑÐ¾Ñ Ðµ вид гÑеÑка, коÑÑо оÑÑава ÑкÑиÑа до денÑ, в койÑо ÐºÐ»Ð¸ÐµÐ½Ñ Ð¸Ð·Ð¿ÑаÑи повÑеден Ñайл. ÐÑоÑо, ÑвÑÑзвайÑе вÑÑко ÑÑпеÑно оÑваÑÑне Ñ DACloseFile в блок finally. УÑлÑга, коÑÑо изпÑÑка манипÑлаÑоÑи (leaks handles), не Ñе ÑÑива веднага, а поÑÑепенно гÑби ÑеÑÑÑÑи, коеÑо е по-лоÑо. ТÑеÑо, ÑазбеÑеÑе какво ÑоÑно пÑави паÑамеÑÑÑÑÑ Ð·Ð° паÑола. DAOpenFileReadOnly пÑиема паÑола, но пÑи ÑиÑÑиÑани данни Ñой ÑиÑ
омÑлком пÑеминава кÑм пÑлен анализ за опÑеделÑне на бÑÐ¾Ñ ÑÑÑаниÑи, Ñака Ñе гаÑанÑиÑÑа за ÑÑабилна Ð¿Ð°Ð¼ÐµÑ Ð¸Ð·Ñезва. ÐÑенаÑоÑвайÑе заÑиÑениÑе Ñайлове пÑÑво пÑез DecryptFile, за да запазиÑе оÑÑаналаÑа ÑаÑÑ Ð¾Ñ Ð¿ÑоÑеÑа икономиÑна.
СÑÑаÑа пÑовеÑка ÑлÑжи и за ÑилÑÑиÑане пÑи поÑÑÑпване. ФайловеÑе ÑеÑÑо пÑиÑÑÐ¸Ð³Ð°Ñ Ñ Ð³ÑеÑни ÑазÑиÑениÑ, полÑзаÑедени или пÑеименÑвани Ð¾Ñ ÑÑвÑем дÑÑг ÑоÑмаÑ, а пÑовеÑкаÑа Ñ DAOpenFileReadOnly оÑÑ
вÑÑÐ»Ñ Ð²ÑиÑки ÑÑÑ
на вÑ
ода за милиÑекÑнди, ÑвÑÑзвайки гÑеÑкаÑа Ñ ÐºÐ¾Ð½ÐºÑеÑÐ½Ð¸Ñ Ñайл. ÐлÑеÑнаÑиваÑа е да оÑÑавиÑе повÑеден Ñайл да навлезе дÑлбоко в опаÑкаÑа и да Ñе ÑÑине Ñам, кÑдеÑо ÑазплиÑанеÑо на пÑиÑинаÑа може да ви коÑÑва ÑÑл Ñледобед.
ÐопиÑане, деÑиÑÑиÑане и ÑиÑÑиÑане на Ñели Ñайлове
ÐÑоÑоÑо ниво пÑемеÑÑва и ÑÑанÑÑоÑмиÑа Ñели Ñайлове, без изобÑо да ÑазкÑива ÑÑÑ Ð½Ð°Ñа вÑÑÑеÑна ÑÑÑÑкÑÑÑа. Това Ñа извикваниÑÑа, на коиÑо Ð²Ñ Ð¾Ð´ÑÑиÑе ÑÑÑбопÑоводи ÑазÑиÑÐ°Ñ Ð½Ð°Ð¹-много.
// Structural copy: validate-and-move without parsing the object tree
Status := Pdf.DACopyFile('incoming\statement.pdf', 'verified\statement.pdf');
LogDirectFileStatus('copy', Status);
// Decrypt while copying: the Direct File route into protected inputs
Status := Pdf.DecryptFile('incoming\protected.pdf',
'verified\plain.pdf', 'batch-password');
LogDirectFileStatus('decrypt-copy', Status);
// Encrypt while copying: protect an output without a full load
Status := Pdf.EncryptFile('verified\statement.pdf',
'outbound\statement.pdf', 'owner-secret', '', aes256, [prPrint]);
LogDirectFileStatus('encrypt-copy', Status);
ÐÑÑко извикване има ÑвоÑÑа ÑолÑ. DACopyFile е валидиÑаноÑо копие Ð¾Ñ ÐºÐ°ÑанÑинна диÑекÑоÑÐ¸Ñ Ð² ÑпÑавлÑвано Ñ
ÑанилиÑе: Ñо оÑваÑÑ Ð¸ индекÑиÑа PDF ÑÑÑÑкÑÑÑаÑа в движение, Ñака Ñе непÑлен или не-PDF Ñайл Ñе пÑÐ¾Ð²Ð°Ð»Ñ Ð¾Ñе ÑÑк, а не ÑÑи еÑапа по-наÑаÑÑк по веÑигаÑа. DecryptFile запиÑва деÑиÑÑиÑано копие по диÑекÑен пÑÑ Ð½Ð° пÑенапиÑване Ñ AES-256, койÑо Ð·Ð°Ð¾Ð±Ð¸ÐºÐ°Ð»Ñ Ð´ÑÑвоÑо на обекÑиÑе, когаÑо вÑ
одÑÑиÑе данни го позволÑваÑ, Ñова е еквиваленÑÑÑ Ð·Ð° големи Ñайлове на пÑоÑеÑа по заÑеждане и повÑоÑно запиÑване, опиÑан в ÑÑаÑиÑÑа за AES-256 ÑиÑÑиÑане. EncryptFile изпÑлнÑва ÑÑÑаÑа опеÑаÑÐ¸Ñ Ð² обÑаÑен Ñед, каÑо пÑилага заÑиÑа Ñ Ð¿Ð°Ñола по вÑеме на копиÑане на ниво Ñайл Ñ Ð¿Ð°ÑамеÑÑиÑе за Ñип клÑÑ Ð¸ нива на доÑÑÑп, използвани Ð¾Ñ Ð¿ÑÑÑ Ð² памеÑÑа.
ÐобавÑне на пÑомени вмеÑÑо пÑенапиÑване
ÐнкÑеменÑалноÑо акÑÑализиÑане, деÑиниÑано в ISO 32000-1 §7.5.6, е ÑÑеÑоÑо ниво. ÐÑигиналниÑе байÑове оÑÑÐ°Ð²Ð°Ñ Ð½Ð° диÑка, а вÑиÑки нови или пÑоменени обекÑи Ñе добавÑÑ Ñлед ÑÑÑ , поÑледвани Ð¾Ñ Ð½Ð¾Ð²Ð° ÑекÑÐ¸Ñ Ð·Ð° кÑÑÑÑоÑани пÑепÑаÑки, коÑÑо Ñе ÑвÑÑзва Ñ Ð¾Ñигинала. Ðа аÑÑ Ð¸Ð² Ð¾Ñ 900 MB, кÑм койÑо ÑÑÑбва да Ñе добави една ÑÑÑаниÑа, ÑенаÑа на Ð·Ð°Ð¿Ð¸Ñ Ðµ Ñамо ÑазликаÑа (delta), а не ÑелиÑÑ Ñайл.
// Append an audit page to a large archive without rewriting it
Pdf.BeginIncrementalUpdate('archive-2026-06.pdf');
Pdf.AddPage;
Pdf.CurrentPage.SetFont('Arial', [], 10);
Pdf.CurrentPage.TextOut(50, 760, 0, 'Processed by intake service 2026-06-11');
Pdf.SaveIncrementalUpdate('archive-2026-06-stamped.pdf'); // original bytes + delta
ТÑк Ñа важни две пÑавила. BeginIncrementalUpdate ÑÑÑбва да ÑоÑи кÑм оÑÐ¸Ð³Ð¸Ð½Ð°Ð»Ð½Ð¸Ñ Ñайл, ÑÑй каÑо добавениÑе данни за кÑÑÑÑоÑани пÑепÑаÑки Ñе ÑвÑÑÐ·Ð²Ð°Ñ Ñ Ð±Ð°Ð¹Ñови оÑмеÑÑÐ²Ð°Ð½Ð¸Ñ Ð²ÑÑÑе в него. ÐÑвен Ñова моделÑÑ Ðµ пÑоекÑиÑан Ñамо за добавÑне (append-only): вÑÑко инкÑеменÑално запиÑване ÑвелиÑава Ñайла, но никога не го Ñвива. ÐокÑменÑ, койÑо Ñе подпеÑаÑва вÑÑка веÑеÑ, Ñе Ñе ÑазÑаÑÑва неогÑаниÑено, докаÑо пеÑиодиÑна ÑеÑеÑиализаÑÐ¸Ñ â?заÑежданеÑо Ð¼Ñ Ð¸ запиÑванеÑо Ð¼Ñ Ð¾Ð±ÑаÑно ÑÑез SaveLoadedDocument â?не го компÑеÑиÑа. СÑÑоÑо ÑвойÑÑво пÑави инкÑеменÑалноÑо акÑÑализиÑане единÑÑÐ²ÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñен наÑин за пÑомÑна на ÑиÑÑово подпиÑан докÑÐ¼ÐµÐ½Ñ â?огÑаниÑение, Ñазгледано в ÑÑаÑиÑÑа за ÑиÑÑови подпиÑи и PAdES. ÐазоваÑа ÑиÑÑема за кÑÑÑÑоÑани пÑепÑаÑки е Ñазгледана в ÑÑаÑиÑÑа за поÑоÑи Ð¾Ñ Ð¾Ð±ÐµÐºÑи и инкÑеменÑални акÑÑализаÑии.
Ðма капан в запиÑиÑе Ð¾Ñ Ñип âÑамÐ?добавÑнеâ? койÑо ÑбÑгва на повеÑеÑо пÑегледи. ÐÑигиналниÑе байÑове оÑÑÐ°Ð²Ð°Ñ Ð²Ñв Ñайла, доÑÑÑпни за вÑеки, койÑо ÑеÑи да поÑÑÑÑи. ÐнкÑеменÑална акÑÑализаÑиÑ, коÑÑо âзаменÑâ?ÑÑÑаниÑа, вÑÑÑноÑÑ Ð½Ðµ изÑÑива ÑÑаÑаÑа. Ð¢Ñ Ñ Ð·Ð°Ð¼ÐµÐ½Ñ Ð² ÑекÑÑаÑа веÑÑиÑ, докаÑо пÑедиÑнаÑа веÑÑÐ¸Ñ Ð¾ÑÑава Ñам, напÑлно вÑзÑÑановима. ÐÑо заÑо инкÑеменÑалниÑе акÑÑализаÑии Ñа гÑеÑниÑÑ Ð¸Ð½ÑÑÑÑÐ¼ÐµÐ½Ñ Ð·Ð° пÑемаÑ
ване на ÑÑвÑÑвиÑелно ÑÑдÑÑжание. Ðа да пÑемаÑ
неÑе напÑлно иÑÑоÑиÑÑа, коÑÑо полÑÑаÑелÑÑ Ð½Ðµ ÑÑÑбва да вижда, ви е необÑ
одима пÑлна ÑеÑеÑиализаÑиÑ: LoadFromFile, поÑледвано Ð¾Ñ SaveLoadedDocument, коеÑо запиÑва Ñамо ÑекÑÑоÑо ÑÑÑÑоÑние и оÑÑÐ°Ð²Ñ ÑкÑиÑиÑе веÑÑии зад Ñебе Ñи.
СÑпоÑÑавÑне на нивоÑо Ñ Ð¾Ð¿ÐµÑаÑиÑÑа
ÐогикаÑа на Ð¸Ð·Ð±Ð¾Ñ Ðµ доÑÑаÑÑÑно кÑаÑка, за да Ñ Ð¿Ð¾Ð¼Ð½Ð¸Ñе, и е полезно да Ñ ÐºÐ¾Ð´Ð¸ÑаÑе каÑо изÑиÑно ÑеÑение за маÑÑÑÑÑизаÑÐ¸Ñ Ð² наÑалоÑо на ваÑÐ¸Ñ Ð¿ÑоÑеÑ, вмеÑÑо да оÑÑавÑÑе вÑÑка задаÑа да импÑовизиÑа Ñвой ÑобÑÑвен пÑÑ. ÐÑжнаÑа опеÑаÑÐ¸Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»Ñ Ð½Ð¸Ð²Ð¾Ñо:
- ÐÑебÑоÑване, инÑпекÑÐ¸Ñ Ð¸Ð»Ð¸ клаÑиÑикаÑÐ¸Ñ Ð¾ÑваÑÑ Ð¼Ð°Ð½Ð¸Ð¿ÑлаÑоÑ:
DAOpenFileReadOnly,DAGetPageCount,DACloseFile. - ÐÑемеÑÑване, деÑиÑÑиÑане или ÑиÑÑиÑане на ÑÑл Ñайл оÑÑава на ниво Ñайл Ñ
DACopyFile,DecryptFileилиEncryptFile. - РеÑÑÑÑкÑÑÑиÑане на ÑÑÑаниÑи или Ñливане на докÑменÑи изиÑква пÑлно заÑеждане:
LoadFromFile, Ñлед ÑоваInsertPagesFromDocumentилиMovePage, и накÑаÑSaveLoadedDocument. - ÐобавÑне на малка Ñазлика кÑм огÑомен или подпиÑан Ñайл извиква
BeginIncrementalUpdateи го запиÑва.
СмеÑениÑе ÑабоÑни пÑоÑеÑи Ñе вÑÐ·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ Ð´Ð¾Ð±Ñе Ð¾Ñ Ð¿Ð¾ÑÑавÑнеÑо на пÑаг за ÑÐ°Ð·Ð¼ÐµÑ Ð¿Ñеди пÑÑÑ Ð½Ð° пÑлно заÑеждане. ÐзпÑаÑайÑе вÑиÑко над нÑколкоÑÑоÑин мегабайÑа пÑез ниваÑа на Direct File и ÑезеÑвиÑайÑе пÑлноÑо заÑеждане за ÑÑÑинÑко ÑеÑÑÑÑкÑÑÑиÑане на 64-биÑов пÑоÑÐµÑ Ñ Ð±ÑÐ´Ð¶ÐµÑ Ð·Ð° памеÑ. Този пÑаг пÑеобÑазÑва ÑÑива поÑади недоÑÑиг на Ð¿Ð°Ð¼ÐµÑ Ð² конÑÑолиÑÑемо ÑеÑение за маÑÑÑÑÑизаÑиÑ.
ÐоеÑо и ниво да обÑабоÑва задаÑаÑа, запиÑвайÑе ÑезÑлÑаÑа под вÑеменно име и го пÑеименÑвайÑе на кÑайноÑо мÑÑÑо едва Ñлед каÑо Ñе валидиÑа. Ðаполовина запиÑан Ñайл, намиÑÐ°Ñ Ñе под кÑайноÑо име, изглежда ÑоÑно каÑо валиден за ÑледваÑÐ¸Ñ ÐµÑап Ð¾Ñ Ð¿ÑоÑеÑа, а извикваниÑÑа на Direct File пÑавÑÑ Ñази пÑовеÑка изклÑÑиÑелно икономиÑна: поÑвÑÑждаванеÑо на Ð¸Ð·Ñ Ð¾Ð´Ð½Ð¸Ñ ÑезÑлÑÐ°Ñ Ðµ пÑовеÑка на манипÑлаÑоÑа Ñ ÐµÐ´Ð¸Ð½ Ñед код.
Direct File API Ñе доÑÑÐ°Ð²Ñ ÐºÐ°Ñо ÑаÑÑ Ð¾Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñа HotPDF за Delphi и C++Builder. ÐÑодÑкÑоваÑа ÑÑÑаниÑа ÑÑдÑÑжа вÑÑзка кÑм пÑÐ»Ð½Ð¸Ñ ÑпÑавоÑник Ñ ÑÑнкÑии, вклÑÑиÑелно извикваниÑÑа за инкÑеменÑално акÑÑализиÑане, показани ÑÑк.