A versioned collection of real-world, standards, malformed, and deliberately stressful PDF inputs. It turns PDF reliability into something that can be measured, repeated, and compared.
What KillerPDF v1.8.2 testing showed
I tested three different PDF collections five times each. KillerPDF returned the same outcome totals every time, without crashing or timing out. The cards show how much of each collection it successfully opened and saved.
The tests used the v1.8.2 release on an AMD Ryzen 5 3600 workstation with 32 GB of memory and NVMe corpus storage.
Downloadable regression set
- PDFs tested
- 16,696
- Saved
- 15,013
- Skipped
- 1,396
- Save failed
- 287
- Median full set time
- 2m 48s
Standards and color set
- PDFs tested
- 649
- Saved
- 367
- Skipped
- 246
- Save failed
- 36
- Median full set time
- 5.7s
Private stress set
- PDFs tested
- 29,599
- Saved
- 23,698
- Skipped
- 4,286
- Save failed
- 1,615
- Median full set time
- 8m 33s
Damaged-file safety test
- PDFs tested
- 80
- Rejected or skipped
- 78
- Save failed
- 2
- Crashes
- 0
- Timeouts
- 0
Where the PDFs came from
These four source groups match the four test results above. The public v1.8.1 download supplies 17,328 PDFs. The full run adds 29,696 locally held PDFs whose sources and counts are public, but whose files cannot be republished as part of the corpus.
Downloadable regression set
16,696 downloadable files from real test suites, generated examples, and openly licensed documents.
- iText 7 6,695
- arXiv Creative Commons batches 3,409
- veraPDF corpus 2,907
- Mozilla PDF.js 874
- PDFium test corpus 823
- qpdf 684
- pdfcpu 453
- xberg test documents 326
- Apache PDFBox 162
- Apache FOP PDF Images 55
- py-pdf sample files 34
- pikepdf 33
- Asymptote gallery 33
- OCRmyPDF 31
- Apache Tika 30
- Apache FOP 26
- gendx 25
- libHaru 20
- PDF Tools Kit 17
- HummusJS 14
- pdf-email-optimizer 12
- img2pdf 9
- OpenPrinting 7
- OpenPDF 6
- pdf-lib 5
- PDF Association SafeDocs 2
- PDF Differences 2
- PDFKit 2
Standards and color set
649 files tested: 552 downloadable standards PDFs and 97 locally held color-suite PDFs.
- OpenPreserve Format Corpus 282
- Ghent PDF Output Suite 5.0 93
- Synthetic PDF Testset 88
- Techniques for Accessible PDF 82
- PDF Differences 34
- BFO PDF/A Test Suite 33
- PDF Association SafeDocs 23
- PDF 2.0 examples 7
- Altona Test Suite 1.2 and 2.0 4
- PDF COS Syntax fixtures 2
- Apache Tika 1
Private stress set
29,599 locally held files from the PDF Association Stressful PDF Corpus. They are included in the full run but not in the public download.
- PDF Association Stressful PDF Corpus 29,599
Damaged-file safety test
80 downloadable files kept separate from normal documents so damaged inputs can be tested behind a timeout.
- qpdf fuzz corpus 77
- iText 7 1
- PDF Tools Kit 1
- pikepdf 1
Every public file has its source path, pinned revision, byte count, and SHA-256 fingerprint in the release manifests. The complete source record links each upstream project and explains its license, accepted files, duplicates, and exclusions.
Developer guide
The guided runner turns the corpus into a repeatable open-and-save benchmark for KillerPDF, qpdf, or another command-line PDF tool.
1. Start the runner
Use the Copy run command button above and paste the command into PowerShell. It downloads the current runner to your temporary folder and starts it. Windows PowerShell 5.1 and PowerShell 7 are supported.
Prefer to inspect or save it first? View the PowerShell script.
2. Choose the PDF tool
KillerPDF is checked in its standard Windows install locations. qpdf is checked on PATH and in the runner's own tool cache. If qpdf is somewhere else, choose it from the menu and then select Locate an existing qpdf.exe. The runner can also download and verify either built-in tool when needed.
Another command-line PDF tool can be connected through a reusable adapter. The next section shows the complete setup.
3. Choose the collections and run count
Select the general regression set, standards and conformance files, malformed security files, or every public collection. Five measured runs are the standard comparison run. Each normal collection also receives one warmup pass.
4. Choose where the corpus lives
The default corpus folder is %LOCALAPPDATA%\KillerPDF-Corpus\corpus. Developers who want the collection on another drive can launch a saved copy of the runner with:
5. Read and compare the results
Results are written under %LOCALAPPDATA%\KillerPDF-Corpus\benchmarks. The detailed CSV files contain each measured run. The summary CSV files contain median timing, throughput, outcome counts, tool version, and executable SHA-256. Keep the same corpus version, adapter, run count, and workstation conditions when comparing releases.
.partial files, which the runner removes when cancellation completes.The corpus files themselves are not tied to the runner. Any PDF application can open them manually. GUI-only applications still require manual testing when they do not expose a reliable command-line or automation interface.
Adapt another PDF tool
A tool can be automated when it accepts an input PDF, writes a separate output PDF, and finishes without interactive prompts.
Create the adapter
- Choose Custom command-line tool from the first runner menu.
- Choose Create a new adapter.
- Enter the full path to the tool's executable and a name for the result files.
- Enter each command-line argument separately and in the order required by the tool.
- Enter the exit codes that mean saved or saved with a warning, then choose a per-file timeout.
Map the input and output files
Use {input} where the application expects the source PDF and {output} where it expects the saved PDF. If the tool normally runs like this:
enter these four arguments when the wizard asks for them:
What the runner does with it
The runner launches the executable directly once per PDF. It does not evaluate a PowerShell or command prompt string. For each file it substitutes full temporary paths, applies the timeout, records the exit code, and checks that the output PDF exists before counting the operation as saved.
The adapter is tested with one corpus file before the full benchmark begins. The runner reports the validation result and asks whether to continue. Created adapters are stored under %LOCALAPPDATA%\KillerPDF-Corpus\adapters and appear in the menu on later runs.
Run a saved adapter without the menus
The adapter result files record saved outputs, warnings, failures, timeouts, timing, the executable version, and its SHA-256 hash. Open the complete adapter file reference and example.
What the results mean
Each adapter preserves the outcomes its tool can report instead of pretending every PDF application behaves the same way.
KillerPDF: OK, skipped, and failed
OK means KillerPDF opened and saved the input through the tested batch path. Skipped means it intentionally refused the input or could not enter that path, such as an encrypted, unsupported, or unreadable file. Failed means the save began but did not complete.
qpdf: saved, warning, failed, and timed out
Saved means qpdf produced an output without warnings. Warning means it produced an output while reporting a recoverable problem. Failed means it produced no usable output. Timed out means the per-file safety limit stopped the process.
These results measure safe automated open and save behavior. They do not claim rendering, text extraction, layout reconstruction, or semantic table recovery.