Meerdere PDF's in één keer naar Markdown converteren
Door pdftomd.tools-team · Bijgewerkt op · 7 min leestijd
Om meerdere PDF's tegelijk naar Markdown te converteren, selecteer je ze allemaal op een batchpagina, zoals onze converter voor meerdere PDF's, en download je één ZIP. Voor honderden bestanden of een terugkerende klus werkt een korte Python-lus beter, en voor lastige lay-outs het mapcommando van marker. Welke route je ook kiest: controleer daarna of er geen uitvoer leeg is gebleven.

Kies de methode op aantal
De juiste route hangt minder af van de PDF's zelf dan van hoeveel het er zijn en hoe vaak de klus terugkomt. Grofweg:
- Een handvol tot een paar dozijn, eenmalig: een batchpagina in de browser. Niets te installeren, en de bestanden blijven op je apparaat.
- Honderden, of elke week: een Python-lus over een map. Je kunt hem inplannen, loggen en de mapstructuur behouden.
- Scans, formulieren, formules, ongewone lay-outs: een modelgebaseerde tool zoals marker. Op een gewone laptop is die flink trager. Hij is gebouwd om pagina's zonder tekstlaag met OCR te lezen, maar in onze CPU-run bleef onze gescande pagina toch leeg; test dus eerst een paar bestanden.

Om de drie routes eerlijk te vergelijken, gebruikten we een testset van 20 bestanden met samen 40 pagina's: twaalf tabel- en lay-outvoorbeelden, een Engelse handleiding, een Chinees rapport van 11 pagina's, een rapport van 4 pagina's met herhaalde kopteksten, een gescande pagina zonder tekstlaag en twee verschillende bestanden die allebei notes.pdf heten, in twee mappen. Alles draaide op onze buildmachine (Linux x86_64, 8 vCPU, 16 GB RAM, no GPU).
Meerdere PDF's naar Markdown converteren in de browser
Open vooraf twee of drie van de PDF's en probeer een zin te selecteren. Lukt dat, dan heeft het bestand een tekstlaag en werkt elke methode hieronder. Lukt het niet, dan is het een scan of afbeelding en haalt alleen een OCR-tool er woorden uit. Wie vooraf weet wat voor mix hij heeft, bespaart zich een tweede ronde.
Open de batchpagina, klik op Bestanden kiezen (of sleep een selectie naar het neerzetvlak) en kies alle PDF's in één keer. Elk bestand wordt in het tabblad geconverteerd, het een na het ander, en de pagina biedt één ZIP aan met een .md per PDF. Omdat het werk lokaal gebeurt, hangt de snelheid af van je apparaat, niet van een upload. Zo converteer je meerdere PDF's het snelst naar Markdown als ze allemaal op één computer staan.

In onze tests duurde de hele set, van bestanden kiezen tot kant-en-klare ZIP, ongeveer 0,8 seconde in Chrome 155.0.8059.84 (drie runs, tussen 0,8 en 1,0 seconde). De ZIP bevatte 20 Markdown-bestanden. De twee notes.pdf kwamen eruit als notes.md en notes-2.md, geen van beide overschreef de ander, en de gescande pagina werd in de lijst gemarkeerd in plaats van stilletjes te mislukken.
De grenzen: een browser kan uit zichzelf geen mappenstructuur lezen, dus bestanden uit meerdere mappen komen naast elkaar in één ZIP terecht, en heel grote aantallen worden begrensd door het geheugen van het tabblad. Voor een paar honderd bestanden splits je de selectie in rondes of stap je over op een script.
Een Python-lus met pymupdf4llm
Een Python-script voor deze klus is maar een paar regels lang. Dit script converteert een map vol PDF's naar Markdown: het loopt door de map, houdt in de uitvoer dezelfde structuur aan (zodat de twee notes-bestanden gescheiden blijven) en gaat door als een bestand mislukt:
import pathlib, pymupdf4llm
src, out = pathlib.Path("pdfs"), pathlib.Path("markdown")
for pdf in sorted(src.rglob("*.pdf")):
dest = out / pdf.relative_to(src).with_suffix(".md")
dest.parent.mkdir(parents=True, exist_ok=True)
try:
dest.write_text(pymupdf4llm.to_markdown(str(pdf)), encoding="utf-8")
except Exception as e:
print(f"skipped {pdf}: {e}")Met dezelfde 20 bestanden was de lus in onze tests na 5,3 seconden klaar, inclusief het starten van Python en het importeren van de bibliotheek. Hij schreef 20 bestanden. Twee waren leeg: de gescande pagina, die geen leesbare tekst heeft, en een pagina met een tabel die 90 graden gedraaid is. Voor duizenden bestanden kan dezelfde lus in een procespool draaien, één worker per CPU-kern, want elk bestand staat op zichzelf. Onze Python-gids behandelt de opties voor tabellen en paginabereiken, en onze vergelijking van bibliotheken laat zien hoe pymupdf4llm het doet tegenover twee alternatieven.
Het mapcommando van marker
marker heeft een commando voor een hele map: marker /path/to/pdfs --output_dir out. Het leest alleen het bovenste niveau van de map (het script somt die op met os.listdir), dus kopieerden we onze bestanden eerst naar één platte map. Handige opties zijn --workers voor parallelle processen, --skip_existing om een onderbroken run te hervatten en --max_files voor een proefrun.
Met standaardinstellingen op onze machine zonder GPU duurde de map in onze tests 5 min 51 s, inclusief het laden van de modellen, en leverde hij 20 uitvoerbestanden op. Dat is ongeveer 66 keer zo lang als de Python-lus. De gedraaide tabel werd gered, maar wel dubbel geschreven, en voor de gescande pagina gaf hij in onze run toch een leeg bestand. Op een machine met een ondersteunde GPU ziet het er anders uit; gebruik marker op een laptop alleen voor de bestanden die het nodig hebben.
Bestandsnamen, dubbele namen en mapstructuur

- Dubbele namen: als je veel PDF's tegelijk converteert, bepaal dan wat er gebeurt met dezelfde bestandsnaam in twee mappen. Onze batchpagina voegt een nummer toe; de lus hierboven behoudt de submappen; een naïef script overschrijft het eerste bestand zonder waarschuwing.
- Structuur: heeft de mappenstructuur betekenis (een map per klant of per jaar), behoud hem dan, met
relative_tozoals hierboven of door de batchpagina per map te gebruiken. - Namen: houd de basisnaam van de PDF aan voor de
.md, dan vind je de bron altijd terug. Wil je leesbaardere namen, hernoem dan later in je notitie-app. - Een ZIP met Markdown-bestanden is de makkelijkste overdracht aan iemand anders; een map is beter als de uitvoer naar een volgend script gaat.
Kwaliteitscontrole: gescande en lege uitvoer vinden
Wie meerdere PDF's in één run naar Markdown converteert, mist makkelijk problemen die een los bestand meteen zou laten zien. Elke tool in onze test leverde minstens één leeg of bijna leeg bestand op, en geen enkele kan een onleesbare pagina zonder OCR in tekst omzetten. Zoek dus na elke grote run naar bestanden die te kort zijn uitgevallen:
# Markdown files under 100 bytes are usually scans or image-only pages
find markdown -name '*.md' -size -100c
Open daarna een paar willekeurige uitvoerbestanden en vergelijk ze met de PDF's: de koppen, een tabel, de laatste alinea. Gaan de bestanden naar een chatmodel, dan legt ons artikel over het beste documentformaat voor ChatGPT uit waarom deze controle loont voor nette Markdown.
Onze tijden met 20 bestanden
| Methode | Tijd | Uitvoer | Lege uitvoer | Dubbele namen |
|---|---|---|---|---|
| Onze batchpagina (browser) | 0,8 s | 20 | scanned-sample.md | Genummerd (notes, notes-2) |
| Python-lus, pymupdf4llm 1.28.2 | 5,3 s | 20 | rotated.md, scanned-sample.md | Behouden in submappen |
| Mapcommando van marker 2.0.0 | 5 min 51 s | 20 | scanned-sample.md | Alleen platte map (door ons hernoemd) |
Voor de meeste mensen is de conclusie eenvoudig: om meerdere PDF's in één keer naar Markdown te converteren, begin je in de browser, schrijf je een script als de klus terugkomt en bewaar je de modelgebaseerde tool voor de pagina's die de andere niet kunnen lezen.
Bronnen
- PyMuPDF4LLM (README and licence) — Artifex, GitHub
- marker (README, licence and model licence) — Datalab, GitHub
- pathlib: Path.rglob — Python documentation
- find(1) — GNU findutils manual
Veelgestelde vragen
Hoe converteer ik meerdere PDF's tegelijk naar Markdown?
Selecteer alle bestanden op een batchpagina zoals de onze en download de ZIP, of laat een korte Python-lus over de map lopen. Controleer daarna of er geen lege uitvoer tussen zit.
Is er een limiet aan het aantal bestanden op de batchpagina?
Er is geen vast aantal; de grens is het geheugen van je browser. In onze tests duurden 20 bestanden met 40 pagina's ongeveer een seconde. Werk voor honderden grote bestanden in rondes of gebruik een script.
Wat gebeurt er met bestanden met dezelfde naam?
Onze batchpagina nummert de tweede (notes.md, notes-2.md). In een script kies je zelf: submappen behouden, een achtervoegsel toevoegen of overslaan.
Kan ik gescande PDF's in batch converteren?
Niet met een tool die de tekstlaag leest: scans blijven leeg en onze tool markeert ze. Je hebt een OCR-stap nodig. marker is daarvoor bedoeld, maar gaf in onze run zonder GPU een leeg resultaat voor onze gescande pagina; test dus eerst een steekproef voor een grote klus.
Kan ik PDF naar MD volgens een schema in batch converteren?
Ja, met een script. Zet de Python-lus in een cronjob of geplande taak en voeg logica zoals --skip_existing toe, zodat alleen nieuwe bestanden worden geconverteerd.
Uploadt de batchpagina mijn bestanden?
Nee. De conversie gebeurt in het browsertabblad en de ZIP wordt op je apparaat gemaakt.

