Best Python libraries for reading and filling PDF files (buyer asking for advice)
Requested by a visitor · October 26, 2026
We asked 10 models: I'm a Python developer and need a library to read, edit and fill PDF files in my project. Which would you recommend?
Each named its own top 10.
Asked 4 ways: List request · Buyer asking for advice · Search query · Worth paying for?. Share of voice pools every wording.
- Agreement between models
- 55%
- Same model, run twice
- 78%
- Different picks
- 26
When agreement between models is well below a model's agreement with itself, the split reflects real differences in taste rather than randomness.
The consensus
We asked 10 models: I'm a Python developer and need a library to read, edit and fill PDF files in my project. Which would you recommend?
Each named its own top 10.
Each cell is the position that model gave the pick; blank means it left the pick off. Click a row for each model's reasoning.
| # | Pick | Score | Listed by | Claude Haiku 5.5 | GPT-6 Luna | Gemini 4 Argon | Qwen 3.8 Flash | DeepSeek V4.1 Flash | GLM-5.3 | Kimi K3 | MiniMax M3 | Mistral Large 4 | Nemotron 3.5 Super VL |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | PyMuPDF | 10/10 | 2 | 2 | 1 | 3 | 2 | 1 | 2 | 1 | 1 | 10 | |
| |||||||||||||
| 2 | pypdf | 9/10 | 1 | 1 | 2 | 1 | 1 | 2 | 1 | 5 | 2 | ||
| |||||||||||||
| 3 | ReportLab | 10/10 | 7 | 9 | 10 | 6 | 4 | 3 | 4 | 2 | 3 | 2 | |
| |||||||||||||
| 4 | pdfplumber | 9/10 | 3 | 7 | 9 | 3 | 4 | 5 | 3 | 4 | 6 | ||
| |||||||||||||
| 5 | pdfrw | 10/10 | 4 | 7 | 9 | 2 | 6 | 10 | 3 | 10 | 5 | 4 | |
| |||||||||||||
| 6 | pikepdf | 9/10 | 5 | 10 | 3 | 4 | 5 | 5 | 6 | 6 | 6 | ||
| |||||||||||||
| 7 | borb | 7/10 | 4 | 6 | 10 | 7 | 6 | 10 | 7 | ||||
| |||||||||||||
| 8 | PyPDF2 | 5/10 | 6 | 8 | 9 | 7 | 1 | ||||||
| |||||||||||||
| 9 | fpdf2 | 4/10 | 8 | 8 | 7 | 3 | |||||||
| |||||||||||||
| 10 | pdfminer.six | 4/10 | 9 | 9 | 4 | 5 | |||||||
| |||||||||||||
| 11 | Aspose.PDF | 4/10 | 6 | 5 | 9 | 9 | |||||||
| |||||||||||||
| 12 | fillpdf | 2/10 | 5 | 8 | |||||||||
| |||||||||||||
| 13 | PDFium | 1/10 | 3 | ||||||||||
| |||||||||||||
| 14 | WeasyPrint | 3/10 | 10 | 8 | 7 | ||||||||
| |||||||||||||
| 15 | pypdfium2 | 1/10 | 4 | ||||||||||
| |||||||||||||
11 lower-scoring picks are not shown; every ballot below lists them in full.
Most divisive
Picks most models listed, at very different positions
- PyMuPDF#1 for Gemini 4 Argon #10 for Nemotron 3.5 Super VL
- ReportLab#2 for MiniMax M3 #10 for Gemini 4 Argon
- pdfrw#2 for Qwen 3.8 Flash #10 for MiniMax M3
Hot takes
Picks that appear on only one ballot
- PDFium at #3, only GPT-6 Luna
- pypdfium2 at #4, only Gemini 4 Argon
- PDFlib at #5, only GPT-6 Luna
- Spire.PDF for Python at #7, only Qwen 3.8 Flash
- PDFtk at #7, only Kimi K3
- PyPDFForm at #8, only Gemini 4 Argon
- Camunda... no, 'FPDF' at #8, only Qwen 3.8 Flash
- pdf2image at #8, only Kimi K3
- PDFKit at #8, only Nemotron 3.5 Super VL
- pdfrw-ng at #9, only Mistral Large 4
- xhtml2pdf at #9, only Nemotron 3.5 Super VL
- pdfrw2 at #10, only Mistral Large 4
Every ballot
Hover a pick to find it on the other ballots. Marked picks appear on no other ballot.
Claude Haiku 5.5
- pypdf
- PyMuPDF
- pdfplumber
- pdfrw
- pikepdf
- PyPDF2
- ReportLab
- fpdf2
- pdfminer.six
- Apache PDFBox
GPT-6 Luna
- pypdf
- PyMuPDF
- PDFium
- borb
- PDFlib
- Aspose.PDF
- pdfrw
- Apache PDFBox
- ReportLab
- pikepdf
Gemini 4 Argon
- PyMuPDF
- pypdf
- pikepdf
- pypdfium2
- fillpdf
- borb
- pdfplumber
- PyPDFForm
- pdfrw
- ReportLab
Qwen 3.8 Flash
- pypdf
- pdfrw
- PyMuPDF
- pikepdf
- Aspose.PDF
- ReportLab
- Spire.PDF for Python
- Camunda... no, 'FPDF'
- pdfplumber
- borb
DeepSeek V4.1 Flash
- pypdf
- PyMuPDF
- pdfplumber
- ReportLab
- pikepdf
- pdfrw
- borb
- fpdf2
- Aspose.PDF
- WeasyPrint
GLM-5.3
- PyMuPDF
- pypdf
- ReportLab
- pdfplumber
- pikepdf
- borb
- fpdf2
- PyPDF2
- pdfminer.six
- pdfrw
Kimi K3
- pypdf
- PyMuPDF
- pdfrw
- ReportLab
- pdfplumber
- pikepdf
- PDFtk
- pdf2image
- Aspose.PDF
- borb
MiniMax M3
- PyMuPDF
- ReportLab
- pdfplumber
- pdfminer.six
- pypdf
- pikepdf
- borb
- WeasyPrint
- PyPDF2
- pdfrw
Mistral Large 4
- PyMuPDF
- pypdf
- ReportLab
- pdfplumber
- pdfrw
- pikepdf
- PyPDF2
- fillpdf
- pdfrw-ng
- pdfrw2
Nemotron 3.5 Super VL
- PyPDF2
- ReportLab
- fpdf2
- pdfrw
- pdfminer.six
- pdfplumber
- WeasyPrint
- PDFKit
- xhtml2pdf
- PyMuPDF
Who agrees with whom
Overlap between two models' lists, weighted toward the top · 100 means identical · Color runs from 5 (lightest) to 88 (darkest)
| Claude Haiku 5.5 | GPT-6 Luna | Gemini 4 Argon | Qwen 3.8 Flash | DeepSeek V4.1 Flash | GLM-5.3 | Kimi K3 | MiniMax M3 | Mistral Large 4 | Nemotron 3.5 Super VL | |
|---|---|---|---|---|---|---|---|---|---|---|
| Claude Haiku 5.5 | 63 | 54 | 71 | 88 | 68 | 82 | 53 | 70 | 27 | |
| GPT-6 Luna | 63 | 49 | 61 | 67 | 49 | 64 | 34 | 47 | 5 | |
| Gemini 4 Argon | 54 | 49 | 48 | 57 | 73 | 52 | 56 | 69 | 6 | |
| Qwen 3.8 Flash | 71 | 61 | 48 | 70 | 49 | 77 | 33 | 53 | 17 | |
| DeepSeek V4.1 Flash | 88 | 67 | 57 | 70 | 74 | 85 | 61 | 71 | 23 | |
| GLM-5.3 | 68 | 49 | 73 | 49 | 74 | 64 | 78 | 88 | 27 | |
| Kimi K3 | 82 | 64 | 52 | 77 | 85 | 64 | 51 | 70 | 25 | |
| MiniMax M3 | 53 | 34 | 56 | 33 | 61 | 78 | 51 | 74 | 37 | |
| Mistral Large 4 | 70 | 47 | 69 | 53 | 71 | 88 | 70 | 74 | 30 | |
| Nemotron 3.5 Super VL | 27 | 5 | 6 | 17 | 23 | 27 | 25 | 37 | 30 |