Pro EditionStabilität: Experimentell
C2PA-Preview-Capability-Status
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Preview-Capability-Status. Niemals GA. Diese Seite gibt an, was die C2PA-Oberfläche heute als Vorschau tut. Es ist keine Konformitätsaussage, keine Zertifizierung und keine Aussage, dass NextPDF C2PA-signierte Dateien erzeugt. Die Oberfläche ist eine Vorschau und wird niemals als allgemein verfügbar beschrieben.
NextPDF Pro stellt eine Content-Credentials-(C2PA)-Vorschauoberfläche über
C2paCapabilityStatus bereit. Diese Seite ist die ehrliche Grenze für diese
Oberfläche: was stets verfügbar ist, was hinter einem per Opt-in aktivierbaren
Entwurfs-Flag bleibt und warum keine Endzustandsaussage gemacht wird.
Zwei Schichten: stabile Naht vs. geflaggte Synthese
Abschnitt betitelt „Zwei Schichten: stabile Naht vs. geflaggte Synthese“Die Oberfläche hat zwei klar getrennte Schichten, und die Unterscheidung ist der ganze Sinn der Grenze:
- Stets verfügbar — die stabile Naht.
ManifestStoreund dieC2paManifestEmbedder-Schnittstelle sind eine eingefrorene, anbieterneutrale Naht. Sie können einen Manifest Store in beide Richtungen tragen:embed()schreibt die Bytes eines vom Aufrufer bereitgestellten Store in ein PDF, undextract()parst einen Store wieder heraus (gibtnullzurück, wenn keiner vorhanden ist). Diese Naht macht keine Claim-Synthese — sie stellt nie selbst Assertions oder Claims zusammen; sie bewegt einen opakenManifestStore, den der Aufrufer bereits hält. - Hinter dem Opt-in-Flag — Claim-Synthese. Das tatsächliche Bauen eines
Manifest Store (das Zusammenstellen des Claim und der
Ingredient-Hash-Assertion) liegt nur in
ExperimentalC2paEmbedder, gated hinter einem standardmäßig ausgeschalteten Env-Flag. Dies ist der entwurfsförmige, ohne-Vorankündigung-brechende Teil.
Die präzise Aussage lautet also: Extraktion und Byte-Transport sind stets erreichbar; die Synthese der Manifest-Inhalte ist nur erreichbar, wenn das Preview-Flag explizit aktiviert ist.
Warum es so funktioniert
Abschnitt betitelt „Warum es so funktioniert“Die tragende Entscheidung trennt eine stabile Transportnaht vom volatilen
Synthesepfad, statt einen Embedder alles machen zu lassen. Das C2PA-PDF-Profil
liegt weiterhin in der Hand einer externen Arbeitsgruppe und ist nicht eingefroren.
Seine Claim-Signature-Box (c2cs, eine COSE_Sign1-Struktur) ist der Teil, der am
ehesten driften wird. Daher lässt die Synthese diese Box weg und liegt hinter einem
standardmäßig ausgeschalteten Flag, während Extrahieren-und-Tragen von keinem nicht
eingefrorenen Feld abhängt und für alle erreichbar bleibt. Das Status-Objekt legt die
Reife als Daten offen, mit hartcodiert falschem generallyAvailable und
conformanceClaimed, sodass Aufrufer die Absicht des Erzeugers nicht mit einem
validierten Ergebnis verwechseln können. Diese Trennung erlaubt es Teams, die
dauerhafte Naht jetzt zu übernehmen und später einen signierten Adapter
hinzuzufügen, ohne ein Drahtformat-Versprechen, das NextPDF noch nicht halten kann.
Design-Hintergrund: Compliance, die Sie einem Prüfer vorlegen können.
Preview-Capability-Status
Abschnitt betitelt „Preview-Capability-Status“C2paCapabilityStatus meldet den Status der Oberfläche explizit als Daten, nicht als
Prosa. Seine Eigenschaften generallyAvailable und conformanceClaimed sind
hartcodiert false und bleiben unabhängig vom Flag falsch; das Aktivieren der
Vorschau kippt nur previewEnabled. Das maturity-Token ist die nicht
beanspruchende Bezeichnung preview-draft, und specPin verzeichnet den gepinnten
Entwurfs-Commit. Ein Aufrufer liest „preview”, nicht „signiert und verifiziert”.
use NextPDF\Pro\Compliance\C2pa\C2paCapabilityStatus;
// Reads the env flag live; performs no I/O.$status = C2paCapabilityStatus::current();
$status->previewEnabled; // bool — true only if the opt-in env flag is set$status->generallyAvailable; // false (always)$status->conformanceClaimed; // false (always)$status->maturity; // 'preview-draft'$status->specPin; // '4e2afed8' (pinned draft commit, short)$status->envGate; // 'NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT'
echo $status->summary();// "C2PA preview-draft surface is present but switched off;// the C2PA-PDF profile is not yet final."Die C2PA-Spezifikation wird von einer externen Arbeitsgruppe gepflegt, und das Profil, das NextPDF anvisieren würde, ist nicht eingefroren. Weil das Profil nicht eingefroren ist, macht die Vorschau bewusst keine Endzustandsaussage. Wenn das Arbeitsgruppen-Profil sich stabilisiert, würde sich der Status der Oberfläche ändern — nicht ihr Marketing.
Die Vorschau aktivieren
Abschnitt betitelt „Die Vorschau aktivieren“Das Opt-in ist eine einzelne Prozess-Umgebungsvariable,
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT. Sie wird live gelesen und strikt gegen die
Zeichenkette "1" verglichen — jeder andere Wert (einschließlich 0, true, yes,
der leeren Zeichenkette oder Abwesenheit) wird als AUS behandelt. Eine Pro-Lizenz
allein aktiviert sie nicht; der Operator muss sich bewusst dafür entscheiden.
Schnellstart
Abschnitt betitelt „Schnellstart“// Opt in for the current process BEFORE constructing the embedder.putenv('NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT=1');
use NextPDF\Pro\Compliance\C2pa\Experimental\ExperimentalC2paEmbedder;
$embedder = new ExperimentalC2paEmbedder();
// Synthesise a draft-shaped Manifest Store binding the host PDF by SHA-256.$pdfBytes = file_get_contents('input.pdf');$store = $embedder->buildManifestStore($pdfBytes, 'my-app/1.0.0');
// The result is an opaque ManifestStore; $store->toBytes() is its serialisation.Produktionsnahe Nutzung
Abschnitt betitelt „Produktionsnahe Nutzung“Setzen Sie in einem echten Deployment das Flag beim Boot (nicht via putenv() zur
Laufzeit), gaten Sie es auf ein explizites menschliches Opt-in und prüfen Sie den
Capability-Status, bevor Sie den experimentellen Embedder berühren, sodass der
Entwurfspfad nur absichtlich erreicht wird.
use NextPDF\Pro\Compliance\C2pa\C2paCapabilityStatus;use NextPDF\Pro\Compliance\C2pa\Experimental\ExperimentalC2paEmbedder;
// Set NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT=1 in the environment at process boot.
$status = C2paCapabilityStatus::current();
if (!$status->previewEnabled) { // Flag off: do NOT instantiate the experimental embedder — its // constructor would throw. Fall back to your non-preview path. return;}
// Surface the draft pin to the operator. The bytes are transient:// re-embed once a stable adapter ships. Run `composer c2pa:draft-status`// in CI to fail the build if the pinned snapshot goes stale.$pinnedDraft = ExperimentalC2paEmbedder::SPEC_PIN_SHA; // 4e2afed8…$pinnedDate = ExperimentalC2paEmbedder::SPEC_PIN_DATE; // 2026-04-26
$embedder = new ExperimentalC2paEmbedder();$store = $embedder->buildManifestStore($pdfBytes, 'my-app/1.0.0');Fail-closed, wenn das Flag aus ist
Abschnitt betitelt „Fail-closed, wenn das Flag aus ist“Es gibt keinen stillen Fallback. Wird ExperimentalC2paEmbedder konstruiert, während
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT nicht exakt "1" ist, wirft der Konstruktor eine
LogicException, deren Meldung das Flag, die Env-Variable und den gepinnten
Entwurfs-SHA/-Datum benennt. Ein Aufrufer kann nicht versehentlich entwurfsförmige
Bytes in ein Produktions-PDF serialisieren, indem er bloß eine Pro-Lizenz hält.
Der stabile Extract-Pfad ist ebenfalls fail-closed, aber anders: extract() gibt
null zurück, wenn kein Manifest Store vorhanden ist (der häufige Fall, günstig und
ausnahmefrei gehalten), und wirft eine C2paException-Unterklasse —
JumbfBombException, JumbfCycleDetectedException, JumbfDepthExceededException
oder MalformedJumbfException — wenn ein Store vorhanden ist, aber die
Adversarial-Hardening-Invarianten des Parsers (Tiefe, Zyklus, Größe, Anzahl)
verletzt. Diese werden nie stillschweigend verschluckt.
Ehrliche Grenze
Abschnitt betitelt „Ehrliche Grenze“Die folgende Sprache wird per Richtlinie für diese Oberfläche nicht verwendet und sollte in keiner davon abgeleiteten Dokumentation, UI oder Marketing erscheinen:
- „C2PA conformant” oder „C2PA compliant”.
- „C2PA certified”.
- „C2PA signed” als fertige, zugesicherte Fähigkeit.
- „GA” / „generally available”.
Was die Oberfläche ehrlich ist: eine stabile Naht, die einen C2PA Manifest Store
parsen (extrahieren) und tragen (einbetten) kann, plus ein standardmäßig
ausgeschalteter experimenteller Embedder, der entwurfsförmige Manifest-Inhalte
synthetisiert, sowie ein Status-Objekt, das seinen eigenen Vorschau-Zustand meldet.
Was sie nicht ist: ein Erzeuger attestierter, verifizierbarer C2PA-Credentials.
Insbesondere lässt der experimentelle Embedder bewusst die Claim-Signature-(c2cs)-Box
weg — den COSE_Sign1-Teil der Spezifikation, der am ehesten driften wird — sodass die
Ausgabe selbst bei aktivem Flag unsignierte, entwurfsförmige Bytes sind. Das
Arbeitsgruppen-Profil ist nicht eingefroren; die Grenze ist der Punkt.
Das Drahtformat, das der experimentelle Embedder ausgibt, ist auf einen Entwurfs-Commit
von c2pa-org/specifications (SPEC_PIN_SHA = 4e2afed8…, datiert 2026-04-26)
gepinnt, als öffentliche Konstante exponiert, sodass Aufrufer den SHA pinnen können,
den sie erwarten.
API-Oberfläche
Abschnitt betitelt „API-Oberfläche“| Symbol | Rolle |
|---|---|
C2paCapabilityStatus | Ehrliches, maschinenlesbares Status-Value-Object. current() liest das Env-Flag live; generallyAvailable / conformanceClaimed sind stets false; summary() trägt keine GA-/Konformitätsaussage. |
ManifestStore | Unveränderliches Manifest-Store-Value-Object. Der Typ der stabilen Naht; trägt Bytes in beide Richtungen. Keine Claim-Level-Accessors. Stets verfügbar. |
C2paManifestEmbedder | Eingefrorene, anbieterneutrale SPI: embed() / extract(). Keine Claim-Synthese. extract() gibt bei Fehlen null zurück. Stets verfügbar. |
ExperimentalC2paEmbedder | Standardmäßig ausgeschaltete Synthese. buildManifestStore() stellt ein Entwurfsmanifest zusammen; der Konstruktor wirft LogicException, sofern das Env-Flag nicht exakt "1" ist. |
Feature::PREVIEW_C2PA_DRAFT | Gescoptes Opt-in-Flag. ENV_PREVIEW_C2PA_DRAFT = NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT; isEnabled() ist striktes === '1'. |
Randfälle & Fallstricke
Abschnitt betitelt „Randfälle & Fallstricke“- Standardmäßig aus, striktes Opt-in. Die Synthese liegt hinter
NEXTPDF_FEATURE_PREVIEW_C2PA_DRAFT, strikt als=== '1'gelesen. Alles andere ist AUS; eine Pro-Lizenz allein aktiviert sie nicht. - Fail-closed zur Konstruktionszeit.
new ExperimentalC2paEmbedder()wirftLogicException, wenn das Flag aus ist — niemals ein stilles No-op. - Die Ausgabe ist unsigniert und transient. Selbst bei aktivem Flag wird die Claim-Signature-Box weggelassen; behandeln Sie die Bytes als entwurfsförmig und betten Sie sie erneut ein, sobald ein stabiler Adapter ausgeliefert wird.
- Pin-Veraltungsprüfung. Führen Sie
composer c2pa:draft-status(Exit 0 frisch / 1 Soft-Warnung / 2 Hard-Fail) in CI aus, um zu erkennen, wann der gepinnte Entwurfs-Snapshot veraltet. - Kein Konformitätsverdikt. Das Status-Objekt meldet den Vorschau-Zustand, kein Konformitätsergebnis. Ein externer Validator und ein eingefrorenes Arbeitsgruppen-Profil wären Voraussetzungen für jede Konformitätsdiskussion, und keines davon wird angenommen.
- Sprachdisziplin. Beschreiben Sie die Ausgabe nicht als „C2PA signed”, „conformant”, „compliant”, „certified” oder „GA”. Verwenden Sie „Preview-Capability-Status”.
Sicherheitshinweise
Abschnitt betitelt „Sicherheitshinweise“Eine Vorschauoberfläche ist keine Sicherheitskontrolle. Das Tragen oder Synthetisieren eines entwurfsförmigen Manifest Store ist nicht dasselbe wie das Erzeugen oder Verifizieren einer Attestierung — und der experimentelle Embedder lässt die Claim-Signature-Box vollständig weg, sodass seine Ausgabe konstruktionsbedingt unsigniert ist. Verlassen Sie sich für die Herkunftssicherung in der Produktion nicht auf diese Vorschau; sie sichert nicht zu, dass ein Credential gültig oder dass eine Datei signiert ist.
Konformität
Abschnitt betitelt „Konformität“Diese Oberfläche macht keine Konformitätsaussage. Das C2PA-Profil wird von einer externen Arbeitsgruppe gepflegt und ist nicht eingefroren; NextPDF gibt daher einen Preview-Capability-Status und eine Entwurfs-/Arbeitsgruppen-Grenze an, nicht Konformität oder Zertifizierung. Es wird kein Standardtext wiedergegeben.
Veröffentlichungsgrenze
Abschnitt betitelt „Veröffentlichungsgrenze“Diese Seite dokumentiert ausschließlich extern beobachtbares Verhalten und die unterstützte öffentliche API-Oberfläche. Interne Namespace-Pfade, Hilfsklassen, Mechanismus-Tabellen, Runbook-Dateinamen und Ticket-Präfixe liegen außerhalb des Geltungsbereichs.
Siehe auch
Abschnitt betitelt „Siehe auch“- C2PA-Preview — Deep Reference — die vollständige API-Referenz für diese Oberfläche.
- Pro-Sicherheit
- Core-Signieren
- Konformitäts-Landingpage
- Preview-Capability-Status der Post-Quanten-Kryptografie