Skip to main content

Convert Markdown files to beautifully styled PDFs using WeasyPrint.

Project description

md2pdf-py

CI Coverage

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 -
  • 📂 -o dizin kabul eder, dosya adını otomatik üretir
  • 📝 --emit-html ile 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

md2pdf_py-0.2.0.tar.gz (21.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

md2pdf_py-0.2.0-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

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

Hashes for md2pdf_py-0.2.0.tar.gz
Algorithm Hash digest
SHA256 27dd0887db893b67a6721293426d03c4b247f5672ad7c48828454b0802502e2c
MD5 973f18a2ec784cf96166634a731259d2
BLAKE2b-256 9ff1a966eb541b72954849c1ca37a6834a453270be90e52c6c97adc29c3f4495

See more details on using hashes here.

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

Hashes for md2pdf_py-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 420831d8d7106a3433bf8a68aae48590fd4b6be7a3d3d766a5a96b29c8db147c
MD5 492488831e805a65baed3668b408a0f0
BLAKE2b-256 fae120bcde8cfc696eedec03ed21e130e850129b6e31345c181c720dc2e42079

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page