Erstellen eines leichten Dokumentmodells mit DocumentReader
Erstellen eines leichten Dokumentmodells mit DocumentReader
DocumentReader ist der Einstiegspunkt zum Lesen von DOCX-Dateien in Aspose.Words FOSS. Es akzeptiert Eingaben als Dateipfad, I/O-Stream oder Rohbytes und stellt das Dokument dann als light_document_model.Document (LDM) – einen strukturierten Python-Objektbaum – bereit, der leicht zu inspizieren und zu transformieren ist.
Voraussetzungen
| Anforderung | Detail |
|---|---|
| Python | 3.9 oder neuer |
| Package | aspose-words-foss (MIT-lizenziert) |
| Input | Eine .docx-Datei, ein Stream oder bytes |
pip install aspose-words-fossLaden aus einem Dateipfad
DocumentReader.load_file(filepath) liest eine DOCX-Datei über den Pfad. Rufen Sie anschließend to_light_document() auf, um die LDM-Darstellung zu erhalten.
from aspose.words_foss import DocumentReader
reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()
print("Page count:", doc.page_count)
print("Sections:", len(doc.sections))Laden aus einem Stream
DocumentReader.load_stream(stream) akzeptiert jedes dateiähnliche Objekt mit einer read()-Methode. Das ist nützlich für Daten, die aus HTTP-Antworten, ZIP-Archiven oder In-Memory-Puffern stammen.
from aspose.words_foss import DocumentReader
reader = DocumentReader()
with open("data/report.docx", "rb") as fh:
reader.load_stream(fh)
doc = reader.to_light_document()
print("Paragraphs:", len(doc.all_paragraphs))Laden aus Bytes
DocumentReader.load_bytes(data) akzeptiert ein bytes- oder bytearray-Objekt. Verwenden Sie dies, wenn der DOCX-Inhalt bereits im Speicher ist (z.B. aus einer Datenbank abgerufen oder programmgesteuert erstellt).
from aspose.words_foss import DocumentReader
with open("data/report.docx", "rb") as fh:
data = fh.read()
reader = DocumentReader()
reader.load_bytes(data)
doc = reader.to_light_document()
print("Text preview:", doc.text[:200])Navigieren in der LDM-Struktur
Nach dem Aufruf von to_light_document() stellt das zurückgegebene Document-Objekt den vollständigen Dokumentbaum bereit:
from aspose.words_foss import DocumentReader
reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()
# Sections
for section in doc.sections:
print("Section paragraphs:", len(section.paragraphs))
# All paragraphs (flat list across all sections)
for para in doc.all_paragraphs:
if para.text.strip():
print(" -", para.text[:80])
# Headings
for heading in doc.headings(max_level=2):
print("H:", heading.text)Lesen des vollständigen Dokumenttexts
Document.text gibt den vollständigen reinen Textinhalt des Dokuments zurück und verkettet dabei den gesamten Absatztext aus allen Abschnitten:
reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()
print(doc.text[:500])Tipps und bewährte Vorgehensweisen
- Rufen Sie immer
load_file(),load_stream()oderload_bytes()auf, bevor Sieto_light_document()aufrufen — das Aufrufen vonto_light_document()auf einem nicht geladenen Reader kann einen Fehler auslösen oder ein leeres Dokument zurückgeben. - Verwenden Sie
load_bytes(), wenn Sie den Dokumentlebenszyklus im Speicher steuern; es vermeidet das Öffnen von Dateihandles. - Verwenden Sie
doc.all_paragraphsfür eine flache Iteration über alle Absätze; verwenden Siedoc.sections, wenn Sie Abschnitt für Abschnitt arbeiten müssen. DocumentReaderimplementiertLdmBuilderMixin, was bedeutet, dassto_light_document()als Mixin-Methode verfügbar ist — dieselbe Schnittstelle wird mit anderen Reader-Klassen in der Bibliothek geteilt.
Häufige Probleme
| Problem | Ursache | Lösung |
|---|---|---|
Leeres doc.sections nach dem Laden | Datei ist kein gültiges DOCX | Überprüfen Sie, ob die Datei in Word geöffnet wird; prüfen Sie, ob sie nicht passwortgeschützt ist. |
doc.all_paragraphs ist leer | Dokument hat keinen Fließtext (z.B. nur Kopf-/Fußzeilen) | Überprüfen Sie stattdessen doc.header_paragraphs und doc.footer_paragraphs. |
AttributeError auf to_light_document() | Lademethode wurde nicht vor der Konvertierung aufgerufen | Rufen Sie zuerst eines von load_file(), load_stream() oder load_bytes() auf |
FAQ
Was ist das LDM?
Das Light Document Model (light_document_model.Document) ist ein abstrahierter, Python-nativer Objektbaum, der ein Word-Dokument repräsentiert. Es trennt die Dokumentlogik vom DOCX-Binärformat und ist für eine einfache programmgesteuerte Manipulation konzipiert.
Kann ich das LDM ändern und zurück in DOCX schreiben?
Ja. Nach dem Ändern des doc Objekt, übergeben Sie es an LdmDocxWriter.write(doc, path) um eine aktualisierte DOCX-Datei zu erzeugen. Siehe die LdmDocxWriter-Handbuch für Details.
Was fügt LdmBuilderMixin hinzu?
LdmBuilderMixin stellt die to_light_document()-Methode bereit. DocumentReader erbt davon, sodass Sie diese Methode stets über die Reader-Instanz aufrufen.
API Reference Zusammenfassung
| Klasse / Methode | Beschreibung |
|---|---|
DocumentReader | Liest DOCX-Eingaben und erstellt die LDM-Darstellung |
DocumentReader.load_file(filepath) | Lädt eine DOCX-Datei über den Pfad |
DocumentReader.load_stream(stream) | Lädt aus einem dateiähnlichen Stream |
DocumentReader.load_bytes(data) | Lädt aus einem bytes-Objekt |
DocumentReader.to_light_document() | Gibt das geladene Dokument als LDM Document zurück |
LdmBuilderMixin | Mixin, das to_light_document() bereitstellt |
Document.sections | Liste der Abschnitte im Dokument |
Document.all_paragraphs | Flache Liste aller Absätze |
Document.text | Vollständiger Nur-Text-Inhalt des Dokuments |
Document.page_count | Anzahl der Seiten |
Document.headings(max_level) | Liste der Überschriftsabsätze bis max_level |