Creare un modello di documento leggero con DocumentReader
Costruire un Light Document Model con DocumentReader
DocumentReader è il punto di ingresso per la lettura dei file DOCX in Aspose.Words FOSS. Accetta input come percorso file, stream I/O o byte grezzi, quindi espone il documento come un light_document_model.Document (LDM) — un albero di oggetti Python strutturato, facile da ispezionare e trasformare.
Prerequisiti
| Requisito | Dettaglio |
|---|---|
| Python | 3.9 o successive |
| Package | aspose-words-foss (MIT-licensed) |
| Input | Un file .docx, stream o bytes |
pip install aspose-words-fossCaricamento da un percorso file
DocumentReader.load_file(filepath) legge un file DOCX per percorso. Chiama to_light_document() successivamente per ottenere la rappresentazione LDM.
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))Caricamento da uno stream
DocumentReader.load_stream(stream) accetta qualsiasi oggetto simile a un file con un metodo read(). Questo è utile per dati provenienti da risposte HTTP, archivi ZIP o buffer in memoria.
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))Caricamento da byte
DocumentReader.load_bytes(data) accetta un oggetto bytes o bytearray. Usa questo quando il contenuto DOCX è già in memoria (ad es. recuperato da un database o costruito programmaticamente).
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])Navigazione della struttura LDM
Dopo aver chiamato to_light_document(), l’oggetto Document restituito espone l’intero albero del documento:
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)Lettura del testo completo del documento
Document.text restituisce il contenuto di testo semplice completo del documento, concatenando tutto il testo dei paragrafi in tutte le sezioni:
reader = DocumentReader()
reader.load_file("data/report.docx")
doc = reader.to_light_document()
print(doc.text[:500])Suggerimenti e migliori pratiche
- Chiama sempre
load_file(),load_stream()oload_bytes()prima di chiamareto_light_document()— chiamareto_light_document()su un lettore non caricato può generare un errore o restituire un documento vuoto. - Utilizza
load_bytes()quando gestisci il ciclo di vita del documento in memoria; evita di aprire handle di file. - Usa
doc.all_paragraphsper un’iterazione piatta su tutti i paragrafi; usadoc.sectionsquando devi lavorare sezione per sezione. DocumentReaderimplementaLdmBuilderMixin, il che significa cheto_light_document()è disponibile come metodo mixin — la stessa interfaccia è condivisa con altre classi reader nella libreria.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
Vuoto doc.sections dopo il caricamento | Il file non è un DOCX valido | Verifica che il file si apra in Word; controlla che non sia protetto da password |
doc.all_paragraphs è vuoto | Il documento non ha testo nel corpo (es. solo intestazioni/piè di pagina) | Controlla doc.header_paragraphs e doc.footer_paragraphs invece |
AttributeError su to_light_document() | Metodo di caricamento non chiamato prima della conversione | Chiama prima uno di load_file(), load_stream() o load_bytes() |
FAQ
Cos’è il LDM?
Il modello di documento leggero (light_document_model.Document) è un albero di oggetti astratto, nativo di Python, che rappresenta un documento Word. Separa la logica del documento dal formato binario DOCX ed è progettato per una facile manipolazione programmatica.
Posso modificare l’LDM e riscriverlo in DOCX?
Sì. Dopo aver modificato il doc oggetto, passalo a LdmDocxWriter.write(doc, path) per produrre un file DOCX aggiornato. Vedi il guida LdmDocxWriter per i dettagli.
Cosa aggiunge LdmBuilderMixin?
LdmBuilderMixin fornisce il metodo to_light_document(). DocumentReader eredita da esso, quindi accedi sempre a questo metodo tramite l’istanza del lettore.
API Reference Riepilogo
| Classe / Metodo | Descrizione |
|---|---|
DocumentReader | Legge l’input DOCX e costruisce la rappresentazione LDM |
DocumentReader.load_file(filepath) | Carica un file DOCX per percorso |
DocumentReader.load_stream(stream) | Carica da un flusso simile a un file |
DocumentReader.load_bytes(data) | Carica da un oggetto bytes |
DocumentReader.to_light_document() | Restituisce il documento caricato come LDM Document |
LdmBuilderMixin | Mixin che fornisce to_light_document() |
Document.sections | Elenco delle sezioni nel documento |
Document.all_paragraphs | Elenco piatto di tutti i paragrafi |
Document.text | Contenuto completo in plain-text del documento |
Document.page_count | Numero di pagine |
Document.headings(max_level) | Elenco dei paragrafi di intestazione fino a max_level |