Een licht documentmodel bouwen met DocumentReader
Een Light Document Model bouwen met DocumentReader
DocumentReader is het toegangspunt voor het lezen van DOCX-bestanden in Aspose.Words FOSS. Het accepteert invoer als een bestandspad, een I/O-stream of ruwe bytes, en stelt vervolgens het document beschikbaar als een light_document_model.Document (LDM) — een gestructureerde Python objectboom die gemakkelijk te inspecteren en te transformeren is.
Vereisten
| Vereiste | Detail |
|---|---|
| Python | 3.9 of later |
| Package | aspose-words-foss (MIT-licentie) |
| Input | Een .docx bestand, stream, of bytes |
pip install aspose-words-fossLaden vanaf een bestandspad
DocumentReader.load_file(filepath) leest een DOCX-bestand via een pad. Roep daarna to_light_document() aan om de LDM-representatie te verkrijgen.
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 vanaf een stream
DocumentReader.load_stream(stream) accepteert elk bestand-achtig object met een read()-methode. Dit is handig voor gegevens afkomstig van HTTP-reacties, ZIP-archieven, of geheugenbuffers.
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 vanuit Bytes
DocumentReader.load_bytes(data) accepteert een bytes of bytearray object. Gebruik dit wanneer de DOCX-inhoud al in het geheugen staat (bijv. opgehaald uit een database of programmatisch opgebouwd).
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])Navigeren door de LDM-structuur
Na het aanroepen van to_light_document() onthult het geretourneerde Document-object de volledige documentboom:
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)Lezen van volledige documenttekst
Document.text retourneert de volledige platte-tekstinhoud van het document, waarbij alle alinea-tekst uit alle secties wordt aaneengeschakeld:
reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()
print(doc.text[:500])Tips en best practices
- Roep altijd
load_file(),load_stream()ofload_bytes()aan voordat jeto_light_document()aanroept — het aanroepen vanto_light_document()op een niet geladen lezer kan een fout veroorzaken of een leeg document retourneren. - Gebruik
load_bytes()wanneer je de levenscyclus van het document in het geheugen beheert; het voorkomt het openen van bestands-handles. - Gebruik
doc.all_paragraphsvoor een platte iteratie over alle alinea’s; gebruikdoc.sectionswanneer je sectie-voor-sectie moet werken. DocumentReaderimplementeertLdmBuilderMixin, wat betekent datto_light_document()beschikbaar is als een mixin-methode — dezelfde interface wordt gedeeld met andere lezerklassen in de bibliotheek.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
Leeg doc.sections na laden | Bestand is geen geldig DOCX | Controleer of het bestand opent in Word; controleer of het niet met een wachtwoord beveiligd is |
doc.all_paragraphs is leeg | Document bevat geen hoofdtekst (bijv. alleen kopteksten/voetteksten) | Controleer in plaats daarvan doc.header_paragraphs en doc.footer_paragraphs |
AttributeError op to_light_document() | Load-methode niet aangeroepen vóór conversie | Roep eerst een van load_file(), load_stream() of load_bytes() aan |
FAQ
Wat is de LDM?
Het light document model (light_document_model.Document) is een geabstraheerde, Python-native objectboom die een Word-document vertegenwoordigt. Het scheidt de documentlogica van het binaire DOCX-formaat en is ontworpen voor eenvoudige programmatische manipulatie.
Kan ik de LDM wijzigen en terugschrijven naar DOCX?
Ja. Na het aanpassen van de doc object, geef het door aan LdmDocxWriter.write(doc, path) om een bijgewerkt DOCX-bestand te maken. Zie de LdmDocxWriter-gids voor details.
Wat voegt LdmBuilderMixin toe?
LdmBuilderMixin levert de to_light_document() methode. DocumentReader erft ervan, zodat je altijd deze methode via de reader-instantie benadert.
API Reference Samenvatting
| Klasse / Methode | Beschrijving |
|---|---|
DocumentReader | Leest DOCX-invoer en bouwt de LDM-representatie |
DocumentReader.load_file(filepath) | Laadt een DOCX-bestand via een pad |
DocumentReader.load_stream(stream) | Laadt van een bestand-achtige stream |
DocumentReader.load_bytes(data) | Laadt van een bytes-object |
DocumentReader.to_light_document() | Retourneert het geladen document als een LDM Document |
LdmBuilderMixin | Mixin die to_light_document() biedt |
Document.sections | Lijst van secties in het document |
Document.all_paragraphs | Platte lijst van alle alinea’s |
Document.text | Volledige platte-tekstinhoud van het document |
Document.page_count | Aantal pagina’s |
Document.headings(max_level) | Lijst van kopparagrafen tot max_level |