CheckFileComplianceA
규정 준수, 문서 검사
설명
끝의 A는 ANSI(char) DLL 진입점을 나타내며 ActiveX/COM 표면은 Unicode 형식만 노출합니다. 동작은 CheckFileCompliance와 동일하고 문자열 인수는 현재 SetAnsiMode 코드 페이지를 사용해 해석됩니다
외부 PDF 파일을 읽고 선택한 ISO 적합성 표준에 따라 검증합니다 반환값은 0(파일이 선택한 검사를 문제없이 통과함) 또는 감지된 모든 문제를 나열하는 0이 아닌 StringListID 핸들입니다 목록의 각 항목은 짧은 코드, 콜론 및 사람이 읽을 수 있는 메시지로 구성되며 GetPDFUADiagnostics에서 사용하는 코드 형식과 정확히 같습니다 GetStringListCount 및 GetStringListItem으로 결과를 열거합니다
PDF/A 테스트는 여섯 가지 적합성 모드(PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b)를 모두 다루며 pdfaid:part/pdfaid:conformance XMP 항목을 읽어 적용할 규칙 집합을 결정합니다
v3.56.0에 추가된 PDF/UA-1 테스트는 외부 PDF를 ISO 14289-1에 따라 검사하고 10xxx 범위의 진단 코드를 내보내 PDF/A 00xxx 코드와 시각적으로 구분되도록 합니다
구문
Delphi
Function DLCheckFileComplianceA(InstanceID: Integer; InputFileName, Password: PAnsiChar; ComplianceTest, Options: Integer): Integer;
DLL
int DLCheckFileComplianceA(int InstanceID, const char * InputFileName, const char * Password, int ComplianceTest, int Options);
매개변수
| InputFileName | 검증할 PDF 파일의 전체 경로. 파일은 읽기 전용으로 열리며 수정되지 않습니다 |
|---|---|
| Password | 파일을 여는 데 사용하는 암호입니다. 암호화되지 않은 문서에는 빈 문자열을 전달합니다. 올바른 암호를 제공하더라도 암호화된 문서는 PDF/A 테스트(코드 00006)에 실패합니다. PDF/A에서는 암호화를 금지합니다 |
| ComplianceTest | 검사할 표준입니다 1 — PDF/A(ISO 19005-1/-2/-3, 6개 적합성 수준 모두) 2 — PDF/UA-1(ISO 14289-1:2014, 접근 가능한 PDF) |
| Options | 검사를 수정하는 비트 플래그. 0 — 기본값: 문서에서 발견된 모든 문제를 보고합니다. 1 — 첫 번째 문제 후 중지하고 즉시 반환합니다. 호출자에게 통과/실패 신호만 필요할 때 유용합니다 |
반환 값
| 0 | 파일이 선택한 표준을 준수합니다 |
|---|---|
| Non-zero | 각 항목이 감지된 부적합을 설명하는 StringListID 핸들입니다. 핸들은 문서를 닫거나 ReleaseStringList를 호출할 때까지 유효합니다 |
PDF/A 문제 코드(ComplianceTest = 1)
| 00002 | PDF 버전이 적합성 수준에서 허용하는 최댓값을 초과합니다(PDF/A-1은 1.4, PDF/A-2 및 PDF/A-3은 1.7로 제한). 상세 줄에는 문제가 되는 버전과 허용되는 최댓값이 표시됨 |
|---|---|
| 00003 | Catalog에 PDF/A-1에서 금지하는 /OCProperties(선택적 콘텐츠/레이어)가 있습니다. PDF/A-2 및 PDF/A-3에서는 레이어를 허용하므로 이 검사를 실행하지 않음 |
| 00005 | XMP pdfaid:part+pdfaid:conformance 쌍이 누락되었거나 잘못되었거나 허용된 집합 1A, 1B, 2A, 2B, 3A, 3B 밖의 값을 포함합니다. 라이브러리는 적용할 규칙 집합을 판단할 수 없으므로 Options와 관계없이 치명적인 문제로 보고됩니다 |
| 00006 | 문서가 암호화되었습니다. PDF/A의 모든 파트에서 암호화를 금지합니다 |
| 00007 | Catalog에 /OutputIntents 항목이 없습니다. 렌더링 색 공간을 명확하게 정의하려면 모든 PDF/A 파트에 출력 의도가 필요합니다 |
| 00011 | Catalog에 /MarkInfo 항목이 없습니다. a 수준 준수(PDF/A-1a, 2a, 3a)에만 필요하며 태그된 PDF는 자체 상태를 선언해야 합니다 |
| 00012 | Catalog에 /StructTreeRoot 항목이 없습니다. a 수준 준수에만 필요합니다. 태그된 PDF 문서에는 논리 구조 트리가 있어야 합니다 |
PDF/UA-1 문제 코드(ComplianceTest = 2)
| 10001 | XMP 메타데이터 스트림에 pdfuaid:part가 없거나 값이 1이 아닙니다. ISO 14289-1 §5에서는 적합한 파일이 이 속성으로 자신을 식별하도록 요구하며, ISO 14289-1 §6.2에서는 이 속성 없이 적합성을 보고하는 것을 금지합니다 |
|---|---|
| 10002 | 문서 Catalog에 /Metadata 스트림이 없습니다. PDF/UA-1 적합성 선언은 이 스트림 안에 기록되며, 이 스트림이 없으면 파일이 스스로 접근 가능하다고 알릴 수 없음 |
| 10003 | Catalog /MarkInfo 사전이 없거나 /Marked가 true가 아닙니다. ISO 14289-1 §7.1에서는 보조 기술이 구조 트리를 신뢰할 수 있도록 모든 적합 파일이 태그 지정된 파일임을 선언하도록 요구함 |
| 10004 | Catalog에 /StructTreeRoot 항목이 없습니다. PDF/UA-1 파일에는 문서의 읽기 순서와 의미를 설명하는 논리 구조 트리가 포함되어야 합니다 |
| 10005 | /ViewerPreferences 사전이 없거나 해당 /DisplayDocTitle 항목이 true가 아닙니다. ISO 14289-1 §7.1은 준수 리더가 창 제목 표시줄에 파일 이름 대신 문서 제목을 표시하도록 요구합니다 |
| 10006 | Catalog /Lang 항목이 없거나 비어 있습니다. ISO 14289-1 §7.2(ISO 32000-1 §14.9.2 참조)에서는 화면 읽기 프로그램이 올바른 음성과 발음 규칙을 선택할 수 있도록 모든 적합 파일이 자연어를 선언하도록 요구합니다 |
| 10007 | XMP 메타데이터 스트림에 비어 있지 않은 Dublin Core dc:title이 없습니다. ISO 14289-1 §7.1에서는 "문서를 명확하게 식별하는 dc:title 항목"을 요구합니다 |
| 10008 | /MarkInfo 사전의 /Suspects가 true로 설정되어 있습니다. ISO 14289-1 §7.1: PDF/UA 적합성을 주장하는 파일은 Suspects 값이 false여야 하며 true 값은 태그 지정에 알려진 오류가 있음을 나타냅니다 |
| 10009 | 문서 /RoleMap은 하나 이상의 표준 구조 유형을 다시 매핑합니다. ISO 14289-1 §7.1: ISO 32000-1 §14.8.4에 정의된 표준 태그(P, H1..H6, Figure, Table 등)는 다시 매핑해서는 안 됩니다. 상세 줄에는 다시 매핑된 첫 번째 표준 태그의 이름이 표시됩니다 |
| 10010 | 파일이 암호화되어 있지만 암호화 /P 권한 키의 비트 10(마스크 512, "Extract for accessibility")이 설정되지 않았습니다. ISO 14289-1 §7.16에서는 보조 기술이 콘텐츠에 접근할 수 있도록 암호화된 모든 적합 파일이 접근성 추출을 허용하도록 요구합니다 |
| 10011 | 동적 XFA 양식이 감지되었습니다. XFA XDP 패킷에 <dynamicRender>required</dynamicRender>가 포함되어 있습니다. ISO 14289-1 §7.15에서는 적합 파일에서 동적 XFA 양식을 금지하며 정적 XFA는 허용합니다 |
| 10012 | 참조 XObject(/Ref 항목을 포함하는 Form XObject)가 감지되었습니다. ISO 14289-1 §7.20은 참조된 콘텐츠를 보조 기술에 노출하지 않은 채 다른 PDF를 참조로 포함할 수 있으므로 참조 XObject를 금지합니다 |
| 10013 | 하나 이상의 TrapNet 주석이 감지되었습니다. ISO 14289-1 §7.18.2는 적합한 파일에서 TrapNet을 명시적으로 금지합니다. 상세 줄에는 발견된 주석 수가 표시됩니다 |
| 10014 | 하나 이상의 페이지에 주석이 있지만 페이지 사전에 /Tabs /S가 설정되어 있지 않습니다. ISO 14289-1 §7.18.3은 이러한 페이지의 탭 순서가 구조 트리를 따르도록 요구하며 이는 /Tabs /S로 표시됩니다. 세부 정보 줄은 위반 페이지 수를 보고합니다 |
| 10015 | 하나 이상의 Link 주석에 비어 있지 않은 /Contents 대체 설명이 없습니다. ISO 14289-1 §7.18.5에서는 화면 읽기 프로그램이 링크 대상을 알릴 수 있도록 각 Link 주석에 접근 가능한 설명을 포함하도록 요구합니다. 상세 줄에는 문제가 있는 Link 주석 수가 표시됩니다 |
| 10016 | 하나 이상의 포함 파일 FileSpec 사전에 /F 파일 이름 키가 없습니다 ISO 14289-1 §7.11은 모든 포함 파일 FileSpec에 /F와 /UF가 모두 있어야 한다고 요구합니다 |
| 10017 | 하나 이상의 포함 파일 FileSpec 사전에 /UF Unicode 파일 이름 키가 없습니다. ISO 14289-1 §7.11에서는 모든 포함 파일 FileSpec에 /F와 /UF가 모두 있어야 합니다 |
| 10018 | 하나 이상의 선택적 콘텐츠 구성 사전에 비어 있지 않은 /Name 텍스트 문자열이 없습니다. ISO 14289-1 §7.10은 모든 OCG 구성 사전(기본 D 항목과 OCProperties/Configs의 모든 사전)에 비어 있지 않은 /Name이 있어야 한다고 요구합니다 |
| 10019 | 하나 이상의 선택적 콘텐츠 구성 사전에 금지된 /AS 키가 있습니다. ISO 14289-1 §7.10은 사용 정보로 인한 자동 상태 조정을 막기 위해 모든 OCG 구성 사전에서 /AS를 명시적으로 금지합니다 |
| 10020 | 문서가 참조하는 하나 이상의 Standard-14 이외 글꼴이 글꼴 프로그램을 포함하지 않습니다(FontDescriptor에 FontFile, FontFile2 또는 FontFile3 항목이 없음). ISO 14289-1 §7.21.4.1은 렌더링에 사용하는 모든 글꼴에 프로그램을 포함하도록 요구합니다. Type 3 글꼴은 글리프가 인라인 CharProc이므로 이 검사를 건너뜁니다 |
| 10021 | 하나 이상의 CIDFontType2 하위 글꼴에 /CIDToGIDMap 항목이 없습니다. ISO 14289-1 §7.21.3.2는 포함된 모든 Type 2 CIDFont에 /CIDToGIDMap이 있어야 한다고 요구합니다(CID를 글리프 인덱스에 매핑하는 스트림 또는 이름 Identity) |
| 10022 | 하나 이상의 Standard 14 글꼴(Helvetica, Times, Courier, Symbol, ZapfDingbats 및 해당 Bold/Oblique 변형)이 포함된 글꼴 프로그램 없이 참조됩니다. ISO 14289-1 §7.21.4 NOTE 5에서는 14개 표준 Type 1 글꼴도 포함 의무에서 예외가 아님을 명확히 밝힘 |
| 10023 | 하나 이상의 글꼴에 /ToUnicode CMap이 없고 §7.21.7 예외 목록에도 맞지 않습니다. 예외 목록에는 미리 정의된 MacRomanEncoding / MacExpertEncoding / WinAnsiEncoding, 하위 CIDFont가 Adobe GB1 / CNS1 / Japan1 / Korea1 문자 컬렉션을 사용하는 Type 0 글꼴 및 비기호 TrueType 글꼴이 포함됩니다 |
| 10024 | 문서 순서의 첫 제목 요소가 H1 또는 강한 구조의 H가 아닙니다. ISO 14289-1 §7.4.2: "제목 태그가 사용되면 H1이 첫 번째여야 합니다" |
| 10025 | 문서 순서에서 하나 이상의 제목 수준 건너뛰기가 감지되었습니다. 예를 들어 H1 바로 뒤에 H2를 건너뛰고 H3이 옵니다. ISO 14289-1 §7.4.2는 하위 제목 순서가 중간 수준을 건너뛰지 않고 엄격한 숫자 순서로 진행되도록 요구합니다 |
| 10026 | 하나 이상의 Widget 주석에 /StructParent 항목이 없습니다. ISO 14289-1 §7.18.4에서는 Widget 주석을 Form 구조 태그 안에 중첩하도록 요구합니다. /StructParent가 없으면 Widget은 구조 트리에서 도달할 수 없습니다. 세부 정보 줄은 개수를 보고합니다 |
| 10027 | 하나 이상의 Widget 주석에 /StructParent 항목이 있지만 값이 StructTreeRoot/ParentTree를 통해 /S = Form인 구조 요소로 해석되지 않습니다. ISO 14289-1 §7.18.4에서는 모든 Widget 주석이 Form 구조 태그 안에 중첩되어야 합니다. 가능한 원인은 /ParentTree 항목이 완전히 없거나 StructElem이 아닌 항목(원시 정수 / MCR 사전)을 가리키거나 Form이 아닌 태그를 지정하는 경우입니다 |
| 10028 | 하나 이상의 비기호 TrueType 글꼴에 /Encoding(또는 Encoding 사전'의 /BaseEncoding)이 있으며 그 값이 MacRomanEncoding 또는 WinAnsiEncoding이 아닙니다 ISO 14289-1 §7.21.6은 비기호 TrueType 인코딩을 이 두 가지 사전 정의 이름으로 제한합니다 |
| 10029 | 하나 이상의 심볼릭 TrueType 글꼴에 글꼴 사전의 /Encoding 항목이 있습니다. ISO 14289-1 §7.21.6 네 번째 단락에서는 이를 금지합니다 — 심볼릭 TrueType 인코딩은 포함된 글꼴 프로그램'의 cmap 테이블을 통해서만 표현해야 합니다 |
| 10030 | 하나 이상의 L(목록) 구조 요소에 ListNumbering 특성이 없습니다. ISO 14289-1 §7.6에서는 모든 L 태그가 이 특성을 통해 번호 매기기 스타일을 선언하도록 요구합니다. 유효한 값은 None, Disc, Circle, Square, Decimal, UpperRoman, LowerRoman, UpperAlpha 및 LowerAlpha임(ISO 32000-1 Table 347) |
| 10031 | 하나 이상의 Link 주석에 /IsMap 항목이 true인 URI 작업 사전이 있습니다. ISO 14289-1 §7.18.5는 URI 작업의 /IsMap = true를 금지하며, 콘텐츠의 다른 곳에서 /IsMap 키 없이 동등한 기능을 제공하는 경우만 예외입니다. 정당한 IsMap 사용 사례가 있는 작성자는 이 진단을 직접 억제해야 합니다 |
| 10032 | 하나 이상의 Note 구조 요소에 /ID 항목이 없습니다. ISO 14289-1 §7.9는 교차 참조가 안정적인 대상에 도달하도록 모든 Note 태그가 고유한 /ID를 선언하도록 요구합니다 |
| 10033 | 둘 이상의 Note 구조 요소가 같은 /ID 값을 공유합니다. 세부 정보 줄에는 감지된 중복 쌍의 수가 표시됩니다. ISO 14289-1 §7.9는 문서 안에서 Note ID가 고유해야 한다고 규정합니다 |
| 10034 | 하나 이상의 비기호 TrueType 프로그램(Symbolic 플래그가 해제된 FontDescriptor, FontFile2 스트림 존재)이 유일한 하위 테이블로 기호형 Microsoft (3,0) 항목을 갖는 cmap 테이블을 내장합니다. ISO 14289-1 §7.21.6 첫 단락은 프로그램이 /Encoding에서 선언한 코드 포인트를 렌더링할 수 있도록 하나 이상의 비기호 cmap 하위 테이블을 요구합니다 |
| 10035 | 하나 이상의 비기호 TrueType 글꼴이 /Encoding을 선언하며, 그 안의 /Differences 배열에는 Adobe Glyph List 2.0에 포함되지 않은 글리프 이름이 들어 있습니다. 명세에서 암묵적으로 허용하므로 .notdef는 허용 목록에 포함됩니다. ISO 14289-1 §7.21.6의 세 번째 문단에서는 모든 Differences 항목이 AGL에 대응해야 한다고 규정합니다 |
| 10042 | 하나 이상의 미디어 클립 데이터 사전(/S /MCD로 식별하며 선택적으로 /Type /MediaClip)에 필수 /CT 콘텐츠 형식 항목이 없습니다. ISO 14289-1 §7.18.6은 ISO 32000-1 Table 274의 이 선택 키를 필수로 승격합니다 |
| 10043 | 하나 이상의 미디어 클립 데이터 사전에 필수 /Alt 배열(언어 문자열 + 대체 텍스트 쌍)이 없습니다. ISO 14289-1 §7.18.6은 ISO 32000-1 Table 274의 선택적 키를 필수로 승격하여 보조 기술이 포함 멀티미디어의 설명을 알릴 수 있게 합니다 |
| 10044 | 하나 이상의 구조 트리 노드에 둘 이상의 직접 H(일반 제목) 자식이 있습니다. ISO 14289-1 §7.4.4에서는 이를 명시적으로 금지하므로 섹션을 나누거나 H 태그를 번호가 있는 H1..H6 수준으로 대체하십시오 |
비고
PDF/A 테스트는 전송 전 빠른 자체 검사용입니다. 파일을 즉시 부적격하게 만드는 문서 수준 문제(잘못된 PDF 버전, 누락된 OutputIntent, A 수준에서 누락된 구조 트리, 암호화, PDF/A-1의 계층)를 감지합니다. 모든 콘텐츠 스트림 연산자를 순회하거나 각 페인트 객체의 글꼴 포함 또는 색상 공간 참조를 검증하지는 않습니다. 이러한 검증에는 veraPDF 같은 전용 PDF/A 검증기가 필요합니다. 이 함수를 1차 검사 및 빌드 파이프라인의 회귀 게이트로 사용하세요. 라이브러리가 문제 목록을 재사용 가능한 텍스트 보고서로 만들게 하려면 CreatePreflightReport 또는 SavePreflightReport를 사용하세요. 텍스트, JSON, HTML 또는 CSV 보고서 출력에는 CreatePreflightReportEx 또는 SavePreflightReportEx를 사용하거나 전체 보고서 워크플로는 Preflight Reports를 참조하세요
보조 API GetPDFUADiagnostics는 외부 파일이 아니라 현재 작성 중인 메모리 내 문서에 대해 PDF/UA-1(ISO 14289-1) 관련 검사를 수행합니다
이 라이브러리로 PDF/A 출력을 생성할 때는 콘텐츠를 추가하기 전에 SetPDFAMode를 호출하십시오. SetPDFAMode 내부의 생성 측 가드는 선택한 파트에서 금지하는 작업을 차단하므로 이 방식으로 만든 문서는 일반적으로 CheckFileCompliance를 자동으로 통과합니다
예제
// 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;참고 항목
프리플라이트 보고서, CreatePreflightReport, CreatePreflightReportEx, SavePreflightReport, SavePreflightReportEx, ComparePreflightReports, SetPDFAMode, GetPDFUADiagnostics, GetStringListCount, GetStringListItem, SetPDFUAMode