콘텐츠로 이동
getnextpdf.com

감사관에게 그대로 건넬 수 있는 적합성

Spec: ISO 19005-4 (PDF/A-4)Spec: ISO 32000-2Spec: ETSI EN 319 142-1Spec: EN 16931-1

감사관은 문서가 적합하다는 말을 듣고 싶어 하지 않습니다. 그들이 건네받고 싶어 하는 것은 두 가지입니다: 문서, 그리고 그렇다고 말해 주는 검사의 결과입니다. 이 페이지는 NextPDF 로 그 둘을 모두 만들어 내는 것에 관한 이야기입니다 — 적합한 출력, 그리고 요청한 사람 앞에 내놓을 수 있는 검증 결과입니다.

오픈 소스 코어는 보존용 PDF/A 출력과 PAdES 기준선 서명을 생성하며, 적합성을 검증합니다 — PDF/A, PDF/UA, 그리고 서명입니다. 고급 에디션은 그 범위를 장기 검증과 전자 송장으로 확장합니다. 그 전반에 걸쳐 하나의 규칙이 유지됩니다: 적합성은 검사기의 판정이지, 생성자가 내릴 수 있는 약속이 아닙니다.

적합성 작업에는 드러나는 신호가 있습니다. 누군가 “예, 적합합니다”라고 말하고 나면 방 안이 조용해집니다. 그것을 증명할 수 있는 것을 아무도 내놓지 못하기 때문입니다. 문서는 올바르게 보입니다. 라이브러리는 평판이 좋습니다. 그 어느 것도 증거가 아닙니다.

그 간극의 비용은 비대칭적입니다. 단지 적합해 보이기만 하는 파일은 오늘의 검토는 통과하지만 몇 달 뒤 외부 검사에서 실패합니다 — 세무 당국에서, 장기 아카이브에서, 또는 법정에서 — 원래의 맥락은 사라지고 그 실패를 설명하는 비용이 큰 시점에 말입니다. 표준은 바로 이것을 예상했습니다. PDF/A 파일은 메타데이터에 대상 프로파일을 기록하지만, 그 식별은 생성자의 의도를 진술할 뿐입니다; 적합성의 판정은 생성 소프트웨어 외부의 검증 프로세스가 내립니다 (Spec: ISO 19005-4 (PDF/A-4), §6.7.3). 형식 그 자체가 생성자에게 최종 결정권이 없음을 알려 줍니다.

  • 적합한 출력과 그것이 적합하다고 말해 주는 결과를 함께 만들어 낼 수 있습니다. 주장이 아니라 — 산출물에 검사를 더한 것입니다.
  • 코어는 일반적인 경우를 다룹니다. PDF/A 보존용 출력과 PAdES B-B / B-T 서명을 생성하며, PDF/A, PDF/UA, 그리고 서명에 대한 적합성을 검증합니다.
  • 적합성은 검증기의 판정이며, 표준과 조항과 레벨로 범위가 한정됩니다. NextPDF 는 목표로 하는 프로파일과 레벨을 진술할 뿐, 한정 없는 “적합함”을 결코 말하지 않습니다 (Spec: ETSI EN 319 142-1, §6.1).
  • 고급 에디션은 그 범위를 확장합니다. 장기 검증 (PAdES B-LT / B-LTA)과 전자 송장(EN 16931 에 대한 ZUGFeRD / Factur-X)은 상업 등급의 기능입니다.
  • 엔진은 판정을 위조하기를 거부합니다. 후보를 생성하고 검사를 실행합니다; 자신의 권한만으로 파일에 적합 도장을 찍는 일은 결코 없습니다.

이 접근 방식은 어디에나 적용되는 하나의 깔끔한 분리입니다: 표준이 정의하는 산출물을 생성하는 것은 역량이며; 그 산출물이 적합한지 결정하는 것은 판정입니다. NextPDF 는 첫 번째를 제공하고 두 번째는 검사기에서 얻도록 합니다. 그 둘을 결코 뒤섞지 않습니다.

그 분리가 바로 출력을 건넬 수 있게 만드는 것입니다. 서명이 가장 명확한 사례입니다. 그 값은 서명 자체를 의도적으로 제외하는 선언된 바이트 범위에 대해 계산되며 (Spec: ISO 32000-2, §12.8), 바로 그렇기 때문에 유효성은 제삼자가 파일로부터 다시 계산할 수 있는 것이지, 믿음으로 받아들이는 것이 아닙니다. 생성자의 역할은 그 구조를 올바르게 작성하는 것입니다. 검증기의 역할은 그것을 확인하는 것입니다. 두 가지 역할, 두 당사자이며, 감사관이 신뢰하는 것은 두 번째 쪽입니다.

그래서 여러분이 건네는 워크플로에는 네 가지 동작이 있으며, 세 번째가 “적합해야 한다”를 “적합하다”로 바꾸는 동작입니다.

  1. Produce a candidateGenerate PDF/A archival output or a PAdES signature with the conformance-relevant structure in place — embedded fonts, declared profile, a signature over a correct byte range.
  2. Refuse the impossibleThe engine rejects conformance-breaking combinations (an encrypted PDF/A, a signature level it cannot honor) rather than emitting a file that silently does not conform.
  3. Validate independentlyRun a conformance checker — PDF/A, PDF/UA, signature. A passing report is the evidence; the producing library is not.
  4. Hand over bothGive the auditor the document and the validation result together. The verdict travels with the artifact.
From obligation to evidence: NextPDF produces a conforming candidate and refuses conformance-breaking operations, an independent validator delivers the verdict, and that report — not the producing library — is what you hand to the auditor.

중간 단계는 장식이 아닙니다. 보존 모드가 켜져 있는데 호환되지 않는 작업이 시도되면 — 예를 들어 암호화를 켜는 것 — 엔진은 파일을 적합하지 않은 “보존용” 문서로 격하시키는 대신 타입이 지정된 오류를 발생시킵니다. 큰 소리로 거부하는 것이 바로 후보를 뒤따르는 검사를 통과할 만큼 정직하게 유지하는 방법입니다.

그리고 그 검사는 단일 비트가 아니라 단계적입니다. PAdES 는 설계상 레벨로 구분됩니다: B-B, B-T, B-LT, B-LTA 는 각각 바로 앞 단계에 더해집니다 (Spec: ETSI EN 319 142-1, §6.1). B-T 서명은 B-B 에는 없는 신뢰된 타임스탬프를 담고 있습니다. 레벨을 명시하는 주장은 정직한 주장입니다; 그냥 “서명됨”은 아닙니다. NextPDF 는 레벨을 명시하도록 만들기 때문에, 여러분이 건네는 결과는 정확히 무엇이 달성되었는지를 말해 줍니다.

짧고 완결된 형태입니다. 후보를 생성하고, 그것을 검증하며, 검증기의 답을 증거로 취급합니다 — 생성 호출 자체를 증거로 삼지 않습니다.

<?php
declare(strict_types=1);
use NextPDF\Contracts\PdfDocumentInterface;
use NextPDF\Conformance\ConformanceValidator;
use NextPDF\Conformance\ConformanceTarget;
use NextPDF\Conformance\ValidationReport;
/**
* Produce a candidate, then prove it with an independent check.
*
* The producing call returns bytes that SHOULD conform. Only the
* validator's report turns "should" into something an auditor accepts.
*
* @param PdfDocumentInterface $candidate A document composed for archival
* (fonts embedded, profile declared)
*/
function archivalEvidence(
PdfDocumentInterface $candidate,
ConformanceValidator $validator,
): ValidationReport {
// 1. The producing call states intent; it does not certify.
$bytes = $candidate->getPdfData();
// 2. The check is the verdict. Conformance is decided here, by the
// validator, against the named target — not by the line above.
$report = $validator->validate($bytes, ConformanceTarget::PdfA);
// 3. Hand BOTH over: the bytes plus the report. The report names the
// target, the level, and every requirement that was checked.
return $report;
}

변수가 $candidate 라고 이름 붙은 것은 의도적이며, 보고서가 반환 값인 것도 의도적입니다. 문서는 여러분이 생성한 것이고; 보고서는 그것을 증명하는 것입니다. 감사관은 적합성을 입증해 달라고 요청했습니다 — 그래서 여러분은 생성자의 말이 아니라 그 입증을 건넵니다.

아카이브를 보존되지 않은 파일로 채우고 받은 편지함을 거부된 송장으로 채우는 그 오해는 단순합니다: “라이브러리가 PDF/A 라고 하니, 그 파일은 PDF/A 다.” 그것은 라이브러리가 내릴 판정이 아닙니다. 생성자는 적합하기를 의도하며 파일을 내놓고도 여전히 어떤 규범적 요구 사항을 놓칠 수 있습니다; 의도를 판정으로 바꾸는 것은 오직 검증 프로세스뿐입니다. 생성 호출을 증거로 취급하는 것이 핵심적인 오류이며, 그것이야말로 감사관이 잡아내도록 훈련받은 바로 그 오류입니다.

두 번째, 더 미묘한 함정은 “NextPDF 는 표준 적합하다”를 하나의 전체 보증으로 듣는 것입니다. 그런 것은 없으며, 어떤 정직한 엔진도 그것을 제공하지 않습니다. 적합성은 표준별, 조항별, 레벨별입니다. 올바른 주장은 어느 프로파일, 어느 레벨인지 명시하고 검사를 보여 줍니다. 그것이 없는 주장은 마케팅이며, Insider_ 는 그런 것을 인쇄하지 않습니다.

  • NextPDF 는 적합한 후보를 생성하고 검증합니다; 적합성을 인증하지는 않습니다. 검증기의 보고서가 증거입니다. 생성 라이브러리는 결코 자신의 인증서를 발급하지 않습니다.
  • 검증은 검사기의 결과이지, 절대적 보증이 아닙니다. 깨끗한 실행은 파일이 검증기가 검사한 요구 사항을, 그것이 구현하는 표준 판본에 대해 충족했음을 의미합니다. 그것은 얻을 수 있는 가장 강력한 증거이지, 형이상학적 증명이 아닙니다.
  • 코어의 범위는 PDF/A 보존용 출력과 PAdES B-B / B-T 서명, 그리고 PDF/A, PDF/UA, 서명에 대한 적합성 검증입니다. 고급 에디션 기능을 소리 없이 제공하지는 않습니다.
  • 장기 검증(B-LT / B-LTA)과 전자 송장(EN 16931 에 대한 ZUGFeRD / Factur-X)은 고급 에디션 기능입니다. EN 16931-1 은 페이로드가 검증되는 대상인 시맨틱 송장 모델을 정의하며 (Spec: EN 16931-1, Scope); 그것을 충족하는 것은 코어가 아니라 상업 등급입니다.
  • 법적 효력은 기술적 적합성과는 별개의 문제입니다. 어떤 서명이 한 관할권에서 법적으로 충분한지는 검증기가 아니라 법과 수신 당국이 결정합니다. NextPDF 는 기술적 결과를 말하고; 그 법적 무게는 여러분의 적합성 팀이 말합니다.
Conformance reach across editions — edition availability
EditionAvailability
Core

PDF/A 보존용 출력과 PAdES B-B / B-T 서명을 생성하며, PDF/A, PDF/UA, 그리고 서명에 대한 적합성을 검증합니다. 출력과 검증 결과는 모두 건넬 수 있도록 제공됩니다.

Pro

장기 검증 — PAdES B-LT / B-LTA — 을 추가하여, 인증서가 만료된 뒤에도 서명을 검증 가능하게 유지하는 폐기 증거와 문서 타임스탬프를 임베드합니다.

Enterprise

전자 송장(EN 16931 에 대한 ZUGFeRD / Factur-X)과 구조적 적합성 정책 및 보고서를 추가합니다 — 여전히 구조 검사이며, 최종 판정은 검증기와 여러분의 적합성 팀에 속합니다.

더 깊은 적합성 도구와, 모든 고급 에디션 기능에 대한 인용된 적합성 경계는 compliance and conformance 페이지에 있습니다. 검사를 직접 실행해야 할 때는, PDF/A and PDF/UA validation troubleshooting 가이드가 실패한 보고서를 읽고 고치는 과정을 안내합니다.

  • Archival and PDF/A — PDF/A 가 무엇을 보증하는지, 그리고 적합성을 증명하는 것이 왜 그것을 생성하는 것과는 별개의 작업인지.
  • Validating a signature properly — “서명이 유효하다” 뒤에 있는 검사의 전체 집합.
  • The standards landscape — 표준 단체의 지도와 하나의 조항이 어떻게 시험된 동작이 되는지.
  • PAdES baseline profiles — 하나의 진행으로서의 B-B, B-T, B-LT, B-LTA, 그리고 여러분의 의무가 필요로 하는 레벨을 고르는 방법.
  • Invoices and e-invoicing — EN 16931 에 대한 하이브리드 PDF / 구조화 데이터 송장을 처음부터 끝까지.
  • 적합성(Conformance) — 특정 표준, 조항, 레벨로 범위가 한정된 채, 검증 프로세스가 판정하는, 파일과 표준의 규범적 요구 사항 사이의 일치.
  • 후보(Candidate) — 독립적인 검증기가 적합하다고 확인하기 전, 적합하기를 의도하며 생성된 파일.
  • 검증기 / 적합성 검사기(Validator / conformance checker) — 파일을 표준의 요구 사항에 비추어 판단하고, 감사관이 의존하는 결과를 만들어 내는 독립 소프트웨어.
  • PDF/A — ISO 19005 제품군: 장기 보존을 위한 제약된 PDF 프로파일로, 시간이 지나도 문서의 정적 외형을 재현하도록 설계되었습니다.
  • PDF/UA — ISO 14289 제품군: 태그가 지정된 PDF 가 보조 기술에 구조를 어떻게 전달하는지 정의하는 접근성 프로파일.
  • PAdES — PDF Advanced Electronic Signatures, ISO 32000-2 가 PDF 서명을 위해 참조하는 ETSI EN 319 142 서명 프로파일 제품군(B-B, B-T, B-LT, B-LTA).
  • EN 16931 — 핵심 전자 송장의 시맨틱 데이터 모델을 정의하는 유럽 표준으로, 하이브리드 전자 송장 페이로드가 검사되는 대상인 의무입니다.