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
462 lines
22 KiB
Markdown
462 lines
22 KiB
Markdown
# 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)
|