DOCX zu HTML Konvertierung

Criado em: 25 de dezembro de 2024

Respondido usando OpenAI 01 por OpenAI01

Pergunta

Wie kann ich mit Python ein docx zu HTML ohne Verluste der Formatierungen und Bilder umwandeln? Ich möchte weder Word noch libreoffice installieren und auch keine sinnlosen Formatierungen im HTML erhalten. Das HTML soll die Basis für eine Umwandlung in ein PDF im A4 Format sein. Wenn mein Vorhaben mit markdown besser funktioniert, dann beschreibe diesen Weg. Genutzt soll das Ergebnis werden, um Texte zu suchen und mit Werten zu Ersetzen, die in einer Tabelle gespeichert sind.

Pensamento

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

Resposta

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.

Schritte zur Umsetzung mit Mammoth

1. Installation der benötigten Bibliotheken

Zuerst müssen Sie die notwendigen Python-Bibliotheken installieren:

pip install mammoth Pillow
  • mammoth: Zum Konvertieren von DOCX zu HTML oder Markdown.
  • Pillow: Zum Verarbeiten von Bildern, die in der DOCX enthalten sind.

2. Konvertierung von DOCX zu HTML

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:

  • image_handler: Diese Funktion verarbeitet eingebettete Bilder in der DOCX-Datei. Sie speichert die Bilder in einem angegebenen Verzeichnis und gibt den relativen Pfad zurück, der im HTML verwendet wird.
  • mammoth.convert_to_html: Führt die eigentliche Konvertierung durch. Durch den convert_image-Parameter wird sichergestellt, dass Bilder korrekt behandelt werden.

3. Optionale Konvertierung zu Markdown

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.

4. Weiterverarbeitung: Suchen und Ersetzen

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:

  • BeautifulSoup: Wird verwendet, um das HTML zu parsen und zu bearbeiten. Sie können es auch nutzen, um spezifischere Ersetzungen durchzuführen, falls nötig.
  • replacements: Ein Dictionary mit Platzhaltern als Schlüssel und den gewünschten Werten als Werte.

5. Umwandlung von HTML zu PDF

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.

Zusammenfassung

  1. DOCX zu HTML/Markdown konvertieren: Verwenden Sie Mammoth, um sauberes HTML oder Markdown zu erzeugen.
  2. Bilder handhaben: Speichern Sie eingebettete Bilder separat und referenzieren Sie sie im HTML/Markdown.
  3. Suchen und Ersetzen: Nutzen Sie Python-Tools wie BeautifulSoup für HTML oder einfache Textoperationen für Markdown.
  4. HTML zu PDF: Verwenden Sie WeasyPrint oder ähnliche Bibliotheken, um das finale PDF im gewünschten Format zu erstellen.

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.

Compartilhar esta Q&A