pdftract/tests/fixtures/PROVENANCE.md
jedarden 20142ca8c7 feat(bf-3bn8d): verify unmapped glyph test fixture
Verified existing unmapped-glyphs.pdf fixture:
- Fixture contains 10 character codes with custom glyph names
- 7 glyphs marked as unmapped (g001-g003, CustomA, CustomB, NotAGlyph, glyph_0041)
- 3 glyphs mapped via AGL (A, B, space)
- Configuration in build/unmapped-glyph-names.json valid and accessible
- Updated PROVENANCE.md with current fixture SHA256 and details

Acceptance criteria:
-  Test fixture exists (unmapped-glyphs.pdf)
-  Configuration includes unmapped_glyph_names with g001-g009
-  Chosen glyphs exist in fixture CMAP
-  Fixture saved in tests/fixtures/encoding/
-  Configuration parses correctly

Verification: notes/bf-3bn8d.md
Fixture: tests/fixtures/encoding/unmapped-glyphs.pdf
Config: build/unmapped-glyph-names.json
Provenance: tests/fixtures/PROVENANCE.md
2026-07-06 15:44:39 -04:00

462 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# EC-04-rc4-encrypted.pdf
Generated by tests/fixtures/generate_encrypted_fixtures.py
PDF 1.7, RC4 encryption (V=1, R=2), 40-bit key, user password: "user40"
Generated: 2026-05-28
# EC-05-aes128-encrypted.pdf
Generated by tests/fixtures/generate_encrypted_fixtures.py
PDF 1.7, AES-128 encryption (V=2, R=3), 128-bit key, user password: "user128"
Generated: 2026-05-28
# EC-06-aes256-encrypted.pdf
Generated by tests/fixtures/generate_encrypted_fixtures.py
PDF 2.0, AES-256 encryption (V=5, R=5), 256-bit key, user password: "user256"
Generated: 2026-05-28
# EC-empty-password.pdf
Generated by tests/fixtures/generate_encrypted_fixtures.py
PDF 1.7, no encryption (control fixture)
Generated: 2026-05-28
# EC-04-rc4-encrypted.pdf
Generated by tests/fixtures/generate_encrypted_fixtures.py
PDF 1.7, RC4 encryption (V=1, R=2), 40-bit key, user password: "user40"
Generated: 2026-05-28
# EC-05-aes128-encrypted.pdf
Generated by tests/fixtures/generate_encrypted_fixtures.py
PDF 1.7, AES-128 encryption (V=2, R=3), 128-bit key, user password: "user128"
Generated: 2026-05-28
# EC-06-aes256-encrypted.pdf
Generated by tests/fixtures/generate_encrypted_fixtures.py
PDF 2.0, AES-256 encryption (V=5, R=5), 256-bit key, user password: "user256"
Generated: 2026-05-28
# EC-empty-password.pdf
Generated by tests/fixtures/generate_encrypted_fixtures.py
PDF 1.7, no encryption (control fixture)
Generated: 2026-05-28
# sample.pdf
Copied from valid-minimal.pdf for SDK examples default path
Minimal valid PDF v1.4 fixture for contract method examples
Generated: 2026-05-31
# json_schema/simple_invoice.pdf
Simple invoice PDF for JSON schema validation tests
Generated: 2026-06-01
# json_schema/EC-04-rc4-encrypted.pdf
Copied from fixtures/EC-04-rc4-encrypted.pdf for JSON schema validation
PDF 1.7, RC4 encryption (V=1, R=2), 40-bit key, user password: "user40"
Generated: 2026-06-01
# json_schema/EC-05-aes128-encrypted.pdf
Copied from fixtures/EC-05-aes128-encrypted.pdf for JSON schema validation
PDF 1.7, AES-128 encryption (V=2, R=3), 128-bit key, user password: "user128"
Generated: 2026-06-01
# json_schema/valid-minimal.pdf
Minimal valid PDF v1.4 fixture for JSON schema validation tests
Generated: 2026-05-28
# json_schema/sample.pdf
Copied from valid-minimal.pdf for SDK examples default path
Minimal valid PDF v1.4 fixture for contract method examples
Generated: 2026-05-31
# vector/academic-paper/source.pdf
Generated by tests/fixtures/vector/generate_vector_cer_corpus.py
Clean vector PDF with embedded text for CER testing (PDF 1.4, Type1 Helvetica, WinAnsiEncoding)
Academic paper on machine learning - Abstract, Introduction, Methods, Results, Conclusion
Generated: 2026-06-01
# vector/technical-documentation/source.pdf
Generated by tests/fixtures/vector/generate_vector_cer_corpus.py
Clean vector PDF with embedded text for CER testing (PDF 1.4, Type1 Helvetica, WinAnsiEncoding)
API documentation with Getting Started, Authentication, Endpoints, Rate Limits
Generated: 2026-06-01
# vector/legal-contract/source.pdf
Generated by tests/fixtures/vector/generate_vector_cer_corpus.py
Clean vector PDF with embedded text for CER testing (PDF 1.4, Type1 Helvetica, WinAnsiEncoding)
Service Agreement with Services, Term, Compensation, Confidentiality, Termination, Governing Law
Generated: 2026-06-01
# vector/scientific-report/source.pdf
Generated by tests/fixtures/vector/generate_vector_cer_corpus.py
Clean vector PDF with embedded text for CER testing (PDF 1.4, Type1 Helvetica, WinAnsiEncoding)
Climate Research Report with Executive Summary, Data Collection, Analysis, Findings, Recommendations
Generated: 2026-06-01
# vector/user-manual/source.pdf
Generated by tests/fixtures/vector/generate_vector_cer_corpus.py
Clean vector PDF with embedded text for CER testing (PDF 1.4, Type1 Helvetica, WinAnsiEncoding)
Product User Manual with Quick Start Guide, Unboxing, Setup, Features, Troubleshooting, Support
Generated: 2026-06-01
# vector/financial-report/source.pdf
Generated by tests/fixtures/vector/generate_vector_cer_corpus.py
Clean vector PDF with embedded text for CER testing (PDF 1.4, Type1 Helvetica, WinAnsiEncoding)
Q1 Financial Report with Revenue, Expenses, Net Income, Outlook, Risk Factors
Generated: 2026-06-01
# vector/conference-proceedings/source.pdf
Generated by tests/fixtures/vector/generate_vector_cer_corpus.py
Clean vector PDF with embedded text for CER testing (PDF 1.4, Type1 Helvetica, WinAnsiEncoding)
Conference Proceedings with Keynote Address, Paper Session, Panel Discussion, Workshop
Generated: 2026-06-01
# vector/medical-research/source.pdf
Generated by tests/fixtures/vector/generate_vector_cer_corpus.py
Clean vector PDF with embedded text for CER testing (PDF 1.4, Type1 Helvetica, WinAnsiEncoding)
Clinical Trial Results with Background, Methodology, Results, Discussion, Conclusion
Generated: 2026-06-01
# vector/multi-page-academic/source.pdf
Generated by tests/fixtures/vector/generate_vector_cer_corpus.py
Clean vector PDF with embedded text for CER testing (PDF 1.4, Type1 Helvetica, WinAnsiEncoding)
Multi-page academic paper (3 pages) - Abstract, Introduction, Conclusion
Generated: 2026-06-01
# vector/code-documentation/source.pdf
Generated by tests/fixtures/vector/generate_vector_cer_corpus.py
Clean vector PDF with embedded text for CER testing (PDF 1.4, Type1 Helvetica, WinAnsiEncoding)
Code library documentation with Installation, Quick Example, API Reference, Supported Formats, Limitations, License
Generated: 2026-06-01
# scanned/receipt/receipt-300dpi.pdf
Generated by tests/fixtures/scanned/generate_scanned_fixtures.py
Source PDF for scan simulation at 300 DPI
Supermarket receipt with items, prices, totals (Helvetica 10pt, Letter, 14pt line spacing)
Generated: 2026-06-01
# scanned/receipt/receipt-300dpi-scanned.pdf
Generated by pdftoppm + img2pdf from receipt-300dpi.pdf at 300 DPI
Scan simulation for OCR testing (rasterized image-only PDF)
Generated: 2026-06-01
# scanned/documents/invoice-300dpi.pdf
Generated by tests/fixtures/scanned/generate_scanned_fixtures.py
Source PDF for scan simulation at 300 DPI
Service invoice with line items, totals, payment terms (Helvetica 11pt, Letter, 16pt line spacing)
Generated: 2026-06-01
# scanned/documents/invoice-300dpi-scanned.pdf
Generated by pdftoppm + img2pdf from invoice-300dpi.pdf at 300 DPI
Scan simulation for OCR testing (rasterized image-only PDF)
Generated: 2026-06-01
# scanned/invoice/invoice-300dpi.pdf
Generated by tools/generate_invoice_pdf_fixtures.py
300 DPI single-page invoice fixture for OCR testing
Business-to-business invoice with header, addresses, 6 line items, totals, payment terms
Image-based scanned PDF (not text-embedded), 2550x3300 pixels (letter size at 300 DPI)
Generated: 2026-07-05
# scanned/invoice/invoice-300dpi-ground-truth.txt
Generated by tools/generate_invoice_pdf_fixtures.py
Complete text content for invoice-300dpi.pdf OCR validation
37 lines including invoice header, addresses, line items, totals, and payment terms
Generated: 2026-07-05
# tools/generate_invoice_pdf_fixtures.py
Invoice fixture generator with proper 300 DPI metadata
Supports img2pdf and reportlab backends for PDF generation from source images
Includes verification with pdfimages and pdfinfo
Generated: 2026-07-05
# scanned/documents/form-300dpi.pdf
Generated by tests/fixtures/scanned/generate_scanned_fixtures.py
Source PDF for scan simulation at 300 DPI
Employment application form with fields and checkboxes (Helvetica 11pt, Letter, 18pt line spacing)
Generated: 2026-06-01
# scanned/documents/form-300dpi-scanned.pdf
Generated by pdftoppm + img2pdf from form-300dpi.pdf at 300 DPI
Scan simulation for OCR testing (rasterized image-only PDF)
Generated: 2026-06-01
# scanned/form/form-300dpi.pdf
Generated by tests/fixtures/scanned/convert_to_scanned.sh
300 DPI single-page employment application form for OCR testing
Image-based scanned PDF (not text-embedded), 2550x3300 pixels (letter size at 300 DPI)
3 pages: Personal Information, Availability/Education/Employment History, References/Certification
Generated: 2026-07-05 (bf-7mvji)
# scanned/form/form-300dpi-ground-truth.txt
Generated by tests/fixtures/scanned/convert_to_scanned.sh
Complete text content for form-300dpi.pdf OCR validation
79 lines including all form fields, labels, checkboxes, and certification text
Generated: 2026-07-05 (bf-7mvji)
# scanned/multi-page/doc-10page-300dpi.pdf
Generated by tests/fixtures/scanned/generate_scanned_fixtures.py
Source PDF for scan simulation at 300 DPI (10 pages with diverse content)
Times-Roman 12pt, Letter, 18pt line spacing, "Page N:" markers
Generated: 2026-06-01
# scanned/multi-page/doc-10page-300dpi-scanned.pdf
Generated by pdftoppm + img2pdf from doc-10page-300dpi.pdf at 300 DPI
Scan simulation for OCR testing (rasterized image-only PDF, 10 pages)
Generated: 2026-06-01
# scanned/multi-page/report-300dpi.pdf
Copied from doc-10page-300dpi-scanned.pdf for multi-page OCR fixture naming convention
Scan simulation for OCR testing (rasterized image-only PDF, 11 pages, 300 DPI)
Content: Introduction, text-heavy, forms, tables, technical specs, legal text, financial statements
Generated: 2026-07-06 (bf-204mm)
# scanned/multi-page/report-300dpi-ground-truth.txt
Copied from doc-10page-300dpi.txt for multi-page OCR fixture naming convention
Complete text content for report-300dpi.pdf OCR validation
256 lines including page markers and diverse content types (forms, tables, legal, financial)
Generated: 2026-07-06 (bf-204mm)
# scanned/low-quality/degraded-200dpi.pdf
Generated by scanned/low-quality/create_degraded_200dpi.py
Intentionally degraded 200 DPI PDF for OCR quality testing
Applied degradation: Gaussian blur (radius=0.3), random noise (amount=12), contrast reduction (0.9), sharpness reduction (0.85), JPEG compression (quality=85)
Source: Abraham Lincoln public domain biography excerpt (2.5KB)
File size: 588KB, multi-page PDF with visible scan artifacts
Generated: 2026-07-06 (bf-4ozna)
SHA256: ec655a34d2a8b6ca6d510ceafb24338e528c722f16d9f6c1a76e95baf2abd557
# scanned/low-quality/degraded-200dpi-ground-truth.txt
Generated by scanned/low-quality/create_degraded_200dpi.py
Complete text content for degraded-200dpi.pdf OCR validation
Abraham Lincoln biography excerpt with proper nouns, dates, historical terms
Generated: 2026-07-06 (bf-4ozna)
# scanned/low-quality/create_degraded_200dpi.py
Python script for generating degraded 200 DPI PDF fixtures
Uses reportlab for PDF generation, PIL for image degradation effects
Applies blur, noise, contrast/sharpness reduction, and compression artifacts
Requires: pip3 install reportlab Pillow
Generated: 2026-07-06 (bf-4ozna)
# scanned/low-quality/source-document-abraham-lincoln-public-domain.txt
Public domain source text for degraded PDF fixture generation
Abraham Lincoln biography by George Haven Putnam (Project Gutenberg eBook #11728)
URL: https://www.gutenberg.org/ebooks/11728
Generated: 2026-07-06 (bf-4ozna)
# scanned/receipt/receipt-300dpi.pdf
Generated by tests/fixtures/scanned/generate_scanned_fixtures.py
Source PDF for scan simulation at 300 DPI
Simple sales receipt with itemized list and totals (Helvetica 11pt, 6.5" x 4", 14pt line spacing)
Generated: 2026-06-01
# scanned/receipt/receipt-300dpi-scanned.pdf
Generated by pdftoppm + img2pdf from receipt-300dpi.pdf at 300 DPI
Scan simulation for OCR testing (rasterized image-only PDF)
Generated: 2026-06-01
# scanned/documents/invoice-300dpi.pdf
Generated by tests/fixtures/scanned/generate_scanned_fixtures.py
Source PDF for scan simulation at 300 DPI
Business invoice with line items, subtotal, tax, and total (Helvetica 11pt, Letter, 16pt line spacing)
Generated: 2026-06-01
# scanned/documents/invoice-300dpi-scanned.pdf
Generated by pdftoppm + img2pdf from invoice-300dpi.pdf at 300 DPI
Scan simulation for OCR testing (rasterized image-only PDF)
# json_schema/simple-text.pdf
Minimal text-only PDF for JSON schema validation tests
Generated: 2026-06-01
# encoding/no-mapping.pdf
Generated by tests/fixtures/generate_unicode_recovery_fixtures.rs
PDF 1.4, Type1 font with custom glyph names, no ToUnicode CMap, no standard encoding
Level 4 Unicode recovery test fixture (worst case: no encoding fallback)
Content: <20><><EFBFBD> (three U+FFFD replacement characters - glyph names /g001/g002/g003 are not in AGL and cannot be recovered)
Generated: 2026-06-09
Regenerated: 2026-07-02 (bf-512z1)
Regenerated: 2026-07-03 (bf-f0xqd: corrected ground truth from "ABC" to U+FFFD)
Regenerated: 2026-07-03 (bf-1m30m: regenerated via generate_unicode_recovery_fixtures.rs)
SHA256: b24f88d3add958bfec1d6b134f2cd030cd41bb1932bedbe99405599bd01fa8f0
# encoding/agl-only.pdf
Generated by tests/fixtures/generate_unicode_recovery_fixtures.rs
PDF 1.4, Type1 font with AGL glyph names only, no ToUnicode CMap
Level 2 Unicode recovery test fixture (Adobe Glyph List fallback)
Content: "Hello\nWorld" (extracted via AGL glyph name mapping)
Generated: 2026-06-09
Regenerated: 2026-07-02 (bf-512z1)
Regenerated: 2026-07-03 (bf-1m30m: regenerated via generate_unicode_recovery_fixtures.rs)
SHA256: 5683d9e6374b73f33386d96e22244ed42f8bf0b385237a1a0a8af8ea427d89a9
# encoding/fingerprint-match.pdf
Generated by tests/fixtures/generate_unicode_recovery_fixtures.rs
PDF 1.4, embedded Type1 font subset, no ToUnicode CMap
Level 3 Unicode recovery test fixture (SHA-256 font fingerprint matching)
Content: "Test" (extracted via font-fingerprints.json fingerprint lookup)
Generated: 2026-06-09
Regenerated: 2026-07-02 (bf-512z1)
Regenerated: 2026-07-03 (bf-1m30m: regenerated via generate_unicode_recovery_fixtures.rs)
SHA256: 2eaeba307f622ca6b6d6174bd1bdd9a1310268c7d4f101d3e2a222ba8b719689
# encoding/shape-match.pdf
Generated by tests/fixtures/generate_unicode_recovery_fixtures.rs
PDF 1.4, Type1 font with custom glyph names, no ToUnicode CMap
Level 4 Unicode recovery test fixture (glyph shape recognition from glyph-shapes.json)
Content: "S" (extracted via glyph shape database lookup)
Generated: 2026-06-09
Regenerated: 2026-07-02 (bf-512z1)
Regenerated: 2026-07-03 (bf-1m30m: regenerated via generate_unicode_recovery_fixtures.rs)
SHA256: bb3249d64ca59190c603444f9ea99652f3d6e95bce1389a53a8f17851c2e6939
# encoding/unmapped-glyphs.pdf
Generated by tests/fixtures/encoding/generate_unmapped_glyphs.py
PDF 1.4, Type1 font with custom glyph names, no ToUnicode CMap, custom encoding
GLYPH_UNMAPPED diagnostic test fixture - 10 character codes with custom glyph names
Content: Line 1: <20><><EFBFBD> (3 U+FFFD for /g001, /g002, /g003)
Line 2: <20><><EFBFBD><EFBFBD> (4 U+FFFD for /CustomA, /CustomB, /NotAGlyph, /glyph_0041)
Line 3: AB (U+0041, U+0042, U+0020 for /A, /B, /space)
Glyph names: g001, g002, g003 (PUA unmapped); CustomA, CustomB, NotAGlyph, glyph_0041 (unmapped); A, B, space (AGL mapped)
Expected diagnostics: 7 GLYPH_UNMAPPED warnings
Generated: 2026-07-06 (bf-3bn8d)
SHA256: 82810a488a0e680e1568cfcc8edcaaba1a02e8254e60aa77339309bb621a659c
# encoding/unmapped-comprehensive.pdf
Generated by tests/fixtures/gen_unmapped_comprehensive.rs
PDF 1.4, Type1 font with custom glyph names, no ToUnicode CMap, custom /Differences encoding
Comprehensive GLYPH_UNMAPPED diagnostic test fixture - 7 unmapped + 3 mapped glyphs
Content: "<22><><EFBFBD>\n<><6E><EFBFBD><EFBFBD>\nAB " (7×U+FFFD for /g001/g002/g003/CustomA/CustomB/NotAGlyph/glyph_0041, then "AB " for /A/B/space)
Unmapped glyphs: /g001, /g002, /g003 (PUA), /CustomA, /CustomB (custom), /NotAGlyph (orphaned), /glyph_0041 (non-AGL)
Mapped glyphs: /A, /B, /space (AGL - Level 2 fallback)
Ground truth: encoding/unmapped-comprehensive.txt (3 lines: 3×U+FFFD, 4×U+FFFD, "AB ")
Generated: 2026-07-03 (bf-5taa6)
SHA256: a4d4c76c3edbc1bb9b870e9d0c453a943700dd4508cfdfe020ba0a28675cc94c
# cjk/cjk-chinese-gb18030.pdf
Generated by tests/fixtures/generate_cjk_with_tounicode.rs
PDF 1.4, Type0 composite font with GBpc-EUC-H CMap encoding and ToUnicode CMap
Phase 2.3 CJK encoding test fixture - Simplified Chinese (GB18030)
Content: "你好世界" (Simplified Chinese, 4 characters)
Ground truth: cjk-chinese-gb18030.txt (12 bytes, UTF-8)
Font: AdobeSongStd-Light (CIDFontType0, Adobe-GB1 CIDSystemInfo)
ToUnicode: Adobe-GB1-UCS2 CMap with custom character mappings
Generated: 2026-06-24
Regenerated: 2026-06-24 (bf-3ourh)
# cjk/cjk-japanese-shiftjis.pdf
Generated by tests/fixtures/generate_cjk_with_tounicode.rs
PDF 1.4, Type0 composite font with 90ms-RKSJ-H CMap encoding and ToUnicode CMap
Phase 2.3 CJK encoding test fixture - Japanese (Shift-JIS)
Content: "こんにちは" (Japanese, 5 characters)
Ground truth: cjk-japanese-shiftjis.txt (15 bytes, UTF-8)
Font: HeiseiMin-W3 (CIDFontType0, Adobe-Japan1 CIDSystemInfo)
ToUnicode: Adobe-Japan1-UCS2 CMap with custom character mappings
Generated: 2026-06-24
Regenerated: 2026-06-24 (bf-3ourh)
# cjk/cjk-korean-euckr.pdf
Generated by tests/fixtures/generate_cjk_with_tounicode.rs
PDF 1.4, Type0 composite font with KSCms-UHC-H CMap encoding and ToUnicode CMap
Phase 2.3 CJK encoding test fixture - Korean (EUC-KR)
Content: "안녕하세요" (Korean, 5 characters)
Ground truth: cjk-korean-euckr.txt (15 bytes, UTF-8)
Font: HYSMyeongJo-Medium (CIDFontType0, Adobe-Korea1 CIDSystemInfo)
ToUnicode: Adobe-Korea1-UCS2 CMap with custom character mappings
Generated: 2026-06-24
Regenerated: 2026-06-24 (bf-3ourh)
# cjk/cjk-tc-big5.pdf
Generated by tests/fixtures/generate_cjk_with_tounicode.rs
PDF 1.4, Type0 composite font with ETen-B5-H CMap encoding and ToUnicode CMap
Phase 2.3 CJK encoding test fixture - Traditional Chinese (Big5)
Content: "你好世界" (Traditional Chinese, 4 characters)
Ground truth: cjk-tc-big5.txt (12 bytes, UTF-8)
Font: PMingLiU-Light (CIDFontType0, Adobe-CNS1 CIDSystemInfo)
ToUnicode: Adobe-CNS1-UCS2 CMap with custom character mappings
Generated: 2026-06-24
Regenerated: 2026-06-24 (bf-3ourh)
# tagged/tagged-ua-simple.pdf
Generated by tests/fixtures/generate_tagged_fixtures.rs
PDF 1.7, PDF/UA-1 (Universal Accessibility) with /MarkInfo /Marked true
Phase 7.1 StructTree extraction test fixture - Minimal tagged PDF
StructTree: Document root with H1 (MCID 0) and P (MCID 1) elements
Content: "Heading Level 1" (H1) and "This is a paragraph under the heading." (P)
Ground truth: tagged-ua-simple.expected.json (structure_tree field with Document/H1/P hierarchy)
Generated: 2026-06-24 (bf-5pyzm)
# tagged/tagged-ua-table.pdf
Generated by tests/fixtures/generate_tagged_fixtures.rs
PDF 1.7, PDF/UA-1 with table structure (Table/TR/TD elements)
Phase 7.1 StructTree extraction test fixture - Tagged table
StructTree: Document root with H1 (MCID 0) and Table (2 rows × 3 columns, MCIDs 1-6)
Content: "Simple Table Example" (H1) and table cells (A1, B1, C1, A2, B2, C2)
Ground truth: tagged-ua-table.expected.json (structure_tree with nested Table/TR/TD hierarchy)
Generated: 2026-06-24 (bf-5pyzm)
# tagged/tagged-a-2a.pdf
Generated by tests/fixtures/generate_tagged_fixtures.rs
PDF 1.7, PDF/A-2a (Level A accessibility) with XMP metadata and StructTree
Phase 7.1 StructTree extraction test fixture - PDF/A-2a compliance
StructTree: Document root with H1 (MCID 0) and P (MCID 1) elements
XMP Metadata: pdfaid:part="2", pdfaid:conformance="A"
Content: "PDF/A-2a Document" (H1) and "This is a PDF/A-2a compliant tagged document." (P)
Ground truth: tagged-a-2a.expected.json (structure_tree with Document/H1/P hierarchy)
Generated: 2026-06-24 (bf-5pyzm)
# tagged/tagged-mcid-ordering.pdf
Generated by tests/fixtures/generate_tagged_fixtures.rs
PDF 1.7, Tagged PDF with MCID-to-structure-element mapping test
Phase 7.1 StructTree extraction test fixture - MCID ordering validation
StructTree: Document root with three P elements (MCIDs 0, 1, 2 in sequence)
Content: "First block", "Second block", "Third block" (each as separate P elements)
Ground truth: tagged-mcid-ordering.expected.json (structure_tree with sequential MCID mapping)
Generated: 2026-06-24 (bf-5pyzm)
# forms/acroform-text-fields.pdf
Generated by tests/fixtures/forms/generate_form_fixtures.py
PDF 1.4, AcroForm with multiple field types
Phase 7.4 form field extraction test fixture - Text, checkbox, radio, and choice fields
Fields: employee_name (Tx, required, maxLen=50), address (Tx, multiline), is_manager (Btn, checkbox), department (Btn, radio group with sales/engineering options), role (Ch, choice/combo with manager/developer/designer options)
Ground truth: forms/acroform-text-fields.json (form_fields array with field names, types, values, flags, and options)
Generated: 2026-07-03 (bf-4sn1j)
# forms/acroform-readonly.pdf
Generated by tests/fixtures/forms/generate_form_fixtures.py
PDF 1.4, AcroForm with read-only field flags
Phase 7.4 form field extraction test fixture - ReadOnly flag validation
Fields: company_name (Tx, ReadOnly=true), contact_email (Tx, ReadOnly=false), verified (Btn, checkbox, ReadOnly=true)
Ground truth: forms/acroform-readonly.json (form_fields array with read_only flags)
Generated: 2026-07-03 (bf-4sn1j)
# forms/acroform-submit.pdf
Generated by tests/fixtures/forms/generate_form_fixtures.py
PDF 1.4, AcroForm with submit and reset button actions
Phase 7.4 form field extraction test fixture - Button actions
Fields: username (Tx, required), submit (Btn, pushbutton with SubmitForm action to https://example.com/submit), reset (Btn, pushbutton with ResetForm action)
Ground truth: forms/acroform-submit.json (form_fields array with action objects for buttons)
Generated: 2026-07-03 (bf-4sn1j)
# forms/xfa-dynamic.pdf
Generated by tests/fixtures/forms/generate_form_fixtures.py
PDF 1.7, AcroForm with XFA data packet placeholder
Phase 7.4 form field extraction test fixture - XFA detection
Fields: xfa_field1 (Tx, fallback field), XFA array with XML datasets/template placeholder (XFA XML parsing not yet implemented)
Ground truth: forms/xfa-dynamic.json (form_fields array with note about XFA parsing status)
Generated: 2026-07-03 (bf-4sn1j)
# scanned/low-quality/degraded-200dpi.pdf
Generated by tests/fixtures/scanned/low-quality/create_degraded_200dpi.py
200 DPI low-quality degraded PDF for OCR accuracy testing
Simulated degradation: 200 DPI downsampling, gaussian blur, noise, and compression artifacts
Source: Project Gutenberg eBook #11728 (Abraham Lincoln biography, public domain)
Purpose: WER (Word Error Rate) measurement with degraded OCR conditions
Generated: 2026-07-06 (bf-1bdsf)
SHA256: ec655a34d2a8b6ca6d510ceafb24338e528c722f16d9f6c1a76e95baf2abd557
# scanned/low-quality/degraded-200dpi-ground-truth.txt
Generated by tests/fixtures/scanned/low-quality/create_degraded_200dpi.py
Complete text content for degraded-200dpi.pdf OCR validation
Source: Abraham Lincoln biography (public domain)
Purpose: Ground truth reference for WER calculation using tests/fixtures/scanned/calculate_wer.py
Generated: 2026-07-06 (bf-1bdsf)