{
  "method": {
    "corpus": "GovDocs1, the same 4,840 extracted PDFs as the metadata, redaction, split, sideways and page-size studies",
    "sampleRule": "every extracted PDF with 3 to 40 pages and at most 3 MB (a size HerePDF opens at once in a browser tab); a census of those, no sample",
    "crops": "HerePDF's cropPdf (lib/pdfResize.js) with one box taken from page 1's visible size and applied to every page: margins = x 0.1, y 0.1, width 0.8, height 0.8 of the page, from the bottom-left; bottomQuarter = x 0, y 0.25, width 1, height 0.75 of the page, from the bottom-left; topHalf = x 0, y 0.5, width 1, height 0.5 of the page, from the bottom-left",
    "fills": "HerePDF's resizePdf with the A4 or the Letter preset in Fill mode, which scales a page until it covers the paper and clips what overflows",
    "cutOff": "a text run PDF.js returned for the original and no longer returns for the output, over the first 5 pages (PDF.js leaves out text outside the visible frame), counting repeats",
    "stillInFile": "for a cropped file: every page's decoded content stream hashes the same as the original's, the MediaBox is the same, and putting each page's original CropBox back with pdf-lib restores the original visible size",
    "extractors": "the first 400 files by lowest SHA-256 of the file name; the first cut-off run of 8 or more letters and digits that is not also on the visible page is looked for in the output by a whole-file scan (raw bytes, inflated streams, hex strings), PDF.js, Ghostscript 10.02.1 txtwrite (the MediaBox, and with -dUseCropBox) and pdfminer.six 20221105; a program counts only when it also found the run in the original",
    "limits": "a 2009-era US government corpus; the three crops and the two Fill presets are ours, not ones people chose; PDF.js and the other programs are not every program; encrypted files are not measured; a crop is a statement about the file, not about any one viewer's behaviour",
    "sampleIdsSha256": {
      "runs": "ade77e5d50db53abe64c3f3a04838ba9fa55eee80575014d3aaacded9b915331",
      "extractors": "e770788a9755b782c04cf37f339ab063515cdcbe05aa851d6f4b65979588d54c"
    },
    "tool": {
      "pdfLib": "2.11.1",
      "pdfjs": "6.4.299"
    },
    "generatedOn": "2026-10-27",
    "commit": "8b5ac31 (plus uncommitted changes)"
  },
  "tried": 2995,
  "completed": 2889,
  "notCompleted": {
    "failed": 106
  },
  "encrypted": 99,
  "pages": 37682,
  "filesWithText": 2818,
  "textRuns": 1389153,
  "crop": {
    "margins": {
      "files": 2889,
      "visibleFrameNarrowed": 2889,
      "mediaBoxUnchanged": 2889,
      "contentIdentical": 2889,
      "oneCallRestoresFrame": 2889,
      "filesWithTextCutOff": 2649,
      "runsCutOff": 273380,
      "filesLargerAfter": 2,
      "filesSmallerAfter": 2887,
      "sizeRatio": {
        "median": 0.8940963534735161,
        "max": 1.1051116215558214,
        "min": 0.08255895014718952
      },
      "withTextFiles": 2818
    },
    "bottomQuarter": {
      "files": 2889,
      "visibleFrameNarrowed": 2889,
      "mediaBoxUnchanged": 2889,
      "contentIdentical": 2889,
      "oneCallRestoresFrame": 2889,
      "filesWithTextCutOff": 2788,
      "runsCutOff": 273528,
      "filesLargerAfter": 2,
      "filesSmallerAfter": 2887,
      "sizeRatio": {
        "median": 0.8938102005368703,
        "max": 1.1045823586074033,
        "min": 0.08252723253962223
      },
      "withTextFiles": 2818
    },
    "topHalf": {
      "files": 2889,
      "visibleFrameNarrowed": 2889,
      "mediaBoxUnchanged": 2889,
      "contentIdentical": 2889,
      "oneCallRestoresFrame": 2889,
      "filesWithTextCutOff": 2809,
      "runsCutOff": 698419,
      "filesLargerAfter": 2,
      "filesSmallerAfter": 2887,
      "sizeRatio": {
        "median": 0.8938102005368703,
        "max": 1.1045823586074033,
        "min": 0.08253251880755011
      },
      "withTextFiles": 2818
    }
  },
  "fill": {
    "A4": {
      "files": 2889,
      "filesWithTextCutOff": 548,
      "runsCutOff": 22880,
      "sizeRatio": {
        "median": 0.9690121811595563,
        "max": 1.4297363413971187,
        "min": 0.08784021991851233
      }
    },
    "Letter": {
      "files": 2889,
      "filesWithTextCutOff": 128,
      "runsCutOff": 5989,
      "sizeRatio": {
        "median": 0.9670046752590347,
        "max": 1.4944278336504484,
        "min": 0.08783352597028779
      }
    }
  },
  "extractors": {
    "tried": 400,
    "cropBottomQuarter": {
      "files": 388,
      "filesWithCutText": 366,
      "readers": {
        "rawFile": {
          "couldReadOriginal": 134,
          "stillFound": 134
        },
        "pdfjs": {
          "couldReadOriginal": 366,
          "stillFound": 0
        },
        "gs": {
          "couldReadOriginal": 361,
          "stillFound": 361
        },
        "gsCrop": {
          "couldReadOriginal": 361,
          "stillFound": 361
        },
        "pdfminer": {
          "couldReadOriginal": 357,
          "stillFound": 357
        }
      }
    },
    "fillA4": {
      "files": 388,
      "filesWithCutText": 44,
      "readers": {
        "rawFile": {
          "couldReadOriginal": 33,
          "stillFound": 33
        },
        "pdfjs": {
          "couldReadOriginal": 44,
          "stillFound": 0
        },
        "gs": {
          "couldReadOriginal": 44,
          "stillFound": 44
        },
        "gsCrop": {
          "couldReadOriginal": 44,
          "stillFound": 44
        },
        "pdfminer": {
          "couldReadOriginal": 44,
          "stillFound": 44
        }
      }
    }
  }
}
