PDF 1.5 вÑведе две ÑÑÑÑкÑÑÑи за ÑÑÑ
Ñанение, коиÑо по-ÑанниÑÑ Ñайлов ÑоÑÐ¼Ð°Ñ Ð½Ðµ можеÑе да изÑази: поÑок Ð¾Ñ Ð¾Ð±ÐµÐºÑи (object stream) и поÑок Ð¾Ñ ÐºÑÑÑÑоÑани пÑепÑаÑки (cross-reference stream). ÐоÑокÑÑ Ð¾Ñ Ð¾Ð±ÐµÐºÑи е единиÑен Flate-компÑеÑиÑан конÑейнеÑ, маÑкиÑан Ñ /Type /ObjStm, койÑо ÑÑдÑÑжа много малки коÑвени обекÑи, пакеÑиÑани един Ñлед дÑÑг, вмеÑÑо да ги ÑазпÑÑÑква в ÑÑлоÑо на Ñайла. ÐоÑокÑÑ Ð¾Ñ ÐºÑÑÑÑоÑани пÑепÑаÑки пÑедÑÑавлÑва ÑпÑавоÑнаÑа ÑаблиÑа на Ñайла, пÑенапиÑана каÑо компÑеÑиÑан двоиÑен код Ñ Ð¿Ð¾Ð»ÐµÑа Ñ Ð¿Ñоменлива ÑиÑина, замеÑÑвайки ASCII ÑаблиÑаÑа Ñ ÑикÑиÑана ÑиÑина, коÑÑо завÑÑÑваÑе вÑеки PDF докÑÐ¼ÐµÐ½Ñ Ð´Ð¾ веÑÑÐ¸Ñ 1.4. Те Ñе Ð´Ð²Ð¸Ð¶Ð°Ñ Ð·Ð°ÐµÐ´Ð½Ð¾. След каÑо обекÑиÑе Ñе ÑгÑÐ½Ð°Ñ Ð² поÑок, ÑÑаÑаÑа ÑекÑÑова ÑаблиÑа веÑе не може да ги адÑеÑиÑа, Ñака Ñе двоиÑнаÑа xref ÑаблиÑа ÑÑÑбва да вÑÑви Ñ ÑÑÑ
.
СÑавнеÑе Ñова Ñ ÐºÐ»Ð°ÑиÑеÑкоÑо оÑоÑмление и ÑпеÑÑениÑе ÑеÑÑÑÑи ÑÑÐ°Ð²Ð°Ñ Ð»ÐµÑни за забелÑзване. ÐÑв PDF 1.4 Ñайл вÑеки коÑвен Ð¾Ð±ÐµÐºÑ Ñе намиÑа некомпÑеÑиÑан зад ÑобÑÑвено obj заглавие, а ÑаблиÑаÑа в кÑÐ°Ñ Ð·Ð°ÐµÐ¼Ð° ÑоÑно 20 байÑа ASCII код на запиÑ, каÑо компÑеÑиÑанеÑо е забÑанено. ÐокÑÐ¼ÐµÐ½Ñ Ñ 200 000 обекÑа ноÑи около 4 MB данни за кÑÑÑÑоÑани пÑепÑаÑки, пÑеди да бÑде изÑеÑÑан доÑи един Ñимвол, каÑо вÑиÑки некомпÑеÑиÑани Ñела на ÑеÑниÑи Ñа Ñазположени оÑгоÑе. PDF 1.5 аÑакÑва и двеÑе ÑÑойноÑÑи едновÑеменно: ÑеÑниÑиÑе Ñе ÑгÑÐ²Ð°Ñ Ð²Ñв Flate конÑейнеÑи, а ÑаблиÑаÑа Ð¾Ñ 4 MB Ñе Ñвива до нÑколкоÑÑоÑин килобайÑа двоиÑен код. СÑандаÑÑÑÑ ISO 32000-1 деÑиниÑа Ñези две ÑÑÑÑкÑÑÑи в §7.5.7 и §7.5.8.
ÐÑде вÑÑÑноÑÑ Ñе ÑÑеÑа ÑпеÑÑÑванеÑо
ÐоÑоÑиÑе Ð¾Ñ Ð¾Ð±ÐµÐºÑи заÑÑÐ³Ð°Ñ Ñамо обекÑи, коиÑо не Ñа поÑоÑи, Ñака Ñе Ñе компÑеÑиÑÐ°Ñ ÑÑÑÑкÑÑÑаÑа, а не пикÑелиÑе. СÑдÑÑжаниеÑо на ÑÑÑаниÑиÑе веÑе беÑе Flate-компÑеÑиÑано пÑеди веÑÑÐ¸Ñ 1.5, а данниÑе за изобÑажениÑÑа ноÑÑÑ Ñвои ÑобÑÑвени кодеÑи, поÑади коеÑо бÑоÑÑÑа Ñ Ð¼Ð½Ð¾Ð³Ð¾ изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑÑи не Ñе пÑÐ¾Ð¼ÐµÐ½Ñ Ð¿Ð¾ ÑазмеÑ. ФайловеÑе, коиÑо намалÑÐ²Ð°Ñ Ð´ÑаÑÑиÑно, Ñа Ñези Ñ Ñежка ÑÑÑÑкÑÑÑа: AcroForms Ñ Ñ Ð¸Ð»Ñди ÑеÑниÑи на полеÑа, дÑлбоки дÑÑвовидни ÑÑÑÑкÑÑÑи на Ñаздели (outlines), ÑÑÑÑкÑÑÑни елеменÑи на маÑкиÑан PDF (tagged PDF). Тези обекÑи Ñа малки, многобÑойни и поÑÑи иденÑиÑни Ð¿Ð¾Ð¼ÐµÐ¶Ð´Ñ Ñи, и Ñова повÑоÑение е ÑоÑно Ñова, коеÑо Flate използва, Ñлед каÑо Ñе Ð¿Ð¾Ð¿Ð°Ð´Ð½Ð°Ñ Ð² един бÑÑеÑ, вмеÑÑо да Ñе ÑазпÑÑÑÐ½Ð°Ñ Ð¸Ð· ÑÑлоÑо Ñ Ð²Ð¼ÐµÑÑени Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ ÑÑÑ .
ÐеÑно е да Ñе подÑени колко голÑма ÑаÑÑ Ð¾Ñ ÑÑаÑÐ¸Ñ Ñайл е излиÑно наÑоваÑване (overhead). ÐÑÑ Ð¸Ð² Ñ ÑоÑмÑлÑÑи, койÑо е пÑеÑÑÑпÑл години ÑедакÑии, може да изÑÐ°Ð·Ñ Ð¾Ð´Ð²Ð° над половинаÑа Ð¾Ñ Ð±Ð°Ð¹ÑовеÑе Ñи за Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ð½Ð° ÑеÑниÑи, xref запÑлване и веÑÑии, коиÑо никой ÑиÑаÑел никога нÑма да погледне. ÐвеÑе Ñ Ð°ÑакÑеÑиÑÑики ÑÑк вÑзÑÑановÑÐ²Ð°Ñ Ð¿ÑÑвиÑе две Ð¾Ñ ÑÑÑ . ТÑеÑаÑа, наÑÑÑпаниÑе веÑÑии, Ñе поддава Ñамо на компÑеÑиÑане (compaction), когаÑо ÑайлÑÑ Ð²ÐµÑе не ÑÑÑбва да помни ÑобÑÑвенаÑа Ñи иÑÑоÑиÑ.
Ð HotPDF акÑивиÑаÑе и двеÑе опÑии ÑÑез двойка ÑвойÑÑва, каÑо наÑинÑÑ, по койÑо Ñе завиÑÑÑ ÐµÐ´Ð½Ð¾ Ð¾Ñ Ð´ÑÑго, има по-голÑмо знаÑение Ð¾Ñ Ñеда, в койÑо ги запиÑваÑе:
var
Pdf: THotPDF;
begin
Pdf := THotPDF.Create(nil);
try
Pdf.FileName := 'catalog-2026.pdf';
Pdf.UseXRefStream := True; // binary xref, prerequisite for ObjStm
Pdf.UseObjectStreams := True; // pack objects into /Type /ObjStm
Pdf.BeginDoc;
Pdf.CurrentPage.SetFont('Arial', [], 11);
Pdf.CurrentPage.TextOut(50, 760, 0, 'Compressed structure demo');
Pdf.EndDoc; // emits XRefStm + ObjStm containers
finally
Pdf.Free;
end;
end;
СвойÑÑвоÑо UseObjectStreams изиÑква UseXRefStream да бÑде зададено на True. Ðо компÑеÑиÑан Ð¾Ð±ÐµÐºÑ Ñе доÑÑига ÑÑез xref Ð·Ð°Ð¿Ð¸Ñ Ð¾Ñ Ñип 2, койÑо запиÑва номеÑа на поÑока Ð¾Ñ Ð¾Ð±ÐµÐºÑи плÑÑ Ð¸Ð½Ð´ÐµÐºÑ, а клаÑиÑеÑкиÑÑ 20-байÑов ÑекÑÑов Ñед нÑма мÑÑÑо за ÑÑÑ
Ñанение на Ñази двойка. Така Ñе UseObjectStreams Ñамо по Ñебе Ñи не води до видим ÑезÑлÑаÑ. ÐонÑигÑÑаÑиÑÑа, коÑÑо ÑабоÑи, изиÑква и дваÑа Ñлага да бÑÐ´Ð°Ñ Ð·Ð°Ð´Ð°Ð´ÐµÐ½Ð¸ пÑеди BeginDoc. ÐадайÑе ги Ñлед BeginDoc и HotPDF веÑе Ñе Ñе е обвÑÑзал Ñ Ð¿Ð¾-ÑÑаÑоÑо оÑоÑмление.
ÐаÑо и двеÑе наÑÑÑойки по подÑазбиÑане Ñа изклÑÑени
HotPDF оÑÑÐ°Ð²Ñ Ð¸ двеÑе ÑвойÑÑва зададени на False по подÑазбиÑане, а пÑиÑинаÑа Ñе кÑие в ÑÑвмеÑÑимоÑÑÑа ÑÑÑ ÑÑаÑи ÑиÑÑеми по-наÑаÑÑк по веÑигаÑа. ЧеÑеÑ, койÑо ÑазбиÑа Ñамо PDF 1.4, не ÑÑобÑава, Ñе не може да обÑабоÑва компÑеÑиÑани обекÑи. Той Ñе ÑблÑÑква Ñ xref поÑок, не намиÑа ниÑо една Ð¾Ñ Ð¾ÑакваниÑе клÑÑови дÑми в кÑÐ°Ñ Ð½Ð° Ñайла (trailer keywords) и ÑÑобÑава за повÑедена ÑаблиÑа Ñ ÐºÑÑÑÑоÑани пÑепÑаÑки или пÑоÑÑо оÑказва да оÑвоÑи Ñайла. Ðко изÑ
одниÑÑ Ð²Ð¸ поÑок оÑива кÑм ÑÑаÑа ÑÐ°ÐºÑ ÑиÑÑема, ÑизиÑеÑки пÑинÑÐµÑ Ñ Ð²Ð³Ñаден инÑеÑпÑеÑаÑÐ¾Ñ Ð¸Ð»Ð¸ паÑÑеÑ, напиÑан по ÑпеÑиÑикаÑиÑÑа 1.4 пÑеди деÑеÑилеÑие, оÑÑавеÑе и дваÑа Ñлага изклÑÑени за Ñози канал и Ñе пÑимиÑеÑе Ñ Ð¿Ð¾-Ð³Ð¾Ð»ÐµÐ¼Ð¸Ñ ÑÐ°Ð·Ð¼ÐµÑ Ð½Ð° Ñайла. Ðа аÑÑ
ивно ÑÑÑ
Ñанение и ÑазпÑоÑÑÑанение в мÑежаÑа, кÑдеÑо вÑеки маÑов ÑеÑÐµÑ Ð¿Ð¾Ð´Ð´ÑÑжа PDF 1.5 Ð¾Ñ Ð´Ð²Ð°Ð´ÐµÑÐµÑ Ð³Ð¾Ð´Ð¸Ð½Ð¸ наÑам, вклÑÑванеÑо им е компÑеÑиÑ, коÑÑо полÑÑаваÑе поÑÑи безплаÑно.
Ðма и вÑоÑиÑен еÑекÑ, за койÑо Ñи ÑÑÑÑва да инÑоÑмиÑаÑе екипа Ñи за поддÑÑжка. След каÑо ÑеÑниÑиÑе Ñа пакеÑиÑани в поÑоÑи Ð¾Ñ Ð¾Ð±ÐµÐºÑи, ÑÑавнÑванеÑо на два генеÑиÑани Ñайла Ð±Ð°Ð¹Ñ Ð¿Ð¾ Ð±Ð°Ð¹Ñ Ð³Ñби вÑÑкакÑв ÑмиÑÑл, ÑÑй каÑо пÑомÑнаÑа на едно поле може да пÑекомпÑеÑиÑа (re-Flate) ÑÐµÐ»Ð¸Ñ ÐºÐ¾Ð½ÑÐµÐ¹Ð½ÐµÑ Ð¸ да ÑазмеÑÑи вÑиÑко Ñлед него. СÑавнÑвайÑе Ñакива Ñайлове по ÑÑдÑÑжание на обекÑиÑе, а не ÑÑез двоиÑно ÑÑавнение.
ÐнкÑеменÑални акÑÑализаÑии и байÑовиÑе оÑмеÑÑваниÑ, коиÑо Ñе заÑиÑаваÑ
ЦиÑÑовиÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñ Ð¾Ð±Ñ
ваÑа изÑиÑен диапазон /ByteRange: два инÑеÑвала Ð¾Ñ ÑизиÑеÑÐºÐ¸Ñ Ñайл, зададени каÑо абÑолÑÑни байÑови оÑмеÑÑÐ²Ð°Ð½Ð¸Ñ (byte offsets), вÑÑÑ
Ñ ÐºÐ¾Ð¸Ñо е изÑиÑлен дайджеÑÑÑÑ (digest) на CMS. ÐÑенапиÑеÑе Ñайла, доÑи в неÑо, коеÑо изглежда иденÑиÑно на екÑана, и вÑиÑки Ñези оÑмеÑÑÐ²Ð°Ð½Ð¸Ñ Ñе Ñе пÑемеÑÑÑÑ. ÐайджеÑÑÑÑ Ð²ÐµÑе не ÑÑвпада и подпиÑÑÑ Ñе оÑÑиÑа каÑо повÑеден. ТоÑно Ñози Ð¿Ð¾Ð´Ð¿Ð¸Ñ ÑеÑава ÑÑандаÑÑÑÑ ISO 32000-1 §7.5.6 ÑÑез инкÑеменÑалниÑе акÑÑализаÑии. ÐовиÑе и пÑоменениÑе обекÑи Ñе добавÑÑ Ñлед ÑÑÑеÑÑвÑваÑÐ¸Ñ Ð¼Ð°ÑÐºÐµÑ %%EOF, Ñлед коеÑо Ñе запиÑва нова ÑекÑÐ¸Ñ Ð·Ð° кÑÑÑÑоÑани пÑепÑаÑки, ÑийÑо Ð·Ð°Ð¿Ð¸Ñ /Prev ÑоÑи обÑаÑно кÑм пÑедиÑниÑ. ÐÑигиналниÑе байÑове никога не Ñе пÑоменÑÑ, Ñака Ñе подпиÑанаÑа веÑÑÐ¸Ñ Ð¾ÑÑава пÑовеÑима и Acrobat може да пÑедÑÑави вÑÑка подпиÑана веÑÑÐ¸Ñ Ð¿Ð¾Ð¾Ñделно в панела за подпиÑи.
HotPDF пÑедоÑÑÐ°Ð²Ñ Ð´Ð¾ÑÑÑп до Ñова ÑÑез ÑÐ²Ð¾Ñ ÑобÑÑвена ÑоÑка на влизане:
Pdf.BeginIncrementalUpdate('contract-signed.pdf');
Pdf.AddPage;
Pdf.CurrentPage.SetFont('Arial', [], 10);
Pdf.CurrentPage.TextOut(50, 760, 0, 'Addendum recorded 2026-06-11');
Pdf.SaveIncrementalUpdate('contract-updated.pdf'); // appends the delta only
Ðве неÑа ÑеÑÑо заÑÑÑднÑÐ²Ð°Ñ ÑазÑабоÑÑиÑиÑе. ÐеÑодÑÑ BeginIncrementalUpdate ÑÑÑбва да полÑÑи оÑигиналноÑо име на Ñайла, ÑÑй каÑо добавенаÑа xref ÑекÑÐ¸Ñ Ð·Ð°Ð¿Ð¸Ñва оÑмеÑÑваниÑ, коиÑо Ð¸Ð¼Ð°Ñ ÑмиÑÑл Ñамо ÑпÑÑмо Ñези ÑоÑни оÑигинални байÑове. ÐаÑоÑеÑе го кÑм пÑеименÑвано или оÑново запиÑано копие и оÑмеÑÑваниÑÑа Ñе опиÑÐ²Ð°Ñ Ñайл, койÑо веÑе не ÑÑÑеÑÑвÑва. ÐÑвен Ñова запиÑÑÑ Ð¿Ð¾ ÑÑÑÑкÑÑÑа е Ñамо за добавÑне (append-only), Ñака Ñе ÑезÑлÑаÑÑÑ Ð²Ð¸Ð½Ð°Ð³Ð¸ е по-голÑм Ð¾Ñ Ð²Ñ
одÑÑÐ¸Ñ Ñайл. Този ÑаÑÑеж не е излиÑен ÑазÑ
од, койÑо ÑÑÑбва да Ñе опÑимизиÑа. Това е ÑÑÑоÑо ÑвойÑÑво, коеÑо запазва пÑедиÑниÑе подпиÑани веÑÑии непокÑÑнаÑи.
ÐодиÑиÑиÑанеÑо на заÑеден Ñайл ÑÑава ÑÑез LoadFromFile
РазÑабоÑÑиÑиÑе, коиÑо Ñе Ð·Ð°Ð¿Ð¾Ð·Ð½Ð°Ð²Ð°Ñ Ñ HotPDF за пÑÑви пÑÑ ÑÑез Ð½ÐµÐ³Ð¾Ð²Ð¸Ñ API за генеÑиÑане, ÑеÑÑо Ñе ÑблÑÑÐºÐ²Ð°Ñ Ñ ÐºÐ¾Ð½ÐºÑеÑна ÑÑÑдноÑÑ. BeginDoc оÑваÑÑ Ð½Ð°Ð¿Ñлно нов докÑменÑ, коеÑо е гÑеÑниÑÑ Ð¸Ð½ÑÑÑÑменÑ, когаÑо иÑкаÑе да пÑомениÑе веÑе ÑÑÑеÑÑвÑÐ²Ð°Ñ ÑакÑв. РедакÑиÑанеÑо на ÑÑÑеÑÑвÑÐ²Ð°Ñ Ñайл Ñе извÑÑÑва вмеÑÑо Ñова ÑÑез Ð¸Ð·Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ Ð·Ð° заÑеден докÑменÑ:
PageCount := Pdf.LoadFromFile('base.pdf');
Pdf.InsertPagesFromDocument(OtherDoc, '1-3', 5); // pages 1-3 after page 5
Pdf.MovePage(2, 5);
Pdf.SaveLoadedDocument('modified.pdf');
СмеÑеÑе двеÑе дейÑÑÐ²Ð¸Ñ Ð¸ ÑезÑлÑаÑÑÑ Ñе бÑде изÑ
оден Ñайл, койÑо ÑÑдÑÑжа ваÑеÑо ново ÑÑдÑÑжание, но ниÑо Ð¾Ñ Ð¾Ñигинала, ÑÑй каÑо BeginDoc Ñ Ð»ÐµÐºÐ¾Ñа изгÑажда нов докÑÐ¼ÐµÐ½Ñ Ð´Ð¾ Ñози, койÑо вÑÑваÑе, Ñе ÑедакÑиÑаÑе. ÐÑзпÑиемайÑе LoadFromFile ÑÑÑ SaveLoadedDocument каÑо един Ð½Ð°Ð±Ð¾Ñ Ð¾Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸, а BeginDoc Ñ EndDoc â?каÑо дÑÑг. Ð ÑÑина, коÑÑо използва и дваÑа набоÑа ÑÑеÑÑ ÐµÐ´Ð¸Ð½ и ÑÑÑ Ñайл, поÑÑи винаги е погÑеÑна.
Ðога да Ñе компÑеÑиÑа добавен Ñайл
ÐапиÑванеÑо Ñип âÑамÐ?добавÑнеâ?води до поÑÑепенно наÑÑÑпване на обем. Ðжедневна задаÑа, коÑÑо поÑÑÐ°Ð²Ñ ÐµÐ´Ð¸Ð½ Ñед за ÑÑаÑÑÑ Ð²ÑÑÑ Ñ ÐµÐ´Ð¸Ð½ и ÑÑÑ PDF, пÑоизвежда 365 веÑÑии за една година и вÑÑка веÑÑÐ¸Ñ Ð²Ð»Ð°Ñи нова xref ÑекÑÐ¸Ñ Ð·Ð°Ð´ Ñебе Ñи. ÐогаÑо Ñази иÑÑоÑÐ¸Ñ Ð²ÐµÑе не е полезна и никой Ð¿Ð¾Ð´Ð¿Ð¸Ñ Ð²Ñв Ñайла не ÑÑÑбва да бÑде запазен, можеÑе да пÑÐµÐ¼Ð°Ñ Ð½ÐµÑе веÑÑииÑе (flatten), каÑо пÑезапиÑеÑе ÑÐµÐ»Ð¸Ñ Ñайл пÑез пÑÑÑ Ð·Ð° заÑеден докÑменÑ:
Pdf.LoadFromFile('stamped.pdf');
Pdf.SaveLoadedDocument('compacted.pdf');
Това повÑоÑно запиÑване е пÑлно пÑенапиÑване. То изÑиÑно Ð¸Ð·Ñ Ð²ÑÑÐ»Ñ Ð¿ÑедиÑниÑе веÑÑии и повÑежда вÑеки подпиÑ, оÑÑанал вÑв Ñайла, Ñака Ñе го поÑÑавеÑе зад ÑÑÑиÑе конÑÑоли за доÑÑÑп, коиÑо пÑилагаÑе кÑм вÑÑка дÑÑга деÑÑÑÑкÑивна ÑÑÑпка. Ðдно пÑоизводÑÑвено пÑавило, коеÑо Ñе е доказало: компÑеÑиÑайÑе, когаÑо бÑоÑÑ Ð½Ð° веÑÑииÑе пÑемине опÑеделен пÑаг или когаÑо добавеноÑо излиÑно наÑоваÑване Ð½Ð°Ð´Ñ Ð²ÑÑли опÑеделен дÑл Ð¾Ñ Ð¾ÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ñайл, и никога не компÑеÑиÑайÑе докÑменÑ, в ÑийÑо панел за подпиÑи има ÑегиÑÑÑиÑани данни.
ÐÑовеÑка на ÑезÑлÑаÑа пÑеди изпÑаÑане
ÐÑовеÑкаÑа на Ñези две ÑÑнкÑии е ÑÑвÑем конкÑеÑна. ÐÑвоÑеÑе ÑезÑлÑаÑа в Adobe Acrobat и поÑвÑÑдеÑе ÑÑи неÑа: ÑвойÑÑваÑа на докÑменÑа Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ñ PDF 1.5 или по-нова веÑÑиÑ, Ñлед каÑо поÑоÑиÑе Ð¾Ñ Ð¾Ð±ÐµÐºÑи Ñа вклÑÑени; панелÑÑ Ð·Ð° подпиÑи вÑе оÑе валидиÑа вÑÑка пÑедиÑна подпиÑана веÑÑÐ¸Ñ Ñлед инкÑеменÑално акÑÑализиÑане; бÑоÑÑ Ð½Ð° ÑÑÑаниÑиÑе и оÑмеÑкиÑе (bookmarks) Ñа пÑеминали невÑедими пÑез ÑикÑла на заÑеждане, пÑомÑна и запиÑване. Ðа Ð¸Ð·Ñ Ð¾Ð´Ð½Ð¸ докÑменÑи за аÑÑ Ð¸Ð²Ð¸Ñане изпÑаÑеÑе Ñайла и пÑез veraPDF, ÑÑй каÑо компÑеÑиÑанаÑа xref ÑаблиÑа е ÑоÑно Ñипа ÑÑÑÑкÑÑÑа, коÑÑо ÑÑÑогиÑÑ Ð²Ð°Ð»Ð¸Ð´Ð°ÑÐ¾Ñ Ð¸Ð·Ñледва по-внимаÑелно, оÑколкоÑо вÑеки по-ÑолеÑанÑен ÑеÑеÑ. Ðко ÑабоÑаÑа ви вклÑÑва и много големи Ð²Ñ Ð¾Ð´ÑÑи данни, меÑодиÑе за инÑпекÑÐ¸Ñ Ð² наÑеÑо ÑÑководÑÑво за Direct File API за големи PDF ÑабоÑни пÑоÑеÑи Ñе комбиниÑÐ°Ñ Ð¾ÑлиÑно Ñ Ð¸Ð½ÐºÑеменÑалноÑо запиÑване, а Ð¼ÐµÑ Ð°Ð½Ð¸ÐºÐ°Ñа на подпиÑиÑе зад байÑовиÑе диапазони, ÑпоменаÑи по-гоÑе, е Ñазгледана подÑобно в ÑÑаÑиÑÑа за ÑиÑÑови подпиÑи и PAdES в HotPDF.
РдвеÑе ÑÑнкÑии Ñе доÑÑавÑÑ ÐºÐ°Ñо ÑаÑÑ Ð¾Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñа HotPDF за Delphi и C++Builder, заедно Ñ API за генеÑиÑане, ÑоÑмÑлÑÑи, ÑиÑÑиÑане и подпиÑване, Ñазгледани на дÑÑги меÑÑа в Ñози блог. ÐÑодÑкÑоваÑа ÑÑÑаниÑа ÑÑдÑÑжа вÑÑзка кÑм пÑÐ»Ð½Ð¸Ñ ÑпÑавоÑник за API, ако иÑкаÑе да ÑÑпоÑÑавиÑе гоÑниÑе Ð¸Ð·Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ Ñ Ð²Ð°ÑÐ¸Ñ ÑобÑÑвен ÑÑÑбопÑовод за обÑабоÑка на докÑменÑи.