CheckFileCompliance
Zgodność, inspekcja dokumentów
Wybór profilu czytnika PDF/UA
Kontrole PDF/UA wybierają część 2, gdy XMP wskazuje pdfuaid:part=2, a w przeciwnym razie zachowują kontrole części 1; opisane tu starsze kontrole PDF/UA-1 nie obejmują automatycznie części 2
Profil PDF/UA-2 implementuje podstawowe kontrole identyfikacji, przestrzeni nazw, ról i struktury; raporty strukturalne używają PDF/UA-2 i ISO 14289-2 oraz ujawniają fullCertification=false i niezweryfikowany zakres
Użyj CheckFilePDFUACompliance lub RunPDFUAValidationPipelineTask, aby wymusić część docelową, oraz GetPDFUAReadValidationCoverageJSON, aby obejrzeć limity możliwości
Opis
Wczytuje zewnętrzny plik PDF i sprawdza go względem wybranego standardu zgodności ISO. Zwracana wartość to albo zero (plik przechodzi wybrany test bez zastrzeżeń), albo niezerowy uchwyt StringListID wyliczający każdy wykryty problem. Każdy wpis listy to krótki kod, dwukropek i komunikat czytelny dla człowieka — dokładnie ten sam format kodów, którego używa GetPDFUADiagnostics. Wynik wylicz za pomocą GetStringListCount i GetStringListItemTest PDF/A obejmuje wszystkie sześć trybów zgodności (PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b) i odczytuje wpisy XMP
pdfaid:part/pdfaid:conformance, aby rozstrzygnąć, który zestaw reguł zastosowaćTest PDF/UA-1 (dodany w v3.56.0) sprawdza zewnętrzny plik PDF względem ISO 14289-1 i generuje kody diagnostyczne w zakresie
10xxx, aby pozostawały wizualnie oddzielone od kodów PDF/A 00xxx
Składnia
Delphi
Function TPDFlib.CheckFileCompliance(Const InputFileName, Password: WideString; ComplianceTest, Options: Integer): Integer;
ActiveX
Function PDFlib::CheckFileCompliance(InputFileName As String, Password As String, ComplianceTest As Long, Options As Long) As Long
DLL
int DLCheckFileCompliance(int InstanceID, const wchar_t * InputFileName, const wchar_t * Password, int ComplianceTest, int Options);
Parametry
| InputFileName | Pełna ścieżka pliku PDF do sprawdzenia. Plik jest otwierany tylko do odczytu i nie jest modyfikowany. |
|---|---|
| Password | Hasło używane do otwarcia pliku. Dla dokumentów nieszyfrowanych przekaż pusty łańcuch. Zwróć uwagę, że zaszyfrowany dokument nie przechodzi testu PDF/A (kod 00006) niezależnie od tego, czy podano poprawne hasło — PDF/A zabrania szyfrowania. |
| ComplianceTest | Standard, względem którego przeprowadzane jest sprawdzenie. 1 — PDF/A (ISO 19005-1/-2/-3, wszystkie sześć poziomów zgodności). 2 — PDF/UA-1 (ISO 14289-1:2014, dostępny plik PDF). 3 — PDF/X (ISO 15930, włącznie z rodziną PDF/X-6). 4 — PDF/VT-3 (ISO 16612-3:2020 na bazie rodziny PDF/X-6). 5 — PDF/R-1, ograniczona wymiana danych rastrowych. 6 — PDF/VCR-1, szablony zastępowania zawartości zmiennej. 7 — PDF/E-1, wymiana dokumentów inżynieryjnych. |
| Options | Flagi bitowe modyfikujące test. 0 — Domyślnie: raportuj każdy problem znaleziony w dokumencie. 1 — Zatrzymaj się po pierwszym problemie i zwróć wynik natychmiast. Przydatne, gdy wywołujący potrzebuje tylko sygnału zaliczenia/niezaliczenia. |
Wartości zwracane
| 0 | Plik jest zgodny z wybranym standardem. |
|---|---|
| Niezerowy | Uchwyt StringListID, którego wpisy opisują każdą wykrytą niezgodność. Uchwyt pozostaje ważny do zamknięcia dokumentu albo wywołania ReleaseStringList. |
Kody problemów PDF/A (ComplianceTest = 1)
| 00002 | Wersja PDF przekracza maksimum dozwolone przez poziom zgodności (PDF/A-1 ogranicza do 1.4; PDF/A-2 i PDF/A-3 do 1.7). Linia szczegółów podaje problematyczną wersję i dozwolone maksimum. |
|---|---|
| 00003 | Katalog zawiera /OCProperties (zawartość opcjonalna / warstwy), zabronione w PDF/A-1. PDF/A-2 i PDF/A-3 dopuszczają warstwy i nie wyzwalają tego sprawdzenia. |
| 00005 | Para pdfaid:part+pdfaid:conformance w XMP jest brakująca, zniekształcona albo zawiera wartość poza dozwolonym zbiorem 1A, 1B, 2A, 2B, 3A, 3B. Biblioteka nie może rozstrzygnąć, który zestaw reguł zastosować, więc jest to raportowane jako problem krytyczny niezależnie od Options. |
| 00006 | Dokument jest zaszyfrowany. PDF/A zabrania szyfrowania w każdej części. |
| 00007 | Katalog nie ma wpisu /OutputIntents. Wszystkie części PDF/A wymagają intencji wyjściowej, aby przestrzeń kolorów renderowania była jednoznacznie określona. |
| 00011 | Katalog nie ma wpisu /MarkInfo. Wymagane tylko dla zgodności na poziomie a (PDF/A-1a, 2a, 3a) — PDF z tagami musi się sam zadeklarować. |
| 00012 | Katalog nie ma wpisu /StructTreeRoot. Wymagane tylko dla zgodności na poziomie a. Dokument PDF z tagami musi mieć drzewo struktury logicznej. |
Kody problemów PDF/UA-1 (ComplianceTest = 2)
| 10001 | Strumień metadanych XMP nie zawiera pdfuaid:part albo wartość nie wynosi 1. ISO 14289-1 §5 wymaga, aby zgodny plik identyfikował się tą właściwością; ISO 14289-1 §6.2 zabrania deklarowania zgodności bez niej. |
|---|---|
| 10002 | Katalog dokumentu nie ma strumienia /Metadata. Deklaracja zgodności PDF/UA-1 jest zapisywana w tym strumieniu; bez niego plik nie może ogłosić się dostępnym. |
| 10003 | Słownik /MarkInfo katalogu jest brakujący albo /Marked nie ma wartości true. ISO 14289-1 §7.1 wymaga, aby każdy zgodny plik deklarował się jako oznaczony tagami, aby technologia wspomagająca mogła polegać na drzewie struktury. |
| 10004 | Katalog nie ma wpisu /StructTreeRoot. Plik PDF/UA-1 musi zawierać drzewo struktury logicznej opisujące kolejność czytania i semantykę dokumentu. |
| 10005 | Słownik /ViewerPreferences jest brakujący albo jego wpis /DisplayDocTitle nie ma wartości true. ISO 14289-1 §7.1 wymaga, aby zgodne czytniki pokazywały tytuł dokumentu w ramce okna zamiast nazwy pliku. |
| 10006 | Wpis katalogu /Lang jest brakujący albo pusty. ISO 14289-1 §7.2 (w nawiązaniu do ISO 32000-1 §14.9.2) wymaga, aby każdy zgodny plik deklarował swój język naturalny, aby czytniki ekranu wybierały właściwy głos i reguły wymowy. |
| 10007 | Strumień metadanych XMP nie niesie niepustego dc:title z Dublin Core. ISO 14289-1 §7.1 wymaga "wpisu dc:title, który jednoznacznie identyfikuje dokument". |
| 10008 | Słownik /MarkInfo ma /Suspects ustawione na true. ISO 14289-1 §7.1: pliki deklarujące zgodność z PDF/UA muszą mieć wartość Suspects równą false — wartość true oznacza, że tagowanie zawiera znane błędy. |
| 10009 | Dokument /RoleMap remapuje jeden lub więcej standardowych typów struktury. ISO 14289-1 §7.1: standardowych tagów zdefiniowanych w ISO 32000-1 §14.8.4 (P, H1..H6, Figure, Table itd.) nie wolno remapować. Linia szczegółów podaje pierwszy remapowany standardowy tag. |
| 10010 | Plik jest zaszyfrowany, ale bit 10 klucza uprawnień szyfrowania /P (maska 512, "Extract for accessibility") nie jest ustawiony. ISO 14289-1 §7.16 wymaga, aby każdy zaszyfrowany zgodny plik zezwalał na ekstrakcję dla dostępności, aby technologia wspomagająca mogła dotrzeć do zawartości. |
| 10011 | Wykryto dynamiczny formularz XFA: pakiet XDP XFA zawiera <dynamicRender>required</dynamicRender>. ISO 14289-1 §7.15 zabrania dynamicznych formularzy XFA w zgodnych plikach; statyczne XFA są dozwolone. |
| 10012 | Wykryto Reference XObject (Form XObject niosący wpis /Ref). ISO 14289-1 §7.20 zabrania reference XObject, ponieważ pozwalają one osadzać jeden plik PDF w innym przez referencję bez ujawniania przywoływanej zawartości technologii wspomagającej. |
| 10013 | Wykryto co najmniej jedną adnotację TrapNet. ISO 14289-1 §7.18.2 wprost zabrania TrapNet w zgodnych plikach. Linia szczegółów podaje, ile adnotacji znaleziono. |
| 10014 | Co najmniej jedna strona ma adnotacje, ale nie ustawia /Tabs /S w swoim słowniku strony. ISO 14289-1 §7.18.3 wymaga, aby kolejność tabulatorów na takich stronach podążała za drzewem struktury, co sygnalizuje /Tabs /S. Linia szczegółów podaje liczbę problematycznych stron. |
| 10015 | Co najmniej jedna adnotacja Link nie ma niepustego alternatywnego opisu /Contents. ISO 14289-1 §7.18.5 wymaga, aby każda adnotacja Link nosiła dostępny opis, aby czytniki ekranu mogły odczytać cel odnośnika. Linia szczegółów podaje liczbę problematycznych adnotacji Link. |
| 10016 | Co najmniej jeden słownik FileSpec pliku osadzonego nie ma klucza nazwy pliku /F. ISO 14289-1 §7.11 wymaga, aby każdy FileSpec pliku osadzonego nosił zarówno /F, jak i /UF. |
| 10017 | Co najmniej jeden słownik FileSpec pliku osadzonego nie ma klucza unikodowej nazwy pliku /UF. ISO 14289-1 §7.11 wymaga, aby każdy FileSpec pliku osadzonego nosił zarówno /F, jak i /UF. |
| 10018 | Co najmniej jeden słownik konfiguracji zawartości opcjonalnej nie ma niepustego tekstowego łańcucha /Name. ISO 14289-1 §7.10 wymaga, aby każdy słownik konfiguracji OCG (domyślny wpis D plus każdy słownik w OCProperties/Configs) nosił niepusty /Name. |
| 10019 | Co najmniej jeden słownik konfiguracji zawartości opcjonalnej zawiera zabroniony klucz /AS. ISO 14289-1 §7.10 wprost zabrania /AS w dowolnym słowniku konfiguracji OCG, aby zapobiec automatycznym korektom stanów napędzanym informacjami o użyciu. |
| 10020 | Co najmniej jedna czcionka spoza standardowej czternastki przywoływana przez dokument nie osadza swojego programu czcionki (brak wpisu FontFile, FontFile2 lub FontFile3 w FontDescriptor). ISO 14289-1 §7.21.4.1 wymaga, aby każda czcionka używana do renderowania osadzała swój program. Czcionki Type 3 pomijają to sprawdzenie, bo ich glify są wbudowane jako CharProcs. |
| 10021 | Co najmniej jeden potomek CIDFontType2 nie ma wpisu /CIDToGIDMap. ISO 14289-1 §7.21.3.2 wymaga, aby każda osadzona CIDFont typu 2 nosiła /CIDToGIDMap (jako strumień mapujący CID na indeksy glifów albo jako nazwa Identity). |
| 10022 | Co najmniej jedna ze standardowych 14 czcionek (Helvetica, Times, Courier, Symbol, ZapfDingbats i ich warianty bold / oblique) jest przywoływana bez osadzonego programu czcionki. ISO 14289-1 §7.21.4 UWAGA 5 jednoznacznie stanowi, że dla 14 standardowych czcionek Type 1 nie ma zwolnienia z obowiązku osadzenia. |
| 10023 | Co najmniej jedna czcionka nie ma mapy /ToUnicode i nie pasuje do listy zwolnień z §7.21.7. Lista zwolnień obejmuje predefiniowane MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, czcionki Type 0, których potomna CIDFont używa kolekcji znaków Adobe GB1 / CNS1 / Japan1 / Korea1, oraz niesymboliczne czcionki TrueType. |
| 10024 | Pierwszy element nagłówka w kolejności dokumentu nie jest H1 (ani silnie ustrukturyzowanym H). ISO 14289-1 §7.4.2: "Jeśli używane są jakiekolwiek tagi nagłówków, H1 musi być pierwszy." |
| 10025 | Wykryto co najmniej jedno przeskoczenie poziomu nagłówka w kolejności dokumentu — np. H1, bezpośrednio po którym następuje H3, z pominięciem H2. ISO 14289-1 §7.4.2 wymaga, aby opadające sekwencje nagłówków postępowały w ścisłej kolejności numerycznej bez pomijania poziomów pośrednich. |
| 10026 | Co najmniej jedna adnotacja Widget nie ma wpisu /StructParent. ISO 14289-1 §7.18.4 wymaga, aby adnotacje Widget były zagnieżdżone w tagu struktury Form; bez /StructParent widżetu nie da się w ogóle osiągnąć z drzewa struktury. Linia szczegółów podaje liczbę. |
| 10027 | Co najmniej jedna adnotacja Widget ma wpis /StructParent, ale jego wartość nie prowadzi przez StructTreeRoot/ParentTree do elementu struktury z /S = Form. ISO 14289-1 §7.18.4 wymaga, aby każda adnotacja Widget była zagnieżdżona w tagu struktury Form. Możliwe przyczyny: wpis /ParentTree całkowicie nie istnieje, wskazuje na coś innego niż StructElem (surowa liczba całkowita / słownik MCR) albo nazywa tag inny niż Form. |
| 10028 | Co najmniej jedna niesymboliczna czcionka TrueType ma /Encoding (albo /BaseEncoding słownika Encoding) inne niż MacRomanEncoding lub WinAnsiEncoding. ISO 14289-1 §7.21.6 ogranicza kodowanie niesymbolicznych czcionek TrueType do tych dwóch predefiniowanych nazw. |
| 10029 | Co najmniej jedna symboliczna czcionka TrueType niesie wpis /Encoding w słowniku czcionki. ISO 14289-1 §7.21.6, akapit czwarty, zabrania tego — kodowanie symbolicznej czcionki TrueType musi być wyrażone wyłącznie przez tablicę cmap osadzonego programu czcionki. |
| 10030 | Co najmniej jeden element struktury L (lista) nie ma atrybutu ListNumbering. ISO 14289-1 §7.6 wymaga, aby każdy tag L deklarował przez ten atrybut swój styl numeracji. Poprawne wartości to None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha i LowerAlpha (ISO 32000-1, tabela 347). |
| 10031 | Co najmniej jedna adnotacja Link niesie słownik akcji URI, którego wpis /IsMap ma wartość true. ISO 14289-1 §7.18.5 zabrania /IsMap = true w akcji URI, chyba że równoważna funkcjonalność jest zapewniona gdziekolwiek indziej w zawartości bez klucza /IsMap. Autorzy z uzasadnionym przypadkiem użycia IsMap powinni samodzielnie wyciszyć tę diagnostykę. |
| 10032 | Co najmniej jeden element struktury Note nie ma wpisu /ID. ISO 14289-1 §7.9 wymaga, aby każdy tag Note deklarował unikalny /ID, aby odwołania krzyżowe mogły trafiać w stabilny cel. |
| 10033 | Dwa lub więcej elementów struktury Note współdzieli tę samą wartość /ID. Linia szczegółów podaje liczbę wykrytych zduplikowanych par. ISO 14289-1 §7.9 wymaga, aby identyfikatory Note były unikalne w dokumencie. |
| 10034 | Co najmniej jeden niesymboliczny program TrueType (FontDescriptor z wyzerowaną flagą Symbolic, obecny strumień FontFile2) osadza tablicę cmap, której jedyną podtablicą jest symboliczny wpis Microsoft (3,0). ISO 14289-1 §7.21.6, akapit pierwszy, wymaga co najmniej jednej niesymbolicznej podtablicy cmap, aby program mógł wyrenderować punkty kodowe zadeklarowane przez swój /Encoding. |
| 10035 | Co najmniej jedna niesymboliczna czcionka TrueType deklaruje /Encoding z tablicą /Differences zawierającą nazwy glifów nienależące do Adobe Glyph List 2.0. .notdef jest na białej liście, ponieważ specyfikacja wprost go dopuszcza. ISO 14289-1 §7.21.6, akapit trzeci, wymaga, aby każdy wpis Differences trafiał do AGL. |
| 10036 | Szerokości co najmniej jednej prostej czcionki TrueType różnią się od odpowiadających metryk w osadzonym programie czcionki o więcej niż jedną tysięczną em. ISO 14289-1 §7.21.5 wymaga, aby tablica /Widths zgadzała się z osadzonymi metrykami glifów. |
| 10037 | Szerokości co najmniej jednej czcionki CIDFontType2 różnią się od odpowiadających metryk w osadzonym programie TrueType o więcej niż jedną tysięczną em. ISO 14289-1 §7.21.5 wymaga, aby tablica /W zgadzała się z osadzonymi metrykami glifów. |
| 10038 | Deskryptor czcionki Type 1 /CharSet pomija co najmniej jedną nazwę glifu obecną w osadzonym programie czcionki. ISO 14289-1 §7.21.4.2 wymaga, aby wpis wyliczał każdy osadzony glif. |
| 10039 | Deskryptor czcionki CID /CIDSet pomija co najmniej jeden CID mapujący się na glify w osadzonym programie czcionki. ISO 14289-1 §7.21.4.2 wymaga, aby zbiór bitów identyfikował każdy osadzony CID. |
| 10040 | Form XObject zawierający tekst jest wywoływany z zawartości strony poza zawartością oznaczoną. ISO 14289-1 §7.20 wymaga, aby zawartość Form XObject była włączona do elementów struktury. |
| 10041 | Co najmniej jeden operand pokazywania tekstu rozwiązuje się do glifu .notdef. ISO 14289-1 §7.21.8 zabrania odwołań do .notdef niezależnie od trybu renderowania tekstu. |
| 10042 | Co najmniej jeden słownik danych klipu multimedialnego (identyfikowany przez /S /MCD, opcjonalnie /Type /MediaClip) nie ma wymaganego wpisu typu zawartości /CT. ISO 14289-1 §7.18.6 podnosi ten opcjonalny klucz z ISO 32000-1, tabela 274, do wymaganego. |
| 10043 | Co najmniej jeden słownik danych klipu multimedialnego nie ma wymaganej tablicy /Alt (pary łańcuch-język + tekst alternatywny). ISO 14289-1 §7.18.6 podnosi ten opcjonalny klucz z ISO 32000-1, tabela 274, do wymaganego, aby technologia wspomagająca mogła odczytać opis osadzonych multimediów. |
| 10044 | Co najmniej jeden węzeł drzewa struktury niesie więcej niż jednego bezpośredniego potomka H (nagłówek ogólny). ISO 14289-1 §7.4.4 wprost tego zabrania — podziel sekcję albo zastąp tagi H numerowanymi poziomami H1..H6. |
Uwagi
Test PDF/A jest przeznaczony jako szybka samokontrola przed dostarczeniem. Wyłapuje problemy na poziomie dokumentu, które od razu dyskwalifikują plik (niewłaściwa wersja PDF, brak OutputIntent, brak drzewa struktury na poziomie A, szyfrowanie, warstwy w PDF/A-1). Nie przechodzi jednak przez każdy operator strumienia zawartości ani nie weryfikuje osadzenia czcionek ani referencji przestrzeni kolorów dla każdego rysowanego obiektu — te walidacje wymagają dedykowanego walidatora PDF/A (takiego jak veraPDF). Używaj tej funkcji jako kontroli pierwszej linii i jako bramki regresji w potokach budowania. Użyj CreatePreflightReport lub SavePreflightReport, jeśli chcesz, aby biblioteka sformatowała listy problemów do raportu tekstowego wielokrotnego użytku. Użyj CreatePreflightReportEx lub SavePreflightReportEx dla raportów w formacie tekstowym, JSON, HTML lub CSV, albo zobacz Preflight Reports, aby poznać pełny obieg pracy z raportamiSiostrzany interfejs API
GetPDFUADiagnostics wykonuje analogiczne sprawdzenia dla PDF/UA (ISO 14289-1) na budowanym właśnie dokumencie w pamięci, a nie na zewnętrznym plikuPrzy produkcji wyjścia PDF/A tą biblioteką wywołaj
SetPDFAMode przed dodaniem jakiejkolwiek zawartości. Strażnik po stronie generowania wewnątrz SetPDFAMode blokuje operacje zabronione przez wybraną część, więc dokument zbudowany w ten sposób zwykle przejdzie CheckFileCompliance automatycznie
Przykład
// Validate a delivered PDF/A file and print all issues
var
Issues, Count, I: Integer;
begin
Issues := PDF.CheckFileCompliance('archive.pdf', '', 1, 0);
if Issues = 0 then
WriteLn('archive.pdf: PDF/A conformant')
else
begin
Count := PDF.GetStringListCount(Issues);
WriteLn('archive.pdf: ', Count, ' PDF/A issue(s) detected:');
for I := 1 to Count do
WriteLn(' ', PDF.GetStringListItem(Issues, I));
end;
end;
// Fast pass/fail gate in a CI pipeline — stop on the first issue
var
Failed: Boolean;
begin
Failed := PDF.CheckFileCompliance('build/output.pdf', '', 1, 1) <> 0;
if Failed then
Halt(1);
end;Zobacz również
Preflight Reports, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode
Test zgodności 3 audytuje PDF/X (ISO 15930): identyfikację edycji, output intent, geometrię strony, osadzone fonty i zestaw cech zabronionych; dla PDF/X-6 weryfikuje też flagi adnotacji i utrwalone wyglądy, wyglądy AcroForm i podpisów, wyjątki XFA oraz wyglądów generowanych przez przeglądarkę, rozmieszczenie akcji, łańcuchy akcji, dozwolony zestaw akcji nazwanych i każdą wartość UseBlackPtComp
Test zgodności 4 audytuje metadane identyfikacyjne PDF/VT-3, jego bazę z rodziny PDF/X-6, graf DPartRoot i DPart, nazwy i wartości DPM, poziom rekordu, kolejność stron i dokładne pokrycie liści; złożone kontrole dzielą jeden przebieg parsera
Test zgodności 5 audytuje rozmieszczenie znaczników PDF/R-1, wersję i szyfrowanie, obiekty pośrednie generacji zero, ograniczone słowniki i filtry, jednostrumieniowe programy stron, uporządkowane pasma rastrowe, kodowania obrazów, pokrycie strony i skuteczną rozdzielczość; może ponownie użyć wspólnego przebiegu potoku walidacji
Test zgodności 6 audytuje podstawę PDF/X i identyfikację XMP PDF/VCR-1, pojedynczy bezpośredni korzeń szablonu, zadeklarowane pola, opcjonalne pole wyboru strony i każdy liściasty symbol zastępczy zamiany PassThrough, powiązanie strony, MCID i prostokąt otaczający; może ponownie użyć wspólnego przebiegu potoku walidacji
Test zgodności 7 audytuje identyfikację i metadane cyklu życia PDF/E-1, identyfikatory trailer, dozwolone szyfrowanie, output intenty i przestrzenie barw urządzeń, operatory treści, fonty, adnotacje, formularze, treść opcjonalną, akcje, referencje do plików zewnętrznych, stany grafiki i ograniczenia strumieni 3D; może ponownie użyć wspólnego przebiegu potoku walidacji