V podnikových systémoch na správu dokumentov (DMS) môže povolenie prichádzajúcim súborom PDF pochádzajúcim od tretích strán, aby sa priamo dostali do vašich archívov na ukladanie, predstavovať značné riziká. Zlyhania pri tlači, neviditeľné anomálie vo vykresľovaní, neextrahovateľný text v dôsledku chýbajúcich vlastných fontov a vložené útoky JavaScriptom môžu spôsobiť katastrofu v neskorších fázach pracovného postupu.
Zavedenie automatizovanej kontroly pred odoslaním (preflight) priamo na mieste príjmu (ingestion point) zaisťuje, že do vášho systému vstúpia iba kompatibilné a bezpečné dokumenty. V tomto článku preskúmame, ako využiť nástroj PDFium v aplikácii v Delphi na budovanie bezhlavých (headless) služieb auditu rizík.
Prečo nepoužiť iba validátory PDF/A?
Zatiaľ čo prísne validátory PDF/A sú vynikajúce pre dlhodobú archiváciu, často zlyhávajú na úplne bežných súboroch, ktoré jednoducho potrebujú prejsť bežným obchodným pracovným postupom. Vlastný nástroj na kontrolu pred odoslaním vám umožňuje definovať, čo predstavuje skutočné "riziko" pre vaše konkrétne obchodné požiadavky, bez odmietnutia legitímnych faktúr, ktorým len chýba farebný profil.
Kľúčové metriky auditu s PDFium
Pomocou obálok API PDFium môžete pri nahrávaní dokumentu overiť niekoľko kľúčových metrík.
1. Kontrola typov formulárov a JavaScriptu
Vložený JavaScript môže spúšťať škodlivé akcie alebo spôsobovať výzvy vo vašej aplikácii na prezeranie, čím mätie koncových používateľov. Dokument s formátom XFA (na rozdiel od bežného AcroForm) je často nečitateľný v iných prehliadačoch než v programe Adobe.
function CheckDocumentRisk(Doc: FPDF_DOCUMENT): string;
var
FormType: Integer;
begin
Result := 'Safe';
FormType := FPDF_GetFormType(Doc);
if FormType = FORMTYPE_XFA_FULL then
Result := 'High Risk: Dynamic XFA Form detected. Document may not render correctly in standard viewers.';
// Further checks for embedded JS actions would involve parsing the /OpenAction dictionary
end;
2. Overenie vloženia písiem
Ak PDF odkazuje na vlastné písmo (napríklad Helvetica-Condensed), ale nevkladá ho do súboru, vizuálny vzhľad sa na počítači diváka zmení na záložný formát. Pri preflighte môžete iterovať cez objekty stránky, skontrolovať slovníky písiem a označiť dokumenty, ktoré nemajú lokálne údaje o type písma.
3. Viditeľnosť textovej vrstvy (prevencia iba naskenovaných dokumentov)
Častým problémom v digitálnych pracovných postupoch je to, keď niekto naskenuje dokument do formátu PDF, ale nespustí OCR (optické rozpoznávanie znakov). Ak váš pracovný postup vyžaduje fulltextové vyhľadávanie, musíte odmietnuť alebo presmerovať dokumenty, ktoré obsahujú iba obrázky, do nástroja OCR.
function HasExtractableText(Doc: FPDF_DOCUMENT): Boolean;
var
PageCount, I, CharCount: Integer;
TextPage: FPDF_TEXTPAGE;
begin
Result := False;
PageCount := FPDF_GetPageCount(Doc);
// We only check the first few pages to optimize processing time
for I := 0 to Min(PageCount - 1, 2) do
begin
TextPage := FPDFText_LoadPage(FPDF_LoadPage(Doc, I));
CharCount := FPDFText_CountChars(TextPage);
FPDFText_ClosePage(TextPage);
if CharCount > 50 then // Arbitrary threshold indicating real text content
begin
Result := True;
Exit;
end;
end;
end;
Smerovanie pracovného postupu
Vykonaním týchto kontrol v dávkovej službe napísanej v Delphi získate sadu metaúdajov pre každý prichádzajúci dokument. Môžete potom bezpečne ukladať čisté súbory priamo do databázy, zatiaľ čo rizikové súbory odošlete na reštrukturalizáciu (flatenning), izoláciu alebo manuálne posúdenie pracovníkmi, čím zabezpečíte integritu a plynulosť vašich procesov.
Poznámka: PDFium API používané na presné audity zloženia dokumentov je plne sprístupnené prostredníctvom komponentu PDFium Component.