ÐбединÑванеÑо или ÑазделÑнеÑо на двÑгигабайÑов PDF Ñайл по ÑÑандаÑÑÐ½Ð¸Ñ Ð½Ð°Ñин води до два оÑновни пÑоблема: загÑба на вÑеме и пÑепÑлване на адÑеÑноÑо пÑоÑÑÑанÑÑво. СÑандаÑÑниÑÑ Ð½Ð°Ñин вклÑÑва заÑеждане на вÑеки Ð²Ñ Ð¾Ð´ÑÑ Ñайл, обÑабоÑка и запиÑване на ÑезÑлÑаÑа. ÐÑоÑеÑÑÑ Ñе пÑÐ¾Ð²Ð°Ð»Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ пÑи заÑежданеÑо. Ð¡ÐºÐµÐ½ÐµÑ Ñ Ð°ÑÑ Ð¸Ð², койÑо пÑеминава Ð¾Ñ 300 на 600 DPI, ÑдвоÑва ÑвоÑÑа ÑазделиÑелна ÑпоÑобноÑÑ Ð¸ Ñе ÑвелиÑава около ÑеÑиÑи пÑÑи на диÑка. ÐоÑади Ñази пÑиÑина една и ÑÑÑа задаÑа за ÑглобÑване, коÑÑо пÑез годинаÑа е обÑабоÑвала 400 MB Ñайлове, запоÑва да пÑеÑоваÑва ÑиÑÑемаÑа веднага Ñом Ð²Ñ Ð¾Ð´ÑÑиÑÑ Ñайл Ð½Ð°Ð´Ñ Ð²ÑÑли един гигабайÑ, ÑеÑÑо доÑи Ñамо пÑи пÑебÑоÑване на ÑÑÑаниÑиÑе. СамаÑа задаÑа не е Ñложна: оÑваÑÑне, пÑебÑоÑване, Ð¸Ð·Ð±Ð¾Ñ Ð½Ð° диапазони и ÑÑединÑване. ÐÑлноÑо заÑеждане на обекÑноÑо дÑÑво обаÑе веÑе не е ÑазÑмно ÑеÑение пÑи ÑакÑв обем. PDFlibPas, PDF библиоÑекаÑа на losLab за Delphi и C++Builder, Ñе ÑпÑÐ°Ð²Ñ Ñ Ñова ÑÐ»Ð¾Ñ Ð·Ð° диÑекÑен доÑÑÑп (Direct Access): ÑÐ°Ð¼Ð¸Ð»Ð¸Ñ Ð¾Ñ ÑÑнкÑии Ñ Ð¿ÑеÑÐ¸ÐºÑ DA, поддÑÑжани Ð¾Ñ ÑÑÑийминг ÑеÑеÑ, койÑо Ð¾Ð±Ñ Ð¾Ð¶Ð´Ð° ÑаблиÑаÑа Ñ Ð¿ÑепÑаÑки (xref) на мÑÑÑо, вмеÑÑо да изгÑажда ÑÐµÐ»Ð¸Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð² памеÑÑа.
ÐÑде оÑива памеÑÑа пÑи пÑлно заÑеждане
ÐоÑмалноÑо заÑеждане на PDF ознаÑава анализиÑане на ÑаблиÑаÑа xref, пÑеобÑазÑване на вÑеки коÑвен Ð¾Ð±ÐµÐºÑ Ð² дÑÑвовидна ÑÑÑÑкÑÑÑа в памеÑÑа, декодиÑане на обекÑи и ÑвÑÑзване на ÑÑÑаниÑи, ÑÑиÑÑове и аноÑаÑии в обекÑи за манипÑлиÑане. Ðа пÑоÑеÑи на ÑедакÑиÑане Ñова е пÑавилноÑо ÑеÑение. Ðа обединÑване, ÑазделÑне и пÑовеÑка обаÑе Ñова е ÑиÑÑа загÑба. СканиÑан аÑÑ Ð¸Ð² Ð¾Ñ 30 000 ÑÑÑаниÑи може да ÑÑдÑÑжа милиони коÑвени обекÑи, докаÑо задаÑа за ÑазделÑне изиÑква ÑеÑене Ñамо на нÑколко ÑÑоÑин Ð¾Ñ ÑÑÑ : вÑзлиÑе на ÑÑÑаниÑиÑе в избÑÐ°Ð½Ð¸Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ и обекÑиÑе, кÑм коиÑо Ñе пÑепÑаÑаÑ.
СлоÑÑ Ð·Ð° диÑекÑен доÑÑÑп обÑÑÑа Ñози модел. DAOpenFile и DAOpenFileReadOnly анализиÑÐ°Ñ ÐºÑÐ°Ñ Ð½Ð° Ñайла (trailer) и ÑаблиÑаÑа xref (нÑколко килобайÑа в кÑÐ°Ñ Ð½Ð° Ñайла) и вÑÑÑÐ°Ñ Ð´ÐµÑкÑипÑÐ¾Ñ Ð½Ð° Ñайл. ÐбекÑиÑе Ñе извлиÑÐ°Ñ Ð¿Ñи поиÑкване (lazy fetch), когаÑо дадено извикване Ñе нÑждае Ð¾Ñ ÑÑÑ
. ÐÑакÑиÑеÑкиÑÑ ÑезÑлÑÐ°Ñ Ðµ, Ñе оÑваÑÑнеÑо на мÑлÑигигабайÑов Ñайл оÑнема Ñолкова вÑеме, колкоÑо и на малÑк Ñайл, а конÑÑмаÑиÑÑа на Ð¿Ð°Ð¼ÐµÑ Ð·Ð°Ð²Ð¸Ñи Ð¾Ñ Ð¾Ð±ÐµÐºÑиÑе, коиÑо използваÑе, а не Ð¾Ñ ÑÐµÐ»Ð¸Ñ Ð¾Ð±ÐµÐ¼ на Ñайла.
ÐÑовеÑка на голÑм Ñайл без заÑеждане
ШаблонÑÑ Ð¿Ð¾-Ð´Ð¾Ð»Ñ Ðµ Ð²Ð·ÐµÑ Ð¾Ñ ÑеÑÑовеÑе на ÑамаÑа библиоÑека за големи Ñайлове: оÑваÑÑне Ñамо за ÑеÑене, извлиÑане на инÑоÑмаÑÐ¸Ñ Ð¸ заÑваÑÑне. ÐÑÑво на докÑменÑа изобÑо не Ñе ÑÑздава в памеÑÑа:
var
Lib: TPDFlib;
Handle, Pages: Integer;
begin
Lib := TPDFlib.Create;
try
Handle := Lib.DAOpenFileReadOnly('archive-2025.pdf', '');
if Handle = 0 then
raise Exception.Create('Direct access open failed');
Pages := Lib.DAGetPageCount(Handle);
Writeln('pages : ', Pages);
Writeln('title : ', Lib.DAGetInformation(Handle, 'Title'));
Lib.DACloseFile(Handle);
finally
Lib.Free;
end;
end;
ÐÑепоÑÑÑиÑелно е да пÑедпоÑиÑаÑе Ñежима Ñамо за ÑеÑене винаги, когаÑо е вÑзможно: Ñой позволÑва пÑовеÑкаÑа да Ñе изпÑлнÑва, докаÑо дÑÑги пÑоÑеÑи Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ Ñайла, и ÑÑно опиÑва намеÑениеÑо на кода. СÑÑпка за пÑовеÑка, коÑÑо ÑлÑÑайно Ñе опиÑа да пÑомени докÑменÑа, Ñе Ñе пÑовали веднага, вмеÑÑо да повÑеди аÑÑ Ð¸Ð²Ð°.
PageRef е деÑкÑипÑÐ¾Ñ Ð½Ð° обекÑ, а не Ð½Ð¾Ð¼ÐµÑ Ð½Ð° ÑÑÑаниÑа
ÐодаванеÑо на ÑамоÑо ÑиÑло 250 вмеÑÑо деÑкÑипÑÐ¾Ñ Ð½Ñма да пÑедизвика гÑеÑка. То Ñе адÑеÑиÑа обекÑа, койÑо ÑлÑÑайно ÑÑоÑвеÑÑÑва на Ñази ÑÑойноÑÑ Ð½Ð° деÑкÑипÑоÑа. ÐÑи кÑÑÐ¼ÐµÑ Ñова Ñе Ñе пÑовали Ñвно, но в лоÑÐ¸Ñ ÑлÑÑай Ñе извлеÑе ÑекÑÑ Ð¾Ñ Ð³ÑеÑна ÑÑÑаниÑа в докÑменÑ, пÑедназнаÑен за клиенÑи. Ðко обвиваÑе ÑÐ»Ð¾Ñ DA в ÑобÑÑвена ÑÑлÑга, напÑавеÑе Ñова пÑеобÑазÑване задÑлжиÑелно: пÑиемайÑе номеÑа на ÑÑÑаниÑи на вÑ
ода на API, извиквайÑе веднага DAFindPage и използвайÑе Ñамо ÑеÑеÑенÑии (refs) вÑв вÑÑÑеÑÐ½Ð¸Ñ ÐºÐ¾Ð´.
PageRef := Lib.DAFindPage(Handle, 250); // page number -> object handle
if PageRef <> 0 then
begin
Text := Lib.DAExtractPageText(Handle, PageRef, 0);
Lib.DARenderPageToFile(Handle, PageRef, 5, 150, 'page250.png');
end;
ÐбединÑване на ÑÑоÑиÑи Ñайлове ÑÑез именован ÑпиÑÑк
Ðа два Ñайла ÑÑнкÑиÑÑа MergeFiles(First, Second, Output) е доÑÑаÑÑÑна. ÐакеÑноÑо ÑглобÑване обаÑе Ñе маÑабиÑа по-добÑе ÑÑез ÑпиÑÑÑи Ñ Ñайлове: ÑегиÑÑÑиÑаÑе вÑ
одÑÑиÑе Ñайлове под опÑеделено име на ÑпиÑÑк и Ñлед Ñова ги обединÑваÑе Ñ ÐµÐ´Ð½Ð¾ извикване.
Lib.AddToFileList('Statements', 'jan.pdf');
Lib.AddToFileList('Statements', 'feb.pdf');
Lib.AddToFileList('Statements', 'mar.pdf');
Lib.MergeFileList('Statements', 'q1-statements.pdf');
// Verify the result the cheap way: direct access again
Handle := Lib.DAOpenFileReadOnly('q1-statements.pdf', '');
Writeln('merged pages: ', Lib.DAGetPageCount(Handle));
Lib.DACloseFile(Handle);
ФамилиÑÑа за обединÑване ÑÑдÑÑжа ÑÑи ваÑианÑа, каÑо ÑазликаÑа не е Ñамо в ÑкоÑоÑÑÑа. MergeFileListFast пÑопÑÑка запазванеÑо на дÑÑвоÑо на ÑÑÑÑкÑÑÑаÑа; MergeFileListStrict налага ÑÑÑог Ñежим; веÑÑиÑÑа без ÑÑÑÐ¸ÐºÑ Ðµ баланÑиÑаниÑÑ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¿Ð¾ подÑазбиÑане. ÐпеÑаÑивноÑо пÑавило е: ако нÑкой Ð¾Ñ Ð²Ñ
одÑÑиÑе докÑменÑи е Tagged PDF (маÑкиÑан PDF), ÑиÑÑо ÑÑÑÑкÑÑÑа за доÑÑÑпноÑÑ ÑÑÑбва да Ñе запази (какÑвÑо е ÑлÑÑаÑÑ Ñ PDF/UA), използвайÑе ÑÑандаÑÑÐ½Ð¸Ñ Ð¸Ð»Ð¸ Strict ваÑианÑ, ÑÑй каÑо Fast безÑÑмно пÑемаÑ
ва дÑÑвоÑо на ÑÑÑÑкÑÑÑаÑа. Ðа обикновени ÑканиÑани аÑÑ
иви без маÑкиÑане, Fast пÑедоÑÑÐ°Ð²Ñ Ð±ÐµÐ·Ð¿Ð»Ð°Ñна пÑоизводиÑелноÑÑ. ÐземайÑе Ñова ÑеÑение ÑпоÑед вида на пÑоÑеÑа, а не по ÑÑмоÑÑение на ÑазÑабоÑÑика, и запиÑвайÑе Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ð½Ð¸Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð² Ñ
ÑонологиÑÑа на задаÑаÑа.
РазделÑне без заÑеждане: извлиÑане на диапазони
РазделÑнеÑо Ñледва ÑÑÑаÑа ÑилоÑоÑÐ¸Ñ Ð±ÐµÐ· заÑеждане. ФÑнкÑиÑÑа ExtractFilePages(InputFileName, Password, OutputFileName, RangeList) пÑеÑ
вÑÑÐ»Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ Ð¾Ñ ÑÑÑаниÑи диÑекÑно Ð¾Ñ Ñайл вÑв Ñайл ÑÑез ÑпиÑÑк Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¸ каÑо '1-500', '501-1000' или ÑелекÑии, Ñазделени ÑÑÑ Ð·Ð°Ð¿ÐµÑаи. ÐзÑоÑникÑÑ Ð½Ð¸ÐºÐ¾Ð³Ð° не Ñе пÑевÑÑÑа в обекÑно дÑÑво в памеÑÑа. ÐогаÑо докÑменÑÑÑ Ð²ÐµÑе е заÑеден по дÑÑги пÑиÑини, ExtractPageRanges ÑÑздава нов докÑÐ¼ÐµÐ½Ñ Ð² памеÑÑа Ð¾Ñ ÑекÑÑиÑ, а CopyPageRanges копиÑа диапазони Ð¾Ñ Ð´ÑÑг заÑеден докÑÐ¼ÐµÐ½Ñ Ð¿Ð¾ ID. Ðа ÑазделÑне на големи пеÑаÑни поÑоÑи на оÑделни оÑÑеÑи, ÑоÑмаÑа Ð¾Ñ Ñайл кÑм Ñайл е Ñози, койÑо пÑедоÑвÑаÑÑва заÑежданеÑо на 4 GB вÑ
одÑÑ Ñайл в опеÑаÑивнаÑа памеÑ.
Файлове Ñ Ð½ÐµÑÑоÑвеÑÑÑваÑа ÑÑÑÑкÑÑÑа
ÐÑоÑеÑиÑе за обÑабоÑка на големи Ñайлове Ñе ÑблÑÑÐºÐ²Ð°Ñ Ñ Ð¿Ð¾Ð²Ñедени Ñайлове много по-ÑеÑÑо Ð¾Ñ Ñези за малки Ñайлове, пÑоÑÑо заÑоÑо докÑменÑиÑе пÑÐµÐ¼Ð¸Ð½Ð°Ð²Ð°Ñ Ð¿Ñез повеÑе междинни ÑиÑÑеми. Ðве ÑоÑми на повÑеди изиÑÐºÐ²Ð°Ñ ÑпеÑиално внимание.
ÐÑÑво: измеÑÑени заглавни ÑаÑÑи (headers). Ðмейл ÑлÑзове и опаÑки за пеÑÐ°Ñ Ð¿Ð¾Ð½Ñкога добавÑÑ Ð±Ð°Ð¹Ñове пÑеди PDF ÑÑдÑÑжаниеÑо, Ñака Ñе маÑкеÑÑÑ %PDF веÑе не Ñе намиÑа на оÑмеÑÑване 0 и вÑÑко оÑмеÑÑване на xref вÑв Ñайла е гÑеÑно Ñ ÐµÐ´Ð½Ð°ÐºÐ²Ð° ÑÑойноÑÑ. СÑÑийминг ÑеÑеÑÑÑ Ð¾ÑкÑива Ñова и го докладва (ÑÑез DAShiftedHeader в плоÑÐºÐ¸Ñ API или ShiftedHeader в TSmartPDFReader), каÑо авÑомаÑиÑно компенÑиÑа оÑмеÑÑванеÑо пÑи ÑеÑене. СобÑÑвено ÑазÑабоÑениÑе изÑиÑÐ»ÐµÐ½Ð¸Ñ Ð½Ð° оÑмеÑÑÐ²Ð°Ð½Ð¸Ñ Ð¾Ð±Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¾ не пÑÐµÐ´Ð²Ð¸Ð¶Ð´Ð°Ñ Ñова, коеÑо води до клаÑиÑеÑÐºÐ¸Ñ ÑимпÑом: "кодÑÑ ÑабоÑи Ñ Ð²Ñеки Ñайл, койÑо ние генеÑиÑаме, но Ñе пÑÐ¾Ð²Ð°Ð»Ñ Ñ Ñайлове Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñ Ð¥".
ÐÑоÑо: повÑедени ÑаблиÑи Ñ Ð¿ÑепÑаÑки (xref). ФÑнкÑиÑÑа DACopyFile(InputFileName, OutputFileName, PageCount) пÑедава ÑÐµÐ»Ð¸Ñ Ñайл кÑм ново копие, докаÑо изгÑажда наново ÑаблиÑаÑа xref, каÑо вÑÑÑа бÑÐ¾Ñ ÑÑÑаниÑи каÑо ÑÑÑаниÑен пÑодÑкÑ. ÐзпÑлнениеÑо на Ñази ÑÑÑпка каÑо Ñаза на ноÑмализиÑане пÑеди пÑедаване на данни кÑм по-ÑÑÑог ÑоÑÑÑÐµÑ Ð¿ÑевÑÑÑа пеÑиодиÑниÑе гÑеÑки пÑи анализ в една пÑедвидима ÑÑÑпка за ÑемонÑ. РкогаÑо ÑÑÑбва да запиÑеÑе ваÑиÑе ÑедакÑии, ÑÑнкÑиÑÑа DAAppendFile ги запиÑва каÑо инкÑеменÑална акÑÑализаÑиÑ, добавÑйки нова ÑевизиÑ, вмеÑÑо да пÑезапиÑва гигабайÑи, коеÑо поддÑÑжа вÑемеÑо за Ð·Ð°Ð¿Ð¸Ñ Ð¿ÑопоÑÑионално на пÑомÑнаÑа, а не на обÑÐ¸Ñ ÑÐ°Ð·Ð¼ÐµÑ Ð½Ð° Ñайла.
ÐеÑайли за доÑÑавка: линеаÑизаÑÐ¸Ñ Ð¸ композиÑане
Ðве допÑлниÑелни вÑзможноÑÑи допÑÐ»Ð²Ð°Ñ Ð¿ÑоÑеÑа за обÑабоÑка на големи Ñайлове. ÐогаÑо ÑглобениÑÑ ÑезÑлÑÐ°Ñ Ñе Ñ
оÑÑва пÑез HTTP за пÑеглед в бÑаÑзÑÑ, ÑÑнкÑиÑÑа LinearizeFile ÑеоÑганизиÑа докÑменÑа за ÑÑÑийминг по диапазони Ð¾Ñ Ð±Ð°Ð¹Ñове (byte-range), Ñака Ñе пÑÑваÑа ÑÑÑаниÑа да Ñе покаже пÑеди пÑиклÑÑване на изÑеглÑнеÑо на ÑÐµÐ»Ð¸Ñ 500 MB Ñайл. ÐзпÑлнÑвайÑе Ñова каÑо Ñинална ÑÑÑпка, Ñлед вÑÑко обединÑване, ÑÑй каÑо вÑÑка поÑледваÑа модиÑикаÑÐ¸Ñ Ð´Ðµ-линеаÑизиÑа Ñайла оÑново. РкогаÑо Ñе нÑждаеÑе Ð¾Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð·Ð¸Ñане на докÑменÑи, а не Ð¾Ñ Ð¿ÑоÑÑо ÑÑединÑване (напÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÑÑавÑне на заглавна ÑÑÑаниÑа зад вÑеки оÑÑÐµÑ Ð¸Ð»Ð¸ комбиниÑане на две изÑ
одни ÑÑÑаниÑи в един лиÑÑ), DACapturePage пÑевÑÑÑа вÑÑка ÑÑÑаниÑа в Ñаблон за многокÑаÑна ÑпоÑÑеба, койÑо DADrawCapturedPage поÑÑÐ°Ð²Ñ Ð²ÑÑÑ
Ñ Ñелева ÑÑÑаниÑа в пÑоизволен пÑавоÑгÑлник, без да Ñе налага пÑлно заÑеждане на мÑлÑигигабайÑÐ¾Ð²Ð¸Ñ Ð¸Ð·ÑоÑник.
ÐгÑаниÑÐµÐ½Ð¸Ñ Ð¸ какво оÑÑава Ñамо за ÑеÑене
СамиÑÑ Ñайлов ÑоÑÐ¼Ð°Ñ Ñе ÑблÑÑква Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ Ð¼Ð½Ð¾Ð³Ð¾ пÑеди Direct Access ÑлоÑ. ÐÑмеÑÑваниÑÑа Ñа Ð¾Ñ Ñип Int64 в ÑÐµÐ»Ð¸Ñ Ñлой DA, Ñака Ñе ÑеалниÑе огÑаниÑÐµÐ½Ð¸Ñ Ñа налиÑноÑо диÑково пÑоÑÑÑанÑÑво и 10-ÑиÑÑеноÑо поле за оÑмеÑÑване на xref в клаÑиÑеÑкиÑе ÑаблиÑи Ñ Ð¿ÑепÑаÑки (коиÑо не Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ Ð¿Ð¾ÑоÑи). ÐÑлÑигигабайÑовиÑе ÑканиÑани аÑÑ Ð¸Ð²Ð¸ Ñа обиÑайна пÑакÑика в ÑеалноÑÑÑа, а конÑÑмаÑиÑÑа на Ð¿Ð°Ð¼ÐµÑ Ð¾ÑÑава огÑаниÑена незавиÑимо Ð¾Ñ ÑазмеÑа на Ñайла, ÑÑй каÑо обекÑиÑе Ñе ÑеÑÐ°Ñ Ñамо пÑи повикване.
Ðва вÑпÑоÑа вÑÐ·Ð½Ð¸ÐºÐ²Ð°Ñ Ð´Ð¾ÑÑаÑÑÑно ÑеÑÑо, за да полÑÑÐ°Ñ Ð´Ð¸ÑекÑен оÑговоÑ. ÐбединÑванеÑо по ÑÑандаÑÑÐ½Ð¸Ñ Ð¿ÑÑ Ð·Ð°Ð¿Ð°Ð·Ð²Ð° ÑÑÑÑкÑÑÑаÑа на докÑменÑа, Ñака Ñе оÑмеÑкиÑе и вÑÑзкиÑе оÑелÑваÑ; Fast ваÑианÑÑÑ Ðµ Ñози, койÑо пÑемаÑ
ва дÑÑвоÑо на ÑÑÑÑкÑÑÑаÑа в полза на ÑкоÑоÑÑÑа, коеÑо е и пÑиÑинаÑа да го огÑаниÑиÑе до немаÑкиÑани докÑменÑи. ÐобÑа пÑакÑика е да оÑвоÑиÑе Ð¾Ð±ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñайл, да пÑовеÑиÑе ÑÑÑÑкÑÑÑаÑа на оÑмеÑкиÑе и нÑкои вÑÑÑеÑни вÑÑзки, пÑеди да го изпÑаÑиÑе. Що Ñе оÑнаÑÑ Ð´Ð¾ ÑедакÑиÑанеÑо: ÑÑÑеÑÑвÑва полезен Ð±Ð°Ð»Ð°Ð½Ñ Ð¼ÐµÐ¶Ð´Ñ Ð¿ÑовеÑкаÑа Ñамо за ÑеÑене и пÑлноÑо заÑеждане. ÐпеÑаÑии на ниво ÑÑÑаниÑа ÑабоÑÑÑ Ð´Ð¸ÑекÑно Ñ Ð´ÐµÑкÑипÑоÑа (каÑо DARotatePage, DAMovePage, DAHidePage), заедно Ñ ÑеÑенеÑо на полеÑа на ÑоÑмÑлÑÑи, а DAAppendFile запиÑва Ñези ÑедакÑии каÑо инкÑеменÑална ÑевизиÑ. РедакÑиÑане на ниво ÑÑдÑÑжание (вÑиÑко, коеÑо пÑезапиÑва гÑаÑиÑниÑе опеÑаÑоÑи в ÑÑÑаниÑаÑа) вÑе оÑе изиÑква пÑÐ»Ð½Ð¸Ñ Ñлой за докÑменÑи.
СвÑÑзани ÑÑаÑии
Ðко ваÑиÑÑ Ð¾Ð±ÐµÐ´Ð¸Ð½ÐµÐ½ докÑÐ¼ÐµÐ½Ñ ÑÑÑбва да оÑÑане доÑÑÑпен, конÑепÑиÑÑа за дÑÑво на ÑÑÑÑкÑÑÑаÑа е Ñазгледана в ÑÑаÑиÑÑа за доÑÑÑпноÑÑ Ð½Ð° Tagged PDF, коÑÑо обÑÑнÑва какво ÑоÑно би пÑÐµÐ¼Ð°Ñ Ð½Ð°Ð» Fast ваÑианÑÑÑ Ð½Ð° обединÑване. Ðа извлиÑане на ÑÑдÑÑжание Ð¾Ñ Ñазделени диапазони вижÑе ÑÑководÑÑвоÑо за извлиÑане на ÑекÑÑ, изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ ÑÑиÑÑове.
ÐÑлниÑÑ ÑпиÑÑк Ñ ÑÑнкÑии за диÑекÑен доÑÑÑп Ñе ÑазпÑоÑÑÑанÑва Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекаÑа; веÑÑии и веÑÑии за ÑеÑÑване можеÑе да намеÑиÑе на пÑодÑкÑоваÑа ÑÑÑаниÑа на PDFlibPas.