{
  "date": "2026-11-01",
  "method": "Two extraction routes; same underlying PDFium family, not independent engines. Marker-presence checks, no OCR/model.",
  "python": "3.12.14",
  "platform": "Darwin arm64",
  "versions": {
    "docling": "2.145.0",
    "pypdfium2": "5.14.0",
    "reportlab": "5.1.0"
  },
  "provider_calls": 0,
  "provider_cost_eur": 0,
  "total_cost": "Not measured: includes engineering, hardware and energy",
  "fixtures": [
    {
      "file": "tekst.pdf",
      "sha256": "ee886ba8d84ba4b5fb16de3f08ba117ab0193268c35dc06f7675da53d9961d59",
      "expected_markers": [
        "ALFA-101",
        "BETA-202"
      ],
      "expect_text_layer": true
    },
    {
      "file": "kolommen.pdf",
      "sha256": "2d5852c43d9d5c1e6213e6ea78844256fc3204d77ac8d63ec17ef4dba55bc88e",
      "expected_markers": [
        "LINKS-111",
        "RECHTS-222"
      ],
      "expect_text_layer": true
    },
    {
      "file": "beeld.pdf",
      "sha256": "e580eb49d32a13c3f8fd1b467d380192400a7c9c9f5f74c0c1e6d72a3a42b28c",
      "expected_markers": [
        "ALFA-101",
        "BETA-202"
      ],
      "expect_text_layer": false
    }
  ],
  "results": [
    {
      "fixture": "tekst",
      "route": "pypdfium2",
      "markers_present": 2,
      "markers_total": 2,
      "expected_markers_present": 2,
      "expected_check_passed": true,
      "output_file": "tekst-pypdfium2.txt",
      "output_sha256": "d65aec1b766fe3cf6e72598346745320595c6755de21e4fa17b7e542e7898018",
      "docling_table_count": null
    },
    {
      "fixture": "tekst",
      "route": "docling",
      "markers_present": 2,
      "markers_total": 2,
      "expected_markers_present": 2,
      "expected_check_passed": true,
      "output_file": "tekst-docling.txt",
      "output_sha256": "648c323c33251c4a844ab62b7474a8c1a77288c437a70614852de69321adc08b",
      "docling_table_count": 0
    },
    {
      "fixture": "kolommen",
      "route": "pypdfium2",
      "markers_present": 2,
      "markers_total": 2,
      "expected_markers_present": 2,
      "expected_check_passed": true,
      "output_file": "kolommen-pypdfium2.txt",
      "output_sha256": "80ebe4a95021f7accc74508652aab9e39e6c1bea0a86808716fb75549dee3622",
      "docling_table_count": null
    },
    {
      "fixture": "kolommen",
      "route": "docling",
      "markers_present": 2,
      "markers_total": 2,
      "expected_markers_present": 2,
      "expected_check_passed": true,
      "output_file": "kolommen-docling.txt",
      "output_sha256": "bba328525029abe21f721da781e85ccd5a152f2ced7966860820efd6d2c2cae5",
      "docling_table_count": 0
    },
    {
      "fixture": "beeld",
      "route": "pypdfium2",
      "markers_present": 0,
      "markers_total": 2,
      "expected_markers_present": 0,
      "expected_check_passed": true,
      "output_file": "beeld-pypdfium2.txt",
      "output_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
      "docling_table_count": null
    },
    {
      "fixture": "beeld",
      "route": "docling",
      "markers_present": 0,
      "markers_total": 2,
      "expected_markers_present": 0,
      "expected_check_passed": true,
      "output_file": "beeld-docling.txt",
      "output_sha256": "e5dc819883d3c4b39a4a3f3054652d05bbceb23ae07f1d5f396b3cb309cce5fb",
      "docling_table_count": 0
    }
  ],
  "limitations": [
    "Three tiny synthetic single-page fixtures only",
    "Presence checks do not assess reading order, tables, semantics or OCR",
    "Both routes share PDFium dependencies; no independent vendor quality comparison",
    "No network capture, throughput or human-effort comparison",
    "An image-only document is expected to produce no marker text without OCR"
  ]
}
