Skip to content

fix: handle malformed objects more gracefully#84

Merged
Mythie merged 1 commit into
mainfrom
fix/malformed-object-recovery
Jul 2, 2026
Merged

fix: handle malformed objects more gracefully#84
Mythie merged 1 commit into
mainfrom
fix/malformed-object-recovery

Conversation

@Mythie

@Mythie Mythie commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

No description provided.

@vercel

vercel Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
core Ready Ready Preview, Comment Jul 2, 2026 4:24am

@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Comparison

Load PDF

Benchmark Mean p99 RME Samples
libpdf 2.18ms 3.17ms ±1.6% 230
pdf-lib 38.86ms 43.21ms ±3.4% 13
@cantoo/pdf-lib 40.28ms 45.25ms ±2.7% 13

Create blank PDF

Benchmark Mean p99 RME Samples
libpdf 65μs 152μs ±1.5% 7751
pdf-lib 368μs 1.38ms ±2.3% 1360
@cantoo/pdf-lib 402μs 1.73ms ±2.8% 1245

Add 10 pages

Benchmark Mean p99 RME Samples
libpdf 125μs 237μs ±1.0% 3999
pdf-lib 467μs 1.96ms ±3.2% 1070
@cantoo/pdf-lib 432μs 2.28ms ±3.7% 1158

Draw 50 rectangles

Benchmark Mean p99 RME Samples
libpdf 369μs 946μs ±1.5% 1355
pdf-lib 1.45ms 5.16ms ±6.5% 347
@cantoo/pdf-lib 1.80ms 4.90ms ±5.4% 278

Load and save PDF

Benchmark Mean p99 RME Samples
libpdf 2.26ms 3.22ms ±1.5% 222
pdf-lib 76.88ms 83.93ms ±3.4% 10
@cantoo/pdf-lib 143.53ms 149.10ms ±1.6% 10

Load, modify, and save PDF

Benchmark Mean p99 RME Samples
libpdf 53.41ms 62.43ms ±8.3% 10
pdf-lib 74.86ms 81.16ms ±3.7% 10
@cantoo/pdf-lib 144.45ms 155.50ms ±2.0% 10

Extract single page from 100-page PDF

Benchmark Mean p99 RME Samples
libpdf 3.66ms 4.86ms ±1.1% 137
pdf-lib 9.03ms 16.07ms ±3.1% 56
@cantoo/pdf-lib 9.63ms 11.82ms ±2.2% 52

Split 100-page PDF into single-page PDFs

Benchmark Mean p99 RME Samples
libpdf 40.44ms 43.08ms ±2.2% 13
pdf-lib 75.99ms 79.77ms ±4.3% 7
@cantoo/pdf-lib 88.46ms 98.68ms ±8.8% 6

Split 2000-page PDF into single-page PDFs (0.9MB)

Benchmark Mean p99 RME Samples
libpdf 754.21ms 754.21ms ±0.0% 1
pdf-lib 1.37s 1.37s ±0.0% 1
@cantoo/pdf-lib 1.52s 1.52s ±0.0% 1

Copy 10 pages between documents

Benchmark Mean p99 RME Samples
libpdf 4.63ms 5.42ms ±1.0% 109
pdf-lib 11.75ms 13.45ms ±1.6% 43
@cantoo/pdf-lib 13.22ms 14.53ms ±1.5% 38

Merge 2 x 100-page PDFs

Benchmark Mean p99 RME Samples
libpdf 15.65ms 16.58ms ±1.2% 32
pdf-lib 54.44ms 63.00ms ±4.1% 10
@cantoo/pdf-lib 64.52ms 67.94ms ±3.6% 8

Fill FINTRAC form fields

Benchmark Mean p99 RME Samples
libpdf 21.16ms 26.25ms ±3.4% 24
pdf-lib 29.13ms 34.62ms ±3.5% 18
@cantoo/pdf-lib 30.40ms 38.65ms ±5.0% 17

Fill and flatten FINTRAC form

Benchmark Mean p99 RME Samples
libpdf 18.07ms 22.01ms ±3.0% 28
pdf-lib FAILED - - 0
@cantoo/pdf-lib 33.36ms 40.49ms ±4.0% 16
Copying

Copy pages between documents

Benchmark Mean p99 RME Samples
copy 1 page 1.15ms 2.20ms ±2.5% 436
copy 10 pages from 100-page PDF 4.81ms 8.85ms ±2.9% 105
copy all 100 pages 7.98ms 12.13ms ±2.0% 63

Duplicate pages within same document

Benchmark Mean p99 RME Samples
duplicate page 0 1.04ms 1.53ms ±0.8% 482
duplicate all pages (double the document) 1.03ms 1.43ms ±0.7% 484

Merge PDFs

Benchmark Mean p99 RME Samples
merge 2 small PDFs 1.62ms 2.18ms ±1.2% 309
merge 10 small PDFs 8.26ms 14.40ms ±2.7% 61
merge 2 x 100-page PDFs 15.10ms 19.84ms ±2.1% 34
Drawing

benchmarks/drawing.bench.ts

Benchmark Mean p99 RME Samples
draw 100 rectangles 648μs 1.69ms ±2.9% 772
draw 100 circles 949μs 1.91ms ±1.6% 527
draw 100 lines 573μs 1.20ms ±1.2% 873
draw 100 text lines (standard font) 1.68ms 3.10ms ±2.1% 298
create 10 pages with mixed content 1.51ms 2.69ms ±2.2% 332
Forms

benchmarks/forms.bench.ts

Benchmark Mean p99 RME Samples
get form fields 3.26ms 5.62ms ±3.1% 154
fill text fields 13.40ms 24.47ms ±6.4% 38
read field values 2.91ms 4.35ms ±1.6% 172
flatten form 8.14ms 10.19ms ±1.4% 62
Loading

benchmarks/loading.bench.ts

Benchmark Mean p99 RME Samples
load small PDF (888B) 61μs 162μs ±0.9% 8230
load medium PDF (19KB) 92μs 167μs ±0.7% 5433
load form PDF (116KB) 1.29ms 2.55ms ±1.5% 389
load heavy PDF (9.9MB) 2.07ms 2.60ms ±0.8% 242
Saving

benchmarks/saving.bench.ts

Benchmark Mean p99 RME Samples
save unmodified (19KB) 109μs 298μs ±1.1% 4605
save with modifications (19KB) 862μs 1.64ms ±1.9% 581
incremental save (19KB) 169μs 378μs ±1.2% 2957
save heavy PDF (9.9MB) 2.11ms 2.80ms ±1.1% 238
incremental save heavy PDF (9.9MB) 5.04ms 11.15ms ±6.1% 100
Splitting

Extract single page

Benchmark Mean p99 RME Samples
extractPages (1 page from small PDF) 1.15ms 2.35ms ±2.7% 436
extractPages (1 page from 100-page PDF) 3.65ms 4.37ms ±1.3% 137
extractPages (1 page from 2000-page PDF) 56.65ms 63.86ms ±3.3% 10

Split into single-page PDFs

Benchmark Mean p99 RME Samples
split 100-page PDF (0.1MB) 41.15ms 43.30ms ±1.7% 13
split 2000-page PDF (0.9MB) 733.30ms 733.30ms ±0.0% 1

Batch page extraction

Benchmark Mean p99 RME Samples
extract first 10 pages from 2000-page PDF 56.88ms 57.99ms ±0.8% 9
extract first 100 pages from 2000-page PDF 60.90ms 62.57ms ±1.4% 9
extract every 10th page from 2000-page PDF (200 pages) 67.36ms 69.17ms ±1.8% 8
Environment
  • Runner: Linux (X64)
  • Runtime: Bun 1.3.14

Results are machine-dependent.

@Mythie Mythie merged commit 3543d97 into main Jul 2, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant