ТÑи библиоÑеки. ТÑи ÑазлиÑни задаÑи. ÐзбоÑÑÑ Ð½Ð° гÑеÑнаÑа ви коÑÑва ÑедмиÑи в ÑÑÑÑене на заобиколни ÑеÑениÑ, а избоÑÑÑ Ð½Ð° ÑÑиÑе, когаÑо ви ÑÑÑбва Ñамо една, ви ноÑи допÑлниÑелни ÑÐ°Ð·Ñ Ð¾Ð´Ð¸ за поддÑÑжка, коиÑо не ÑÑе пÑедвидили в бÑджеÑа Ñи. ÐÑо диÑекÑно опиÑание на Ñова какво вÑÑÑноÑÑ Ð¿Ñави вÑÑка PDF библиоÑека на losLab, кÑде Ñе впиÑва и кÑде пÑедава ÑаÑеÑаÑа на дÑÑгиÑе.
HotPDF: ÑÑздаване на PDF Ð¾Ñ Ð½ÑлаÑа в Delphi
HotPDF е Ñоден VCL ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð·Ð° генеÑиÑане на PDF докÑменÑи. ÐеговиÑÑ Ð¼Ð¾Ð´ÐµÐ» е импеÑаÑивен и оÑиенÑиÑан кÑм ÑÑÑаниÑиÑе: конÑÑÑÑиÑаÑе инÑÑанÑÐ¸Ñ Ð½Ð° THotPDF, задаваÑе ÑвойÑÑва на докÑменÑа, извикваÑе BeginDoc, ÑиÑÑваÑе вÑÑÑ
Ñ CurrentPage, добавÑÑе ÑÑÑаниÑи пÑи необÑ
одимоÑÑ Ð¸ заÑваÑÑÑе Ñ EndDoc. РедÑÑ Ðµ важен, заÑоÑо BeginDoc запиÑва ÑеÑника за ÑиÑÑоване и наÑÑÑойкиÑе за компÑеÑиÑане в моменÑа на ÑвоеÑо изпÑлнение; вÑиÑко, пÑиÑвоено Ñлед Ñози моменÑ, Ñе игноÑиÑа ÑиÑ
омÑлком, вмеÑÑо да Ñе пÑиложи ÑÑÑ Ð·Ð°Ð´Ð½Ð° даÑа.
ÐовÑÑÑ
ноÑÑÑа за ÑиÑÑване покÑива пÑÐ»Ð½Ð¸Ñ Ð½Ð°Ð±Ð¾Ñ Ð¾Ñ Ð¾Ð¿ÐµÑаÑоÑи на PDF на ниво Delphi: TextOut за позиÑиониÑан Unicode ÑекÑÑ, SetFont Ñ Ð²Ð³Ñаждане на TrueType ÑÑиÑÑове, векÑоÑни пÑимиÑиви (линии, кÑиви на Ðезие, елипÑи, пÑавоÑгÑлниÑи), поÑÑавÑне на изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ñ Ñайл или Ð¿Ð°Ð¼ÐµÑ Ð¸ генеÑиÑане на баÑкодове. ÐооÑдинаÑиÑе Ñа в ÑоÑки Ð¾Ñ Ð´Ð¾Ð»Ð½Ð¸Ñ Ð»Ñв ÑгÑл Ñ Y, наÑаÑÑÐ²Ð°Ñ Ð½Ð°Ð³Ð¾Ñе, коеÑо пÑÑвонаÑално обÑÑква вÑеки ÑазÑабоÑÑик. СÑÑÑоÑниеÑо на ÑÑиÑÑа не Ñе запазва Ñлед AddPage, Ñака Ñе Ñе изиÑква извикване на SetFont Ñлед вÑÑко пÑеминаване на нова ÑÑÑаниÑа.
ÐолеÑаÑа на AcroForm Ñа пÑÑвоклаÑни елеменÑи. ÐожеÑе да добавÑÑе ÑекÑÑови полеÑа, квадÑаÑÑеÑа за оÑмеÑка, Ñадио бÑÑони, комбиниÑани кÑÑии, ÑпиÑÑÑи и бÑÑони диÑекÑно кÑм обекÑа на ÑÑÑаниÑаÑа Ñ Ð¿Ð¾ едно извикване за вÑÑко. HotPDF може ÑÑÑо Ñака да заÑежда ÑÑÑеÑÑвÑÐ²Ð°Ñ PDF ÑÑез LoadFromFile и да попÑлва или ÑеÑе ÑÑойноÑÑи на полеÑа, коеÑо Ñ Ð¿Ñави полезна в два оÑделни ÑабоÑни пÑоÑеÑа: ÑÑздаване на ÑоÑми и авÑомаÑизиÑане на ÑÑÑ
ноÑо попÑлване.
ШиÑÑованеÑо ÑÑÑо Ñе ÑпÑавлÑва на ниво докÑменÑ. CryptKeyLength избиÑа ÑÑ
емаÑа (Ð¾Ñ 40-биÑов RC4 до AES-256), ActivateProtection акÑивиÑа Ñ, а ProtectOptions задава ISO ÑлаговеÑе за пÑава. ÐваÑа Ñежима на ÑÐµÐ²Ð¸Ð·Ð¸Ñ Ð½Ð° AES-256 (R5 и R6, ÑпÑавлÑвани Ð¾Ñ UseAES256R6) ÑÑÑеÑÑвÑваÑ, ÑÑй каÑо ÑÐµÐ²Ð¸Ð·Ð¸Ñ 6 коÑигиÑа извеÑÑна ÑлабоÑÑ Ð² ÑÐµÐ²Ð¸Ð·Ð¸Ñ 5, но изиÑква ÑеÑеÑ, поддÑÑÐ¶Ð°Ñ PDF 2.0; избоÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑÑÑ
е ÑеÑение за ÑÑвмеÑÑимоÑÑ, а не за ÑдобÑÑво.
ÐоддÑÑжкаÑа на ÑиÑÑов Ð¿Ð¾Ð´Ð¿Ð¸Ñ Ð² HotPDF покÑива базовиÑе пÑоÑили на PAdES, Ñака Ñе е Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑа за ÑабоÑни пÑоÑеÑи, пÑи коиÑо подпиÑÑÑ ÑÑÑбва да оÑговаÑÑ Ð½Ð° изиÑкваниÑÑа на ETSI EN 319 142. Ðко нÑждиÑе ви Ñе огÑаниÑÐ°Ð²Ð°Ñ Ñамо до генеÑиÑане на Ð¸Ð·Ñ Ð¾Ð´Ð½Ð¸ докÑменÑи, HotPDF е библиоÑекаÑа, кÑм коÑÑо ÑÑÑбва да Ñе наÑоÑиÑе пÑÑво.
PDFium VCL: ÑендеÑиÑане, пÑеглед и ÑеÑене на ÑÑÑеÑÑвÑваÑи PDF Ñайлове
PDFium VCL обвива двигаÑÐµÐ»Ñ PDFium на Google каÑо VCL компоненÑ, коеÑо Ð¼Ñ Ð´Ð°Ð²Ð° ÑÑндаменÑално ÑазлиÑна ÑÐ¾Ð»Ñ Ð¾Ñ HotPDF. ÐÑдеÑо HotPDF пиÑе, PDFium VCL ÑеÑе и изобÑазÑва. ÐÑновниÑÑ Ð¾Ð±ÐµÐºÑ Ðµ TPdf â?мениджÑÑ Ð½Ð° докÑменÑи, койÑо оÑваÑÑ Ñайл ÑÑез задаване на FileName и Ñлед Ñова на Active := True. ÐÑеÑкиÑе пÑи заÑеждане не Ñе Ñ
вÑÑлÑÑ ÐºÐ°Ñо изклÑÑениÑ; Active пÑоÑÑо оÑÑава False, Ñака Ñе пÑовеÑкаÑа Ð¼Ñ Ñлед пÑиÑвоÑванеÑо не е пожелаÑелна.
ÐзобÑазÑванеÑо ÑабоÑи ÑÑез TPdfView â?визÑален компоненÑ, койÑо поÑÑавÑÑе на ÑоÑма и ÑвÑÑзваÑе кÑм инÑÑанÑÐ¸Ñ Ð½Ð° TPdf ÑÑез PdfView.Pdf := Pdf. ÐаÑабиÑанеÑо и ÑежимÑÑ Ð½Ð° напаÑване живеÑÑ Ð² изгледа, а не в докÑменÑа. Ðдна ÑÑнкоÑÑ, коÑÑо обÑÑква Ñ
оÑаÑа: Pdf.PageNumber и PdfView.PageNumber Ñа незавиÑими ÑвойÑÑва. ÐадаванеÑо на едноÑо не акÑÑализиÑа дÑÑгоÑо, а API за извлиÑане на базаÑа на изгледа (конÑейнеÑи за дÑми, единиÑи за ÑеÑене) Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ ÑекÑÑаÑа ÑÑÑаниÑа на изгледа, а не на докÑменÑа.
ÐзвлиÑанеÑо на ÑекÑÑ Ðµ облаÑÑÑа, в коÑÑо PDFium VCL нÑма пÑÑк конкÑÑÐµÐ½Ñ Ð² поÑÑÑолиоÑо на losLab. ReadablePageContent вÑÑÑа ÑÑÑÑкÑÑÑиÑан ÑекÑÑ Ñ Ñазпознаване на Ñеда на ÑеÑене, PageWordBoxes дава огÑаниÑиÑелни пÑавоÑгÑлниÑи на ниво дÑма, а DocumentReadingUnits пÑеминава пÑез ÑÐµÐ»Ð¸Ñ Ð´Ð¾ÐºÑменÑ. Ðа задаÑи, ÑвÑÑзани Ñ Ð´Ð¾ÑÑÑпноÑÑÑа, IsTagged ви казва дали е налиÑно ÑÑÑÑкÑÑÑно дÑÑво, а ValidatePdfUa изпÑлнÑва пÑовеÑка за ÑÑоÑвеÑÑÑвие Ñ UA ÑÑандаÑÑа. Тези API пÑавÑÑ PDFium VCL еÑÑеÑÑÐ²ÐµÐ½Ð¸Ñ Ð¸Ð·Ð±Ð¾Ñ Ð·Ð° вÑеки ÑабоÑен пÑоÑеÑ, койÑо ÑÑÑбва да анализиÑа какво има в ÑÑÑеÑÑвÑÐ²Ð°Ñ PDF, вмеÑÑо да генеÑиÑа нов.
ÐопÑлванеÑо на ÑоÑми ÑÑÑо ÑабоÑи Ð¾Ñ ÑÑÑана на PDFium, ÑÑез ÑÑÑÐ¸Ñ AcroForm Ñлой, койÑо базовиÑÑ Ð´Ð²Ð¸Ð³Ð°Ñел излага. То е Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑо, когаÑо Ð¸Ð·Ñ Ð¾Ð´Ð½Ð¸ÑÑ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð²ÐµÑе ÑÑÑеÑÑвÑва и вие авÑомаÑизиÑаÑе неговоÑо попÑлване, вмеÑÑо Ñами да ÑÑздаваÑе полеÑа на ÑоÑмаÑа.
PDFlibPas: манипÑлиÑане, ÑÑвмеÑÑими подпиÑи и диÑекÑен доÑÑÑп до Ñайлове
PDFlibPas (веÑÑÐ¸Ñ 3.73.0) Ñе намиÑа в дÑÑÐ³Ð¸Ñ ÐºÑай на ÑпекÑÑÑа на ÑложноÑÑ. ÐиблиоÑекаÑа излага ÑÑи API ÑÐ»Ð¾Ñ Ð²ÑÑÑ
Ñ ÑÑÑÐ¸Ñ Ð¼Ð¾Ð´ÐµÐ» на докÑменÑ: плоÑка ÑаÑада на базаÑа на манипÑлаÑоÑи (TPDFlib), ÑÑвмеÑÑима Ñ ÐºÐ¾Ð½Ð²ÐµÐ½ÑиÑÑа за извикване на Quick-PDF, пÑлен Ñлой Ñ Ð´ÑÑво Ð¾Ñ Ð¾Ð±ÐµÐºÑи (TPDFDocument) и ÑÑÑийминг паÑÑÐµÑ (TSmartPDFReader / TSmartPDFWriter), койÑо ÑабоÑи диÑекÑно вÑÑÑ
Ñ Ð±Ð°Ð¹ÑовеÑе на Ñайла, без да заÑежда пÑлнаÑа ÑÑÑÑкÑÑÑа Ð¾Ñ Ð¾Ð±ÐµÐºÑи.
СÑÑийминг ÑлоÑÑ Ðµ Ñова, коеÑо пÑави PDFlibPas пÑÐ°Ð²Ð¸Ð»Ð½Ð¸Ñ Ð¸Ð·Ð±Ð¾Ñ Ð·Ð° големи докÑменÑи. TSmartPDFWriter може да добави инкÑеменÑална акÑÑализаÑÐ¸Ñ ÐºÑм Ñайл на диÑка, без да ÑеконÑÑÑÑиÑа ÑÑлаÑа ÑаблиÑа Ñ Ð¿ÑепÑаÑки (cross-reference table), коеÑо е меÑ
анизмÑÑ, ÑÑоÑÑ Ð·Ð°Ð´ еÑекÑивноÑо повÑоÑно запиÑване и дÑлгоÑÑоÑниÑе валидаÑионни пеÑаÑи на PAdES. Ðа ÑÑвмеÑÑими ÑабоÑни пÑоÑеÑи за подпиÑване, пÑи коиÑо подпиÑаниÑÑ Ñ
ÐµÑ ÑÑÑбва да покÑива конкÑеÑен байÑов диапазон и подпиÑÑÑ Ñе пÑилага без пÑенапиÑване на докÑменÑа, Ñози Ñлой е единÑÑвениÑÑ Ð²Ñзможен пÑÑ.
ÐанипÑлиÑанеÑо на докÑменÑи на ниво TPDFDocument вклÑÑва обединÑване Ñ Merge, ÑелекÑивно копиÑане на ÑÑÑаниÑи ÑÑез CopyPagesFromDoc Ñ Ð½Ð¸Ð· Ð¾Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¸ и ÑпÑавление на веÑÑииÑе ÑÑез SetMinimumVersion и LockSaveVersion. ÐаклÑÑванеÑо на веÑÑиÑÑа пÑедизвиква гÑеÑка 602, ако Ñе опиÑаÑе да запазиÑе ÑÑнкÑиÑ, коÑÑо би повиÑила веÑÑиÑÑа над заклÑÑенаÑа, коеÑо е полезно, когаÑо ÑÑÑбва да гаÑанÑиÑаÑе, Ñе изÑ
одниÑÑ Ñайл оÑÑава в ÑамкиÑе на конкÑеÑна PDF ÑÐµÐ²Ð¸Ð·Ð¸Ñ Ð·Ð° аÑÑ
ивна ÑÑвмеÑÑимоÑÑ.
ÐоддÑÑжкаÑа на PDF/A (ISO 19005) е налиÑна в инÑÑÑÑменÑаÑиÑма за ÑÑвмеÑÑимоÑÑ Ð½Ð° PDFlibPas. ÐмайÑе пÑедвид, Ñе ÑиÑÑованеÑо и PDF/A Ñа взаимно изклÑÑваÑи Ñе по ÑпеÑиÑикаÑиÑ: не можеÑе да имаÑе и двеÑе в един Ñайл. РабоÑни пÑоÑеÑи, коиÑо изиÑÐºÐ²Ð°Ñ ÑиÑÑовано копие за ÑазпÑоÑÑÑанение и PDF/A аÑÑ Ð¸Ð²Ð½Ð¾ копие, ÑÑÑбва да генеÑиÑÐ°Ñ Ð´Ð²Ð° оÑделни докÑменÑа.
ÐÐ·Ð±Ð¾Ñ Ð¼ÐµÐ¶Ð´Ñ ÑÑиÑе библиоÑеки
ТипиÑноÑо дÑÑво за вземане на ÑеÑÐµÐ½Ð¸Ñ Ðµ кÑаÑко. Ðко генеÑиÑаÑе нов докÑÐ¼ÐµÐ½Ñ Ð¾Ñ Ð´Ð°Ð½Ð½Ð¸, използвайÑе HotPDF. Ðко изобÑазÑваÑе или извлиÑаÑе ÑекÑÑ Ð¾Ñ ÑÑÑеÑÑвÑÐ²Ð°Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ Ð² Delphi VCL пÑиложение, използвайÑе PDFium VCL. Ðко манипÑлиÑаÑе, обединÑваÑе или подпиÑваÑе ÑÑÑеÑÑвÑваÑи PDF Ñайлове Ñ Ð¸Ð·Ð¸ÑÐºÐ²Ð°Ð½Ð¸Ñ Ð·Ð° ÑÑвмеÑÑимоÑÑ Ð² голÑм маÑаб или ÑÑÑ ÑеманÑика на инкÑеменÑално запиÑване, използвайÑе PDFlibPas. Ðного пÑоизводÑÑвени ÑиÑÑеми Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ Ð´Ð²Ðµ Ð¾Ñ ÑÑиÑе: напÑÐ¸Ð¼ÐµÑ HotPDF за генеÑиÑане на докÑменÑи и PDFlibPas за пÑилагане на пеÑÐ°Ñ Ð·Ð° дÑлгоÑÑоÑна валидаÑÐ¸Ñ Ð¿Ñеди аÑÑ Ð¸Ð²Ð¸Ñане, или PDFium VCL за пÑеглед на Ñова, коеÑо HotPDF е пÑоизвел, пÑеди да бÑде изпÑаÑено по веÑигаÑа.
Ð ÑÑиÑе Ñе доÑÑавÑÑ ÐºÐ°Ñо ÑиÑÑ Pascal Ð¸Ð·Ñ Ð¾Ð´ÐµÐ½ код за Delphi и C++Builder, без завиÑимоÑÑи по вÑеме на изпÑлнение извÑн VCL. PDFium VCL допÑлниÑелно вклÑÑва DLL на PDFium, койÑо покÑива ÑабоÑаÑа по изобÑазÑване и паÑÑване на двигаÑелÑ. СÑÑаниÑаÑа на вÑеки пÑодÑÐºÑ ÑÑдÑÑжа пÑлна докÑменÑаÑÐ¸Ñ Ð·Ð° API и иÑÑоÑÐ¸Ñ Ð½Ð° веÑÑииÑе.
ÐодÑобноÑÑи за оÑделниÑе библиоÑеки: HotPDF Component, PDFium VCL Component и PDFlibPas.