DOCX zu HTML Konvertierung
Créé le : 25 décembre 2024
Créé le : 25 décembre 2024
Umwandeln von DOCX in HTML
Der Nutzer möchte ein DOCX-Dokument in HTML umwandeln, dabei die Formatierung und Bilder erhalten und auf die Installation von Office-Tools verzichten. Alternativ ist auch Markdown eine Option.
Optionen zum Konvertieren
Für die Umwandlung von DOCX zu HTML empfehle ich Mammoth, da es farbigen HTML-Code vermeidet. Pydocx und docx2html sind ebenfalls Optionen, wobei letzteres eher für komplexere Projekte geeignet ist.
Gedanken für ein paar Sekunden
Um eine DOCX-Datei in HTML (oder Markdown) mit Python ohne Verlust von Formatierungen und Bildern zu konvertieren, ohne auf externe Anwendungen wie Word oder LibreOffice zurückgreifen zu müssen, empfehle ich die Nutzung der Mammoth-Bibliothek. Mammoth erzeugt sauberes, semantisches HTML, das sich gut für weitere Verarbeitungsschritte wie die Umwandlung in PDF oder das Durchführen von Suchen und Ersetzungen eignet.
Zuerst müssen Sie die notwendigen Python-Bibliotheken installieren:
pip install mammoth Pillow
Hier ist ein Beispielskript, das eine DOCX-Datei in sauberes HTML konvertiert und dabei Bilder behandelt:
import mammoth import os import base64 def convert_docx_to_html(docx_path, output_html_path, images_output_dir): # Stelle sicher, dass das Bilderverzeichnis existiert os.makedirs(images_output_dir, exist_ok=True) # Funktion zum Speichern der Bilder und Rückgabe des Pfads def image_handler(image): image_bytes = image.read() image_extension = image.content_type.split('/')[-1] image_name = f'image_{image.index}.{image_extension}' image_path = os.path.join(images_output_dir, image_name) with open(image_path, 'wb') as img_file: img_file.write(image_bytes) # Rückgabe des HTML-Image-Tags return {'src': os.path.relpath(image_path, os.path.dirname(output_html_path))} with open(docx_path, "rb") as docx_file: result = mammoth.convert_to_html(docx_file, convert_image=mammoth.images.inline(image_handler)) html = result.value # Das konvertierte HTML messages = result.messages # Warnungen und Hinweise # Optional: Nachrichten ausgeben for message in messages: print(message) # HTML speichern with open(output_html_path, "w", encoding="utf-8") as html_file: html_file.write(html) # Beispielnutzung docx_path = "beispiel.docx" output_html_path = "beispiel.html" images_output_dir = "bilder" convert_docx_to_html(docx_path, output_html_path, images_output_dir)
Erläuterungen:
convert_image
-Parameter wird sichergestellt, dass Bilder korrekt behandelt werden.Falls Sie Markdown bevorzugen, können Sie Mammoth verwenden, um direkt in Markdown zu konvertieren:
def convert_docx_to_markdown(docx_path, output_md_path, images_output_dir): os.makedirs(images_output_dir, exist_ok=True) def image_handler(image): image_bytes = image.read() image_extension = image.content_type.split('/')[-1] image_name = f'image_{image.index}.{image_extension}' image_path = os.path.join(images_output_dir, image_name) with open(image_path, 'wb') as img_file: img_file.write(image_bytes) # Rückgabe des Markdown-Image-Tags return f'![{image.alt_text}]({os.path.relpath(image_path, os.path.dirname(output_md_path))})' with open(docx_path, "rb") as docx_file: result = mammoth.convert_to_markdown(docx_file, convert_image=mammoth.images.inline(image_handler)) markdown = result.value messages = result.messages for message in messages: print(message) with open(output_md_path, "w", encoding="utf-8") as md_file: md_file.write(markdown) # Beispielnutzung output_md_path = "beispiel.md" convert_docx_to_markdown(docx_path, output_md_path, images_output_dir)
Hinweis: Die Konvertierung zu Markdown kann hilfreich sein, wenn Sie eine noch einfachere und sauberere Textstruktur benötigen. Allerdings unterstützt Markdown weniger komplexe Formatierungen im Vergleich zu HTML.
Nachdem Sie die DOCX-Datei in HTML oder Markdown konvertiert haben, können Sie den resultierenden Text für Suchen und Ersetzen verwenden. Hier ein einfaches Beispiel mit HTML:
from bs4 import BeautifulSoup def replace_values_in_html(html_path, replacements): with open(html_path, "r", encoding="utf-8") as file: soup = BeautifulSoup(file, "html.parser") html_str = str(soup) for key, value in replacements.items(): html_str = html_str.replace(key, value) with open(html_path, "w", encoding="utf-8") as file: file.write(html_str) # Beispielnutzung replacements = { "{{Name}}": "Max Mustermann", "{{Datum}}": "2024-12-25" } replace_values_in_html(output_html_path, replacements)
Erläuterungen:
Nachdem Sie das HTML vorbereitet haben, können Sie es mit Bibliotheken wie WeasyPrint oder pdfkit in PDF umwandeln. Hier ein Beispiel mit WeasyPrint:
pip install weasyprint
from weasyprint import HTML def convert_html_to_pdf(html_path, pdf_path): HTML(html_path).write_pdf(pdf_path, stylesheets=['styles.css']) # Optional: CSS einbinden # Beispielnutzung pdf_path = "beispiel.pdf" convert_html_to_pdf(output_html_path, pdf_path)
Hinweis: Sie können eine separate CSS-Datei (styles.css
) erstellen, um das Layout für das PDF zu optimieren, insbesondere für das A4-Format.
Mit diesem Ansatz vermeiden Sie die Installation von Microsoft Word oder LibreOffice und erhalten gleichzeitig sauberes, gut strukturiertes HTML oder Markdown, das für weitere Verarbeitungsschritte geeignet ist.