Convert Markdown files to beautifully styled PDFs using WeasyPrint.
Project description
md2pdf-py
Markdown dosyalarını şık, üretime hazır PDF’lere dönüştüren CLI aracı.
🆕 v0.2.0 Yenilikler
- 🎨 Template sistemi:
--template report|invoice|book|default- 📋 YAML frontmatter desteği (title/author/date → kapak sayfası)
- 📥 Stdin desteği:
cat file.md | md2pdf -- 📂
-odizin kabul eder, dosya adını otomatik üretir- 📝
--emit-htmlile ara HTML çıktısı- 🐳 Docker desteği (multi-arch GHCR image)
- 🛠️ Ruff + mypy + pre-commit + coverage CI
Özellikler
- 📄 WeasyPrint tabanlı - sunucu dostu, headless browser gerektirmez
- 🎨 Hazır stil: A4, sayfa numarası, Türkçe karakter desteği (DejaVu Sans)
- 📊 Tablo, kod bloğu (syntax highlight), TOC, blockquote desteği
- 🔧 Özelleştirilebilir CSS
- ✅ Python 3.10+
Sistem Bağımlılıkları
WeasyPrint native kütüphaneler (pango, cairo, gdk-pixbuf) gerektirir. Python paketini kurmadan önce bunları yükleyin:
Ubuntu / Debian
sudo apt-get update
sudo apt-get install -y \
libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf-2.0-0 \
libffi-dev shared-mime-info
macOS (Homebrew)
brew install pango
Detaylı kurulum notları: https://doc.courtbouillon.org/weasyprint/stable/first_steps.html
Sistem kütüphaneleri eksikse md2pdf çalıştırıldığında yükleme talimatlarıyla
birlikte anlamlı bir hata mesajı verir (exit kodu: 2).
Kurulum
pip install -e .
Ya da doğrudan bir etiketten:
pip install git+https://github.com/hakanbaysal/md2pdf-py.git@v0.1.0
Kullanım
# Basit kullanım
md2pdf README.md
# Çıktı dosyası belirterek
md2pdf document.md -o output.pdf
# Çıktı dizini (dosya adı otomatik)
md2pdf document.md -o build/pdfs/
# Stdin'den okuma
cat document.md | md2pdf -
md2pdf - < document.md
# Template ile
md2pdf document.md --template report
md2pdf document.md --template invoice
md2pdf document.md --template book
# HTML çıktısı da al
md2pdf document.md --emit-html debug.html
# Çıktı dizini yoksa oluştur
md2pdf document.md -o build/pdfs/document.pdf --create-dirs
# Özel CSS ile
md2pdf document.md --css mystyle.css
# Başlık ve TOC ile
md2pdf document.md --title "Proje Dökümanı" --toc
# Letter boyutunda, sayfa numarasız
md2pdf document.md --page-size Letter --no-page-numbers
# Detaylı log
md2pdf document.md -v
CLI Seçenekleri
| Seçenek | Açıklama |
|---|---|
input |
Markdown dosya yolu (.md veya .markdown, stdin için -) |
-o, --output |
PDF çıktı yolu veya dizin (varsayılan: input.pdf) |
--template |
Hazır şablon: default, report, invoice, book |
--css |
Özel CSS dosyası (template'ı override eder) |
--emit-html |
Ara HTML çıktısını belirtilen yola kaydet |
--title |
Döküman başlığı |
--toc |
İçindekiler tablosu ekle |
--no-cover |
Frontmatter kapak sayfasını devre dışı bırak |
--page-size |
Sayfa boyutu: A4 veya Letter |
--no-page-numbers |
Sayfa numaralarını gizle |
--create-dirs |
Çıktı için eksik ana dizinleri otomatik oluştur |
-v, --verbose |
Detaylı loglama |
--version |
Versiyon bilgisi |
Exit Kodları
| Kod | Anlam |
|---|---|
0 |
Başarılı |
1 |
Kullanıcı/girdi hatası (ör. eksik dosya, boş markdown, çıktı dizini) |
2 |
Ortam/yapılandırma hatası (WeasyPrint sistem kütüphaneleri eksik) |
Geliştirme
pip install -e ".[dev]"
pre-commit install
pytest -v
ruff check .
mypy md2pdf_py/
Sistem kütüphaneleri eksikse pango-gated entegrasyon testleri SKIPPED olarak
geçilir; bu testler CI'da (GitHub Actions) çalıştırılır.
Docker
# Pull
docker pull ghcr.io/hakanbaysal/md2pdf-py:latest
# Kullanım
docker run --rm -v $PWD:/data ghcr.io/hakanbaysal/md2pdf-py input.md -o output.pdf
# Template ile
docker run --rm -v $PWD:/data ghcr.io/hakanbaysal/md2pdf-py input.md --template report
YAML Frontmatter
Markdown dosyanızın başına YAML frontmatter ekleyerek otomatik kapak sayfası oluşturabilirsiniz:
---
title: Proje Raporu
author: Hakan Baysal
date: 2026-04-17
---
# İçerik başlığı...
Kapak sayfasını kapatmak için: --no-cover
Değişiklik Günlüğü
Tüm değişiklikler için CHANGELOG.md dosyasına bakın.
Lisans
MIT - Hakan Baysal
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file md2pdf_py-0.2.0.tar.gz.
File metadata
- Download URL: md2pdf_py-0.2.0.tar.gz
- Upload date:
- Size: 21.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
27dd0887db893b67a6721293426d03c4b247f5672ad7c48828454b0802502e2c
|
|
| MD5 |
973f18a2ec784cf96166634a731259d2
|
|
| BLAKE2b-256 |
9ff1a966eb541b72954849c1ca37a6834a453270be90e52c6c97adc29c3f4495
|
File details
Details for the file md2pdf_py-0.2.0-py3-none-any.whl.
File metadata
- Download URL: md2pdf_py-0.2.0-py3-none-any.whl
- Upload date:
- Size: 15.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
420831d8d7106a3433bf8a68aae48590fd4b6be7a3d3d766a5a96b29c8db147c
|
|
| MD5 |
492488831e805a65baed3668b408a0f0
|
|
| BLAKE2b-256 |
fae120bcde8cfc696eedec03ed21e130e850129b6e31345c181c720dc2e42079
|