PDF with Info Dictionary and XMP
A one-page PDF with a known Info dictionary and XMP metadata stream while its page-content stream remains identical to the stripped twin.

Rendered preview of the pdf file (1.3 KB). Download above for the original.
Specifications
- Metadata
- Title, Author, Subject, Creator, fixed dates, XMP packet
- Content Stream Sha256
- ae1a5796a41e12ee90123a79ddc3821b70a7c087e66b58364d95606b8a4540f5
- Twin
- full
Testing contract
Expected to pass- Scenario
- Extract metadata from the full PDF and compare its underlying content with the stripped control.
- Expected result
- Read Title, Author, Subject, Creator, fixed dates, XMP packet; compute contentStream SHA-256 ae1a5796a41e12ee90123a79ddc3821b70a7c087e66b58364d95606b8a4540f5, matching the stripped twin.
What is a .pdf file?
PDF (Portable Document Format) is a page-oriented format that fixes layout, fonts, and vector and raster graphics so a page renders identically anywhere. A `%PDF-` header is followed by numbered objects, a cross-reference table mapping each to a byte offset, and a trailer; edits append incremental updates rather than rewrite the file. Page content is a stream of drawing operators, so a PDF holds no words or paragraphs, only positioned glyph runs. Adobe released it in 1993 and gave it to ISO as ISO 32000-1 in 2008.
How to use this file
Use an example PDF to test text extraction, rendering, metadata parsing, AcroForm handling, and OCR pipelines — checking that extraction reconstructs reading order from glyph positions, that a scanned page yields no text, and that an incremental update leaves earlier revisions in the file.
How to use this file for testing
“PDF with Info Dictionary and XMP” is a deterministic Novus Examples fixture for Metadata testing, Conversion testing. Images, audio, video, and documents with documented metadata paired with deliberately stripped versions, for verifying extraction, preservation, redaction, and privacy-scrubbing behavior.
Documented properties for this file: PDF · 1,372 bytes. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
Document fixtures list their internal structure (pages, fields, tracked changes, embedded objects) in the spec table. Test extractors, converters, and OCR against that known structure, and compare searchable↔scanned or format-twin companions when present.
Code examples
import pdfplumber # pip install pdfplumber
with pdfplumber.open("pdf-info-xmp-full.pdf") as pdf:
print(len(pdf.pages), "pages")
print(pdf.pages[0].extract_text())Related files
- docxDOCX with Core and Custom PropertiesA valid DOCX package with fixed core properties and two custom properties surrounding an unchanged word/document.xml part.

- docxDOCX with Metadata StrippedThe same DOCX document part without core or custom property parts, suitable for checking OOXML metadata removal without content loss.

- txtConvert v2 Archive SHA-256 ListGNU-style SHA-256 list for the two canonical TAR members, preserving relative paths and full lowercase digests. Stable P8 artifact p8-convert-archive-sha256.

- azwConvert v2 DRM-Free AZW E-bookDRM-free AZW/MOBI7 e-book source copied byte-for-byte from the catalog's valid reader fixture for legacy import testing. Stable P8 artifact p8-convert-legacy-azw.

- cbrConvert v2 Two-Page CBR ComicValid CBR comic container with two deterministic PNG pages in lexical reading order for legacy comic conversion. Stable P8 artifact p8-convert-legacy-cbr.

- jsonCycloneDX Container Image SBOMA CycloneDX SBOM whose root component is an OCI container image rather than an application, mixing a fictional operating-system package with language packages — the shape an image scanner emits. Every package, version, hash and licence is fictional — the tree describes nothing real.

Generated by generation/p6_core.py. Free for any use, no attribution required — license.