Markdown Dosyalarını Python ile Word Formatına Dönüştürme
Markdown, yazılım geliştiriciler ve teknik yazarlar arasında popüler bir formattır. Ancak bazen bu içeriği Word formatına dönüştürmemiz gerekebilir. Bu yazıda, Windows üzerinde Chocolatey paket yöneticisi ve Python kullanarak Markdown dosyalarını Word’e nasıl dönüştüreceğimizi göreceğiz.
Gereksinimler
Bu işlem için ihtiyacımız olanlar:
- Chocolatey: Windows için paket yöneticisi
- Python: Programlama dili
- Pandoc: Evrensel belge dönüştürücü
- python-docx: Python Word kütüphanesi (opsiyonel)
Adım 1: Chocolatey Kurulumu
Chocolatey, Windows için güçlü bir paket yöneticisidir. Kurulum için PowerShell’i yönetici modunda açın ve şu komutu çalıştırın:
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Kurulumu doğrulamak için:
choco --version
Adım 2: Python Kurulumu
Chocolatey ile Python’ı kolayca kurabiliriz:
choco install python -y
Kurulumu kontrol edin:
python --version
pip --version
Adım 3: Pandoc Kurulumu
Pandoc, Markdown’dan Word’e dönüşüm için en güçlü araçtır:
choco install pandoc -y
Kurulumu doğrulayın:
pandoc --version
Yöntem 1: Pandoc ile Doğrudan Dönüştürme (En Basit)
En hızlı yöntem Pandoc’u doğrudan kullanmaktır:
pandoc dosya.md -o cikti.docx
Gelişmiş Pandoc Kullanımı
Daha profesyonel çıktılar için özel ayarlar:
# Referans stil dosyası ile
pandoc dosya.md -o cikti.docx --reference-doc=template.docx
# İçindekiler tablosu eklemek
pandoc dosya.md -o cikti.docx --toc --toc-depth=3
# Başlık ve yazar bilgisi ile
pandoc dosya.md -o cikti.docx --metadata title="Başlık" --metadata author="Yazar Adı"
Yöntem 2: Python ile Otomatik Dönüştürme
Python ile daha esnek ve otomatize edilebilir bir çözüm:
Gerekli Kütüphaneleri Kurun
pip install pypandoc python-docx markdown
Basit Python Scripti
markdown_to_word.py dosyası oluşturun:
import pypandoc
import os
def markdown_to_word(md_file, output_file=None):
"""
Markdown dosyasını Word formatına dönüştürür
Args:
md_file: Markdown dosya yolu
output_file: Çıktı dosya yolu (opsiyonel)
"""
if output_file is None:
output_file = os.path.splitext(md_file)[0] + '.docx'
try:
pypandoc.convert_file(md_file, 'docx', outputfile=output_file)
print(f"✓ Dönüştürme başarılı: {output_file}")
return True
except Exception as e:
print(f"✗ Hata: {e}")
return False
if __name__ == "__main__":
# Kullanım örneği
markdown_to_word("ornekdosya.md")
Scripti çalıştırın:
python markdown_to_word.py
Gelişmiş Python Scripti (Toplu Dönüştürme)
Bir klasördeki tüm Markdown dosyalarını dönüştürmek için:
import pypandoc
import os
from pathlib import Path
def batch_convert_markdown_to_word(input_dir, output_dir=None):
"""
Bir klasördeki tüm Markdown dosyalarını Word'e dönüştürür
Args:
input_dir: Markdown dosyalarının bulunduğu klasör
output_dir: Çıktı klasörü (opsiyonel)
"""
if output_dir is None:
output_dir = input_dir
# Çıktı klasörünü oluştur
os.makedirs(output_dir, exist_ok=True)
# Tüm .md dosyalarını bul
md_files = list(Path(input_dir).glob("*.md"))
if not md_files:
print("Markdown dosyası bulunamadı!")
return
print(f"{len(md_files)} Markdown dosyası bulundu. Dönüştürme başlıyor...\n")
successful = 0
failed = 0
for md_file in md_files:
output_file = os.path.join(output_dir, md_file.stem + '.docx')
try:
pypandoc.convert_file(
str(md_file),
'docx',
outputfile=output_file,
extra_args=['--toc'] # İçindekiler tablosu ekle
)
print(f"✓ {md_file.name} -> {os.path.basename(output_file)}")
successful += 1
except Exception as e:
print(f"✗ {md_file.name} - Hata: {e}")
failed += 1
print(f"\n{'='*50}")
print(f"Toplam: {len(md_files)} dosya")
print(f"Başarılı: {successful}")
print(f"Başarısız: {failed}")
if __name__ == "__main__":
# Kullanım
batch_convert_markdown_to_word("./markdown_files", "./word_files")
Yöntem 3: Python-docx ile Manuel Dönüştürme
Daha fazla kontrol istiyorsanız, python-docx ile manuel dönüştürme:
from docx import Document
from docx.shared import Pt, Inches
import markdown
from bs4 import BeautifulSoup
import re
def markdown_to_word_custom(md_file, output_file):
"""
Markdown dosyasını python-docx ile özelleştirilmiş Word'e dönüştürür
"""
# Markdown'ı oku
with open(md_file, 'r', encoding='utf-8') as f:
md_content = f.read()
# Markdown'ı HTML'e çevir
html = markdown.markdown(md_content, extensions=['extra', 'codehilite'])
# Word belgesi oluştur
doc = Document()
# HTML'i parse et
soup = BeautifulSoup(html, 'html.parser')
for element in soup.find_all(['h1', 'h2', 'h3', 'p', 'code', 'pre', 'ul', 'ol']):
if element.name == 'h1':
doc.add_heading(element.get_text(), level=1)
elif element.name == 'h2':
doc.add_heading(element.get_text(), level=2)
elif element.name == 'h3':
doc.add_heading(element.get_text(), level=3)
elif element.name == 'p':
doc.add_paragraph(element.get_text())
elif element.name in ['code', 'pre']:
p = doc.add_paragraph(element.get_text())
p.style = 'List Bullet'
elif element.name in ['ul', 'ol']:
for li in element.find_all('li'):
doc.add_paragraph(li.get_text(), style='List Bullet')
# Kaydet
doc.save(output_file)
print(f"✓ Belge kaydedildi: {output_file}")
if __name__ == "__main__":
markdown_to_word_custom("ornekdosya.md", "cikti_custom.docx")
Komple Çözüm: CLI Aracı
Komut satırından kullanılabilir bir araç oluşturalım:
#!/usr/bin/env python
"""
Markdown to Word Converter CLI Tool
"""
import pypandoc
import argparse
import os
from pathlib import Path
def convert_file(input_file, output_file=None, toc=False, template=None):
"""Tek dosya dönüştür"""
if output_file is None:
output_file = os.path.splitext(input_file)[0] + '.docx'
extra_args = []
if toc:
extra_args.extend(['--toc', '--toc-depth=3'])
if template:
extra_args.extend(['--reference-doc', template])
pypandoc.convert_file(input_file, 'docx', outputfile=output_file, extra_args=extra_args)
return output_file
def main():
parser = argparse.ArgumentParser(
description='Markdown dosyalarını Word formatına dönüştür'
)
parser.add_argument('input', help='Markdown dosyası veya klasörü')
parser.add_argument('-o', '--output', help='Çıktı dosyası veya klasörü')
parser.add_argument('--toc', action='store_true', help='İçindekiler tablosu ekle')
parser.add_argument('--template', help='Word şablon dosyası')
parser.add_argument('-r', '--recursive', action='store_true', help='Alt klasörleri de tara')
args = parser.parse_args()
input_path = Path(args.input)
if input_path.is_file():
# Tek dosya dönüştür
output = args.output or input_path.with_suffix('.docx')
convert_file(str(input_path), str(output), args.toc, args.template)
print(f"✓ Dönüştürüldü: {output}")
elif input_path.is_dir():
# Klasör dönüştür
pattern = "**/*.md" if args.recursive else "*.md"
md_files = list(input_path.glob(pattern))
output_dir = Path(args.output) if args.output else input_path
output_dir.mkdir(exist_ok=True)
for md_file in md_files:
output_file = output_dir / md_file.with_suffix('.docx').name
try:
convert_file(str(md_file), str(output_file), args.toc, args.template)
print(f"✓ {md_file.name} -> {output_file.name}")
except Exception as e:
print(f"✗ {md_file.name} - Hata: {e}")
if __name__ == "__main__":
main()
Kullanım örnekleri:
# Tek dosya
python md2word.py dosya.md
# İçindekiler tablosu ile
python md2word.py dosya.md --toc
# Şablon kullanarak
python md2word.py dosya.md --template sablon.docx
# Klasördeki tüm dosyaları dönüştür
python md2word.py ./markdown_klasoru -o ./word_klasoru
# Alt klasörleri de tara
python md2word.py ./markdown_klasoru -r --toc
Bonus: Stil Şablonu Oluşturma
Pandoc için özel bir Word şablonu oluşturmak:
- Basit bir Markdown dosyası oluşturun (
sablon.md):
# Başlık 1
## Başlık 2
### Başlık 3
Normal paragraf metni.
**Kalın metin** ve *italik metin*.
- Liste öğesi 1
- Liste öğesi 2
1. Numaralı liste
2. İkinci öğe
`kod örneği`
- Word referans dosyası oluşturun:
pandoc sablon.md -o referans.docx
-
referans.docxdosyasını açın ve stilleri düzenleyin (fontlar, renkler, boşluklar) -
Artık bu şablonu kullanabilirsiniz:
pandoc dosya.md -o cikti.docx --reference-doc=referans.docx
Karşılaşılabilecek Sorunlar ve Çözümler
Pandoc Bulunamadı Hatası
# PATH'e manuel ekleyin
$env:Path += ";C:\Program Files\Pandoc\"
Türkçe Karakter Sorunları
Python dosyalarınızda encoding belirtin:
with open('dosya.md', 'r', encoding='utf-8') as f:
content = f.read()
PyPandoc Kurulum Hatası
# Önce Pandoc'un kurulu olduğundan emin olun
pip install --upgrade pypandoc
Sonuç
Bu yazıda Chocolatey ve Python kullanarak Markdown dosyalarını Word formatına dönüştürmenin üç farklı yöntemini gördük:
- Pandoc ile doğrudan: En hızlı ve basit yöntem
- PyPandoc ile Python: Otomatik ve esnek
- Python-docx ile manuel: En fazla kontrol
Hangi yöntemi seçeceğiniz ihtiyaçlarınıza bağlı:
- Hızlı tek seferlik dönüşüm → Pandoc komut satırı
- Otomatik toplu işlem → PyPandoc script
- Özel formatlar ve kontrol → python-docx
Faydalı Kaynaklar:
Bu kılavuz, teknik dokümantasyonu Markdown formatında yazıp gerektiğinde Word’e dönüştürmek isteyen yazılımcılar ve teknik yazarlar için hazırlanmıştır.