Skip to content

PDF/X conformance: the print-production output intent NextPDF emits

Boundary statement. A tested profile is not a certification.

Scope caveat (read first). ISO 15930 (the PDF/X family standard) is not in the NextPDF verification corpus. This page does not claim independent PDF/X-4 or PDF/X-6 certification. NextPDF emits the print-production output intent and International Color Consortium (ICC) profile machinery that PDF/X workflows require. NextPDF verifies these structures against ISO 32000-2 §14.11.5 (the OutputIntent dictionary that ISO 15930 imports by reference) and the ICC.1 / ISO 15076-1 profile structure. An external prepress preflight tool, not this library, decides whether a file conforms to a PDF/X part.

NextPDF Core emits a /GTS_PDFX OutputIntent referencing an embedded ICC DestOutputProfile when a wide-gamut working space is selected. NextPDF Core gates the embedded ICC profile to version 4. These artifacts are the structural prerequisites a PDF/X-4 / PDF/X-6 preflight checks. The library produces them. A preflight tool decides conformance.

Terminal window
composer require nextpdf/core:^3

The PDF/X output-intent path is a Core capability. The document’s OutputColorProfile drives it. You do not need a Premium package for the GTS_PDFX OutputIntent itself.

NextPDF\Core\OutputColorProfile selects the working space: DeviceRGB (default, no wide-gamut intent), DisplayP3, Rec2020, A98RGB, or ProphotoRGB. When you select any wide-gamut case, PdfWriter emits, per ISO 32000-2 §14.11.5:

  • a /Type /OutputIntent /S /GTS_PDFX dictionary in the catalog /OutputIntents array;
  • an embedded ICC stream as the DestOutputProfile (the working-space profile, for example display-p3-v4.icc);
  • the OutputConditionIdentifier / registry fields the dictionary requires.

NextPDF\Graphics\ColorSpace\IccVersionTier gates the embedded profile. V4 is required for PDF 2.0 / PDF/A-4 / PDF/X-6 output intents. requiresV4Strict() rejects a v2 profile so a PDF/X-6 claim is not made against a non-v4 ICC profile. This is the structural prerequisite a PDF/X-6 preflight verifies; it is not the preflight itself.

SymbolEffect
OutputColorProfile (enum)Working-space discriminator; wide-gamut cases trigger /GTS_PDFX OutputIntent emission.
OutputColorProfile::isWideGamut(): boolTrue for any non-DeviceRGB case.
OutputColorProfile::iccFilename(): ?stringThe embedded ICC profile resource for the case.
IccVersionTier::requiresV4Strict()Gate that rejects non-v4 ICC profiles when claiming PDF/A-4 / PDF/X-6 structure.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Config;
use NextPDF\Core\Document;
use NextPDF\Core\OutputColorProfile;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/print.pdf';
$config = new Config(outputColorProfile: OutputColorProfile::DisplayP3);
$doc = Document::createStandalone($config);
$doc->setTitle('Print production sample');
$doc->writeHtml('<h1>Wide-gamut artwork</h1>');
$doc->save($out); // /GTS_PDFX OutputIntent + display-p3-v4.icc emitted here
echo "Wrote {$out} — run an external PDF/X preflight to validate.\n";

In production, feed the output into an external prepress preflight: the receiving print workflow’s tool of record. Treat the preflight report as the gate. NextPDF emits the GTS_PDFX OutputIntent and v4 ICC. The preflight tool adjudicates PDF/X-4 / PDF/X-6 conformance. NextPDF does not ship a PDF/X validator.

  • DeviceRGB emits no PDF/X intent. The default profile is byte-identical to legacy output and carries no /GTS_PDFX OutputIntent. You must select a wide-gamut profile explicitly for a PDF/X workflow.
  • v2 ICC blocks a PDF/X-6 claim. requiresV4Strict() rejects a v2 profile; do not claim PDF/X-6 structure against a non-v4 ICC profile.
  • Spot colours / overprint. Full PDF/X-1a/X-3 CMYK + spot-colour workflows are out of scope for the Core OutputIntent path. This page covers only the PDF/X-4 / PDF/X-6 ICC-based output intent.
  • No certification claim. Emitting the OutputIntent is structural support. PDF/X conformance is a preflight verdict, not a library state.

A wide-gamut OutputIntent adds one embedded ICC stream at save(). Its size is fixed for the working space. Budgeted at wall ≤ 1500 ms, peak ≤ 128 MB.

Print-production output intents are colour-management metadata, not a security control. The embedded ICC profile contains public data.

OutputIntent emission runs in process. Only the document and the embedded ICC profile are written. No content leaves the process; the profile carries no personally identifiable information (PII).

The example logs only the output path and a validation hint. It logs no document bytes; NEXTPDF_COOKBOOK_OUTPUT is honoured.

A PDF/X file is not access-controlled. The OutputIntent provides colour reproducibility for a print condition, not confidentiality.

The PDF/X OutputIntent path performs no cryptography. FIPS mode has no effect.

ClaimSpecClausereference_id
An OutputIntent references a DestOutputProfile ICC stream for the output rendering condition.ISO 32000-2§14.11.5
The OutputIntent carries an OutputConditionIdentifier / registry identification.ISO 32000-2§14.11.5
Output intents live in the document catalog’s OutputIntents array.ISO 32000-2§14.11.5
A conforming ICC profile carries a defined header with a version field.ICC.1 / ISO 15076-1§7
The embedded DestOutputProfile uses the ICC v4 profile structure.ICC.1 / ISO 15076-1§7

ISO 15930 (PDF/X) is not in the verification corpus. The claims above are the ISO 32000-2 §14.11.5 + ICC.1 prerequisites that a PDF/X preflight checks. Citations are clause-id + reference_id pointers into the verification corpus (manifest). No standards text is reproduced.