Skip to content

Latest Benchmarks

Auto-generated. Run scripts/benchmark from the repo root to update this file.

Generated: 2026-05-25 20:21:42 UTC PHP: 8.4.21 Environment: no opcache, no xdebug


Library1 page5 pages10 pages50 pages100 pages
phpdftk13.042ms2.440ms2.684ms4.669ms6.918ms
FPDF822.653μs902.027μs973.547μs1.575ms2.320ms
TCPDF10.228ms10.840ms11.915ms20.329ms30.898ms
mPDF25.277ms29.310ms32.803ms64.035ms104.538ms
Dompdf11.261ms15.695ms21.485ms73.374ms159.300ms
Library1 page5 pages10 pages50 pages100 pages
phpdftk9.069mb5.889mb5.975mb6.610mb7.432mb
FPDF5.040mb5.040mb5.040mb5.040mb5.042mb
TCPDF12.878mb12.878mb12.878mb12.878mb12.878mb
mPDF17.590mb17.649mb17.687mb17.980mb18.342mb
Dompdf9.323mb9.543mb9.864mb12.557mb15.920mb
Library1 page5 pages10 pages50 pages100 pages
phpdftk3.231ms3.474ms3.772ms5.757ms8.420ms
FPDF1.077ms1.159ms1.267ms1.974ms2.817ms
TCPDF14.582ms15.514ms16.597ms26.185ms38.387ms
Library1 page5 pages10 pages50 pages100 pages
phpdftk5.316mb5.362mb5.422mb5.914mb6.513mb
FPDF4.374mb4.374mb4.374mb4.403mb4.463mb
TCPDF12.453mb12.453mb12.453mb12.453mb12.453mb

Writer Levels Comparison — WriterLevelsBench

Section titled “Writer Levels Comparison — WriterLevelsBench”

Same workload (N pages with heading + body text) rendered through each writer level, so the abstraction overhead is visible directly. Lower is better; the higher-level APIs (PdfPdfDocPdfWriter) trade some performance for ergonomics.

Library1 page10 pages100 pages
Pdf (Level 3)3.185ms4.063ms12.456ms
PdfDoc (Level 2)2.570ms3.046ms7.082ms
PdfWriter (Level 1)2.254ms2.680ms6.998ms
Library1 page10 pages100 pages
Pdf (Level 3)5.910mb6.074mb7.750mb
PdfDoc (Level 2)5.574mb5.732mb7.301mb
PdfWriter (Level 1)5.332mb5.491mb7.066mb

Table rendering through Pdf::addTable() (Level 3, flow-paginated) and Writer\Page::drawTable() (Level 2, positioned). Both share the same underlying TableRenderer; the delta isolates the cost of the flow-layout engine.

Library10 rows100 rows500 rows
Pdf (Level 3)4.158ms11.588ms45.449ms
PdfDoc (Level 2)3.580ms9.647ms
Library10 rows100 rows500 rows
Pdf (Level 3)6.261mb9.056mb21.465mb
PdfDoc (Level 2)6.074mb8.889mb

Bullet-list rendering through Pdf::addList() (Level 3) and Writer\Page::drawList() (Level 2). Both share ListRenderer.

Library10 items100 items500 items
Pdf (Level 3)3.883ms11.377ms44.410ms
PdfDoc (Level 2)3.094ms7.024ms
Library10 items100 items500 items
Pdf (Level 3)5.893mb6.445mb8.889mb
PdfDoc (Level 2)5.689mb6.183mb
Library1 page10 pages100 pages
phpdftk6.097ms1.656ms6.008ms
smalot/pdfparser1.991ms2.346ms5.636ms
setasign/fpdi1.928ms2.784ms29.549ms
Library1 page10 pages100 pages
phpdftk5.307mb4.203mb4.561mb
smalot/pdfparser4.709mb4.810mb6.567mb
setasign/fpdi4.738mb4.738mb5.485mb

Parse time for PDFs using spec-compliant features. FAIL = parser threw an exception.

LibrarySpec-compliant xref (20-byte SP CR LF)Cross-reference stream (PDF 1.5)
phpdftk2.031ms1.350ms
smalot/pdfparserFAIL1.894ms
setasign/fpdi2.934msFAIL

+-------------------+--------------------------------------------------+-----+------+-----+----------+-----------+----------+
| benchmark | subject | set | revs | its | mem_peak | mode | rstdev |
+-------------------+--------------------------------------------------+-----+------+-----+----------+-----------+----------+
| WriterLevelsBench | benchLevel1PdfWriter1Page | | 3 | 5 | 5.332mb | 2.254ms | ±1.22% |
| WriterLevelsBench | benchLevel1PdfWriter10Pages | | 3 | 5 | 5.491mb | 2.680ms | ±0.21% |
| WriterLevelsBench | benchLevel1PdfWriter100Pages | | 3 | 5 | 7.066mb | 6.998ms | ±0.78% |
| WriterLevelsBench | benchLevel2PdfDoc1Page | | 3 | 5 | 5.574mb | 2.570ms | ±1.38% |
| WriterLevelsBench | benchLevel2PdfDoc10Pages | | 3 | 5 | 5.732mb | 3.046ms | ±1.65% |
| WriterLevelsBench | benchLevel2PdfDoc100Pages | | 3 | 5 | 7.301mb | 7.082ms | ±0.64% |
| WriterLevelsBench | benchLevel3Pdf1Page | | 3 | 5 | 5.910mb | 3.185ms | ±1.83% |
| WriterLevelsBench | benchLevel3Pdf10Pages | | 3 | 5 | 6.074mb | 4.063ms | ±0.37% |
| WriterLevelsBench | benchLevel3Pdf100Pages | | 3 | 5 | 7.750mb | 12.456ms | ±0.31% |
| EncodingBench | benchEncodeParagraph | | 50 | 5 | 4.203mb | 41.353μs | ±1.34% |
| EncodingBench | benchShowTextThroughContentStream | | 50 | 5 | 6.448mb | 242.417μs | ±1.32% |
| StylingBench | benchLevel3PdfUnderlined50Items | | 3 | 5 | 6.655mb | 8.573ms | ±1.06% |
| StylingBench | benchLevel3PdfBlockquote50Items | | 3 | 5 | 6.470mb | 8.189ms | ±0.16% |
| StylingBench | benchLevel3PdfCallout50Items | | 3 | 5 | 6.679mb | 8.377ms | ±0.57% |
| BoxGeneratorBench | benchSmallBlogPost | | 5 | 3 | 6.377mb | 10.060ms | ±17.33% |
| BoxGeneratorBench | benchMediumArticle | | 5 | 3 | 10.337mb | 80.129ms | ±1.01% |
| BoxGeneratorBench | benchLargeDocumentationPage | | 5 | 3 | 28.343mb | 393.790ms | ±0.63% |
| MemoryBench | benchPhpdftk1Page | | 2 | 3 | 5.316mb | 3.231ms | ±0.66% |
| MemoryBench | benchPhpdftk5Pages | | 2 | 3 | 5.362mb | 3.474ms | ±0.37% |
| MemoryBench | benchPhpdftk10Pages | | 2 | 3 | 5.422mb | 3.772ms | ±4.39% |
| MemoryBench | benchPhpdftk50Pages | | 2 | 3 | 5.914mb | 5.757ms | ±2.70% |
| MemoryBench | benchPhpdftk100Pages | | 2 | 3 | 6.513mb | 8.420ms | ±0.30% |
| MemoryBench | benchTcpdf1Page | | 2 | 3 | 12.453mb | 14.582ms | ±1.01% |
| MemoryBench | benchTcpdf5Pages | | 2 | 3 | 12.453mb | 15.514ms | ±0.97% |
| MemoryBench | benchTcpdf10Pages | | 2 | 3 | 12.453mb | 16.597ms | ±0.94% |
| MemoryBench | benchTcpdf50Pages | | 2 | 3 | 12.453mb | 26.185ms | ±1.31% |
| MemoryBench | benchTcpdf100Pages | | 2 | 3 | 12.453mb | 38.387ms | ±0.51% |
| MemoryBench | benchFpdf1Page | | 2 | 3 | 4.374mb | 1.077ms | ±1.34% |
| MemoryBench | benchFpdf5Pages | | 2 | 3 | 4.374mb | 1.159ms | ±0.18% |
| MemoryBench | benchFpdf10Pages | | 2 | 3 | 4.374mb | 1.267ms | ±1.05% |
| MemoryBench | benchFpdf50Pages | | 2 | 3 | 4.403mb | 1.974ms | ±1.70% |
| MemoryBench | benchFpdf100Pages | | 2 | 3 | 4.463mb | 2.817ms | ±1.13% |
| TablesBench | benchLevel3PdfTable10Rows | | 3 | 5 | 6.261mb | 4.158ms | ±0.30% |
| TablesBench | benchLevel3PdfTable100Rows | | 3 | 5 | 9.056mb | 11.588ms | ±2.30% |
| TablesBench | benchLevel3PdfTable500Rows | | 3 | 5 | 21.465mb | 45.449ms | ±0.70% |
| TablesBench | benchLevel2PdfDocTable10Rows | | 3 | 5 | 6.074mb | 3.580ms | ±0.57% |
| TablesBench | benchLevel2PdfDocTable100Rows | | 3 | 5 | 8.889mb | 9.647ms | ±0.52% |
| GeneratePdfBench | benchPhpdftk1Page | | 3 | 5 | 5.829mb | 2.244ms | ±0.23% |
| GeneratePdfBench | benchPhpdftk5Pages | | 3 | 5 | 5.889mb | 2.440ms | ±0.46% |
| GeneratePdfBench | benchPhpdftk10Pages | | 3 | 5 | 5.975mb | 2.684ms | ±1.15% |
| GeneratePdfBench | benchPhpdftk50Pages | | 3 | 5 | 6.610mb | 4.669ms | ±0.83% |
| GeneratePdfBench | benchPhpdftk100Pages | | 3 | 5 | 7.432mb | 6.918ms | ±1.00% |
| GeneratePdfBench | benchPhpdftk10PagesWithBookmarksAndTransitions | | 3 | 5 | 6.210mb | 3.423ms | ±0.68% |
| GeneratePdfBench | benchPhpdftk10PagesWithAnnotations | | 3 | 5 | 6.285mb | 3.738ms | ±0.34% |
| GeneratePdfBench | benchPhpdftk10PagesWithEmbeddedFont | | 3 | 5 | 8.713mb | 12.251ms | ±6.08% |
| GeneratePdfBench | benchPhpdftk10PagesWithDocumentStructure | | 3 | 5 | 6.254mb | 3.612ms | ±7.66% |
| GeneratePdfBench | benchPhpdftk10PagesWithType3Font | | 3 | 5 | 5.617mb | 2.309ms | ±0.39% |
| GeneratePdfBench | benchPhpdftkXRefAndObjectStreams | | 3 | 5 | 4.612mb | 648.350μs | ±8.37% |
| GeneratePdfBench | benchPhpdftk10PagesWithShadingsAndPatterns | | 3 | 5 | 6.047mb | 2.951ms | ±0.65% |
| GeneratePdfBench | benchPhpdftk10PagesWithMultimediaAnd3D | | 3 | 5 | 6.141mb | 3.596ms | ±1.66% |
| GeneratePdfBench | benchPhpdftk10PagesWithSignatureField | | 3 | 5 | 6.061mb | 2.981ms | ±0.71% |
| GeneratePdfBench | benchPhpdftk10PagesSigned | | 3 | 5 | 6.117mb | 217.417ms | ±28.65% |
| GeneratePdfBench | benchPhpdftk10PagesWithMarkupAnnotations | | 3 | 5 | 6.179mb | 3.493ms | ±1.00% |
| GeneratePdfBench | benchPhpdftk10PagesWithImageStamp | | 3 | 5 | 6.790mb | 5.777ms | ±57.82% |
| GeneratePdfBench | benchPhpdftk10PagesWithPdfStamp | | 3 | 5 | 6.926mb | 5.939ms | ±0.82% |
| GeneratePdfBench | benchTcpdf1Page | | 3 | 5 | 12.878mb | 10.228ms | ±116.14% |
| GeneratePdfBench | benchTcpdf5Pages | | 3 | 5 | 12.878mb | 10.840ms | ±1.70% |
| GeneratePdfBench | benchTcpdf10Pages | | 3 | 5 | 12.878mb | 11.915ms | ±0.69% |
| GeneratePdfBench | benchTcpdf50Pages | | 3 | 5 | 12.878mb | 20.329ms | ±0.28% |
| GeneratePdfBench | benchTcpdf100Pages | | 3 | 5 | 12.878mb | 30.898ms | ±1.88% |
| GeneratePdfBench | benchFpdf1Page | | 3 | 5 | 5.040mb | 822.653μs | ±1.64% |
| GeneratePdfBench | benchFpdf5Pages | | 3 | 5 | 5.040mb | 902.027μs | ±1.02% |
| GeneratePdfBench | benchFpdf10Pages | | 3 | 5 | 5.040mb | 973.547μs | ±0.68% |
| GeneratePdfBench | benchFpdf50Pages | | 3 | 5 | 5.040mb | 1.575ms | ±0.57% |
| GeneratePdfBench | benchFpdf100Pages | | 3 | 5 | 5.042mb | 2.320ms | ±0.63% |
| GeneratePdfBench | benchMpdf1Page | | 3 | 5 | 17.590mb | 25.277ms | ±2.45% |
| GeneratePdfBench | benchMpdf5Pages | | 3 | 5 | 17.649mb | 29.310ms | ±0.82% |
| GeneratePdfBench | benchMpdf10Pages | | 3 | 5 | 17.687mb | 32.803ms | ±0.27% |
| GeneratePdfBench | benchMpdf50Pages | | 3 | 5 | 17.980mb | 64.035ms | ±0.58% |
| GeneratePdfBench | benchMpdf100Pages | | 3 | 5 | 18.342mb | 104.538ms | ±0.51% |
| GeneratePdfBench | benchDompdf1Page | | 3 | 5 | 9.323mb | 11.261ms | ±4.17% |
| GeneratePdfBench | benchDompdf5Pages | | 3 | 5 | 9.543mb | 15.695ms | ±0.41% |
| GeneratePdfBench | benchDompdf10Pages | | 3 | 5 | 9.864mb | 21.485ms | ±0.59% |
| GeneratePdfBench | benchDompdf50Pages | | 3 | 5 | 12.557mb | 73.374ms | ±0.58% |
| GeneratePdfBench | benchDompdf100Pages | | 3 | 5 | 15.920mb | 159.300ms | ±0.72% |
| GeneratePdfBench | benchPhpdftk10PagesWithFormAppearances | | 3 | 5 | 6.991mb | 4.930ms | ±0.86% |
| GeneratePdfBench | benchPhpdftk10PagesWithCustomFontFormAppearances | | 3 | 5 | 8.428mb | 50.175ms | ±0.96% |
| GeneratePdfBench | benchPhpdftk10PagesWithOpenTypeCff | | 3 | 5 | 4.612mb | 1.666μs | ±8.33% |
| GeneratePdfBench | benchPhpdftk10PagesWithCffSubsetting | | 3 | 5 | 4.612mb | 1.667μs | ±0.00% |
| GeneratePdfBench | benchPhpdftk10PagesWithKernedText | | 3 | 5 | 4.612mb | 1.344μs | ±11.13% |
| GeneratePdfBench | benchPhpdftk10PagesWithPublicKeyEncryption | | 3 | 5 | 5.024mb | 187.483ms | ±24.17% |
| GeneratePdfBench | benchPhpdftkTsaRequestBuildAndParse | | 3 | 5 | 4.612mb | 448.730μs | ±2.80% |
| GeneratePdfBench | benchPhpdftk10PagesWithVersionGating | | 5 | 3 | 7.405mb | 2.941ms | ±0.27% |
| GeneratePdfBench | benchPhpdftk10PagesLinearized | | 3 | 5 | 6.003mb | 3.144ms | ±0.15% |
| GeneratePdfBench | benchPhpdftkType1FontParsing | | 10 | 5 | 4.612mb | 14.181ms | ±9.23% |
| GeneratePdfBench | benchPhpdftkCCITTFaxDecode | | 10 | 5 | 4.612mb | 85.370ms | ±0.30% |
| GeneratePdfBench | benchPhpdftkCCITTFaxEncode | | 10 | 5 | 4.612mb | 14.241ms | ±1.07% |
| GeneratePdfBench | benchPhpdftkJbig2Encode | | 10 | 5 | 4.612mb | 24.673ms | ±0.56% |
| GeneratePdfBench | benchPhpdftk10PagesWithLtvSignature | | 3 | 5 | 6.831mb | 138.477ms | ±38.41% |
| GeneratePdfBench | benchPhpdftk10PagesWithPdfAConformance | | 3 | 5 | 9.139mb | 13.293ms | ±0.70% |
| GeneratePdfBench | benchPhpdftk10PagesWithPdfUaConformance | | 3 | 5 | 9.112mb | 13.167ms | ±0.40% |
| GeneratePdfBench | benchPhpdftk10PagesWithPdfXConformance | | 3 | 5 | 9.113mb | 13.242ms | ±0.83% |
| GeneratePdfBench | benchPhpdftk10PagesWithPdfVtConformance | | 3 | 5 | 9.137mb | 13.518ms | ±0.70% |
| GeneratePdfBench | benchPhpdftk10PagesWithPdfEConformance | | 3 | 5 | 9.254mb | 13.895ms | ±0.85% |
| GeneratePdfBench | benchPhpdftk10PagesWithPdfRConformance | | 3 | 5 | 5.917mb | 2.766ms | ±0.56% |
| GeneratePdfBench | benchPhpdftk10PagesWithPdfX5Conformance | | 3 | 5 | 9.116mb | 13.274ms | ±0.39% |
| GeneratePdfBench | benchPhpdftk10PagesWithZugferdConformance | | 3 | 5 | 9.175mb | 13.410ms | ±0.64% |
| GeneratePdfBench | benchPhpdftk10PagesWithPdfMailConformance | | 3 | 5 | 9.069mb | 13.042ms | ±0.61% |
| ListsBench | benchLevel3PdfList10Items | | 3 | 5 | 5.893mb | 3.883ms | ±1.01% |
| ListsBench | benchLevel3PdfList100Items | | 3 | 5 | 6.445mb | 11.377ms | ±0.19% |
| ListsBench | benchLevel3PdfList500Items | | 3 | 5 | 8.889mb | 44.410ms | ±0.30% |
| ListsBench | benchLevel2PdfDocList10Items | | 3 | 5 | 5.689mb | 3.094ms | ±0.59% |
| ListsBench | benchLevel2PdfDocList100Items | | 3 | 5 | 6.183mb | 7.024ms | ±0.59% |
| RendererBench | benchShortDocument | | 3 | 3 | 10.179mb | 38.784ms | ±2.08% |
| RendererBench | benchMediumArticle | | 3 | 3 | 14.291mb | 154.223ms | ±0.55% |
| RendererBench | benchLongReport | | 3 | 3 | 30.164mb | 595.943ms | ±0.84% |
| RendererBench | benchRealFaceMatching | | 3 | 3 | 21.808mb | 130.873ms | ±0.62% |
| RendererBench | benchPageMarginBoxes | | 3 | 3 | 27.002mb | 139.375ms | ±0.15% |
| RendererBench | benchFloats | | 3 | 3 | 10.577mb | 75.087ms | ±0.24% |
| RendererBench | benchMultiColumn | | 3 | 3 | 11.149mb | 97.833ms | ±0.96% |
| RendererBench | benchFlex | | 3 | 3 | 11.218mb | 77.797ms | ±0.59% |
| RendererBench | benchRichTypography | | 3 | 3 | 12.437mb | 145.333ms | ±0.34% |
| ReadPdfBench | benchPhpdftk1Page | | 3 | 5 | 4.203mb | 1.225ms | ±0.44% |
| ReadPdfBench | benchPhpdftk10Pages | | 3 | 5 | 4.203mb | 1.656ms | ±1.76% |
| ReadPdfBench | benchPhpdftk100Pages | | 3 | 5 | 4.561mb | 6.008ms | ±2.61% |
| ReadPdfBench | benchPhpdftkSpecCompliantXref | | 3 | 5 | 4.204mb | 2.031ms | ±1.22% |
| ReadPdfBench | benchPhpdftkXrefStream | | 3 | 5 | 4.203mb | 1.350ms | ±0.70% |
| ReadPdfBench | benchSmalot1Page | | 3 | 5 | 4.709mb | 1.991ms | ±0.99% |
| ReadPdfBench | benchSmalot10Pages | | 3 | 5 | 4.810mb | 2.346ms | ±0.87% |
| ReadPdfBench | benchSmalot100Pages | | 3 | 5 | 6.567mb | 5.636ms | ±0.92% |
| ReadPdfBench | benchSmalotSpecCompliantXref | | 3 | 5 | 4.204mb | 534.909μs | ±1.46% |
| ReadPdfBench | benchSmalotXrefStream | | 3 | 5 | 4.705mb | 1.894ms | ±1.24% |
| ReadPdfBench | benchFpdi1Page | | 3 | 5 | 4.738mb | 1.928ms | ±0.59% |
| ReadPdfBench | benchFpdi10Pages | | 3 | 5 | 4.738mb | 2.784ms | ±1.17% |
| ReadPdfBench | benchFpdi100Pages | | 3 | 5 | 5.485mb | 29.549ms | ±0.52% |
| ReadPdfBench | benchFpdiSpecCompliantXref | | 3 | 5 | 4.833mb | 2.934ms | ±0.65% |
| ReadPdfBench | benchFpdiXrefStream | | 3 | 5 | 4.765mb | 1.479ms | ±1.02% |
| ReadPdfBench | benchPhpdftkTextExtractionWithFormXObjects | | 3 | 5 | 5.968mb | 7.144ms | ±0.38% |
| ReadPdfBench | benchPhpdftkPositionedTextExtraction | | 3 | 5 | 5.940mb | 5.358ms | ±0.40% |
| ReadPdfBench | benchPhpdftkLinearizedPdf | | 3 | 5 | 5.918mb | 3.815ms | ±1.40% |
| ReadPdfBench | benchPhpdftkWoff2Parsing | | 5 | 3 | 4.204mb | 3.212μs | ±2.89% |
| ReadPdfBench | benchPhpdftkConformanceChecker | | 3 | 5 | 5.307mb | 6.097ms | ±0.41% |
+-------------------+--------------------------------------------------+-----+------+-----+----------+-----------+----------+