Pypdf Migration Check — find imports and show replacement lines

Finds every PyMuPDF / fitz import, call and requirement line (AGPL-3.0 or paid Artifex licence) and prints the exact pypdf, pypdfium2 or pdfplumber line that replaces it. Runs entirely in your browser — nothing is uploaded.

Same engine as the VS Code extension, byte for byte.

Get the full version $29

Whole-workspace migration plan (each use mapped to its replacement), a dated AGPL exposure report for the company and a CI gate that fails builds adding new PyMuPDF use.

One payment, one licence key for this tool. The key is shown right after payment.

Aspose.PDF for Python via .NET, Developer Small Business: US$1199 (1 developer, 1 location)

Buy the full version — $29
Want the full version?
Enter your email and we send the download link.
ENDEJAESPT

Find a tool

· ReadyStack

Worked example

Real numbers from this tool, line by line.

pypdf Migration Check - PyMuPDF AGPL Licence Gate

Migrate from PyMuPDF to pypdf: 6 findings in one invoice worker

6 findings in a 13-line invoice export worker: that is what the checker printed for a Python backend team running PyMuPDF behind a customer portal.

What Artifex states

Artifex licenses PyMuPDF under the GNU AGPLv3 or a commercial licence. Its licensing page (artifex.com/licensing) says you cannot deploy the open-source edition as part of a server-based application or service without disclosing your own application's full source code under AGPL to any users interacting with it, and that if you cannot meet the AGPL requirements a commercial licence is required. There is no public price on that page. The exposure starts the day the service is deployed to users.

pymupdf4llm, the LLM and RAG helper, is published on PyPI under the same dual licence. So is the binary wheel PyMuPDFb.

What the sample file looked like

The worker opened a PDF, joined the text of every page, rendered page one to a PNG thumbnail, searched the last page for "Total due" and pulled its tables. Six lines touch PyMuPDF:

import fitz -> from pypdf import PdfReader, PdfWriter fitz.open(path) -> reader = PdfReader(path) page.get_text() -> page.extract_text() page.get_pixmap(dpi=110) -> pypdfium2.PdfDocument(path)[i].render(scale=dpi/72).to_pil() page.search_for("Total due") -> pdfplumber.open(path).pages[i].search("text") page.find_tables() -> pdfplumber.open(path).pages[i].extract_tables()

After the rewrite the same file returns 0 findings. pypdf (BSD-3-Clause) handles reading, text, merging and metadata. pdfplumber (MIT) handles word positions, search and tables. pypdfium2 (BSD-3-Clause / Apache-2.0) renders pages to images. The versions in the fixes were read on PyPI on 2026-09-30: pypdf 6.19.0, pdfplumber 0.11.10, pypdfium2 5.13.0.

Why a package scanner is not enough

pip-licenses and similar tools tell you that pymupdf is AGPL. They stop there. They do not find the six call sites, and they cannot tell you that get_pixmap needs a different library from get_text. Chatbots often answer with PyPDF2, which the project itself retired in favour of pypdf. And the PyPI package literally named fitz is an unrelated 0.0.0 project, so a requirements line reading fitz is a bug on top of a licence question.

The 25 rules

Five dependency rules cover requirements*.txt, pyproject.toml (PEP 621 and Poetry) and conda environment.yml: pymupdf, PyMuPDFb, pymupdf4llm, pymupdfpro and fitz. Six import rules cover import fitz, import pymupdf, from fitz import, pymupdf4llm, the LangChain PyMuPDFLoader and the LlamaIndex PyMuPDFReader. Fourteen call rules cover open, Matrix and Rect, get_text, get_pixmap, search_for, find_tables, insert_pdf, page_count, get_toc, set_metadata, set_rotation, get_images, insert_text and authenticate. Call rules only fire in a file that imports fitz or pymupdf, so a Tkinter get_text call stays quiet.

How to run it

Open the file in VS Code with the extension installed, or paste it into the web version. The Problems panel lists each line with its replacement.

What comes next

A single file is where most people start. The next job is the whole repository: every service, every requirements file, and proof for the company that nobody adds import fitz back next quarter. That is the workspace plan, the dated exposure report and the CI gate.

This is not legal advice. Read the Artifex terms with your counsel before deciding between a commercial licence and a migration.

15 seconds — what it actually does

Questions people ask

What does pypdf Migration Check actually do?

It reads Python files, requirements*.txt, pyproject.toml and environment.yml, finds every PyMuPDF use (import fitz, fitz.open, get_text, get_pixmap, search_for, find_tables and 19 more patterns, 25 rules in total) and prints the exact pypdf, pdfplumber or pypdfium2 line that replaces each one. On the bundled 13-line invoice worker it reports 6 findings, one per PyMuPDF line.

Who is this PyMuPDF to pypdf checker for?

Python backend developers and tech leads at companies that run PyMuPDF inside a closed-source product or a SaaS, API or RAG pipeline, for example a FastAPI invoice service or a LangChain ingest job using PyMuPDFLoader. Artifex's licensing page says server-based use under AGPL requires disclosing your full source, so these teams either buy a commercial licence or migrate.

Why not just use pip-licenses or ask a chatbot?

pip-licenses and similar scanners tell you that the pymupdf package is AGPL, then stop. They do not find the 6 call sites in your code or say what replaces get_pixmap or find_tables. Chatbots often suggest PyPDF2, which is deprecated in favour of pypdf. This checker maps each line to a replacement read from PyPI on 2026-09-30.

What is free and what needs a licence key?

Free, with no key and no limit: the full map for the open file, every finding with its replacement line, in VS Code and in the web version. A licence key adds the whole-workspace migration plan with each use mapped to its replacement, a dated AGPL exposure report for the company, and a CI gate that fails a build adding new PyMuPDF use.

What does staying on a commercial PDF licence cost instead?

Artifex does not publish a PyMuPDF commercial price; you contact sales. A comparable commercial library, Aspose.PDF for Python via .NET, lists its Developer Small Business licence at US$1199 for 1 developer and 1 deployment location. pypdf (BSD-3-Clause), pdfplumber (MIT) and pypdfium2 (BSD-3-Clause / Apache-2.0) cost nothing to ship in closed code.

Ask about this tool

One question, answered by the person who built it. Your email only if you want the answer sent.