Escrever arquivos DOCX com LdmDocxWriter
Escrever arquivos DOCX com LdmDocxWriter
LdmDocxWriter transforma um light_document_model.Document (LDM) objeto em um É o equivalente de escrita para DOCX. DocumentReader, que lê arquivos DOCX Juntos, formam um canal de ida e volta: DocumentReader em:, LdmDocxWriter - Não, não.
Precondições
| Requisitos | Detalhes |
|---|---|
| Python | 3.9 or later |
| Pacote de produtos | aspose-words-foss (licenciado pelo MIT) |
| Input (input) | A. - Não . light_document_model.Document exemplo |
pip install aspose-words-fossEscrever para um caminho de arquivo
LdmDocxWriter.write(doc, output_path) Separação do documento LDM para um DOCX. Se o diretório pai do caminho não existe a chamada de “Directory” é feita. Elevará a FileNotFoundError.
from aspose.words_foss import DocumentReader, LdmDocxWriter
# Load a DOCX and obtain its LDM representation
reader = DocumentReader()
reader.load_file("input/original.docx")
ldm_doc = reader.to_light_document()
# Write the LDM document back to a DOCX file
writer = LdmDocxWriter()
writer.write(ldm_doc, "output/result.docx")
print("Written to output/result.docx")Escrever em Bytes (Saída na memória)
LdmDocxWriter.write_to_bytes(doc) Retorna o conteúdo DOCX como um bytes Objeto. Use-o quando você precisa enviar o arquivo através de uma rede, armazená-lo em um banco de dados, ou evitar escrever para o sistema de ficheiros inteiramente.
from aspose.words_foss import DocumentReader, LdmDocxWriter
reader = DocumentReader()
reader.load_file("input/report.docx")
ldm_doc = reader.to_light_document()
writer = LdmDocxWriter()
docx_bytes = writer.write_to_bytes(ldm_doc)
print(f"DOCX bytes: {len(docx_bytes)}")
# Save manually if desired
with open("output/report_copy.docx", "wb") as f:
f.write(docx_bytes)Padrão de ida e volta
O caso de uso mais comum é uma viagem ida-leia-modificar-escrever:
from aspose.words_foss import DocumentReader, LdmDocxWriter
reader = DocumentReader()
reader.load_file("input/template.docx")
ldm_doc = reader.to_light_document()
# Inspect or modify the LDM here
print("Sections:", len(ldm_doc.sections))
print("Paragraphs:", len(ldm_doc.all_paragraphs))
writer = LdmDocxWriter()
writer.write(ldm_doc, "output/modified.docx")Advertências de escrita perdida
Quando ? LdmDocxWriter não pode representar fielmente uma construção LDM no formato DOCX emite uma DocxWriterLossyWarning.Podes capturar isto com o Python. warnings Módulo de auditoria do que foi descartado:
import warnings
from aspose.words_foss import DocumentReader, LdmDocxWriter, DocxWriterLossyWarning
reader = DocumentReader()
reader.load_file("input/complex.docx")
ldm_doc = reader.to_light_document()
writer = LdmDocxWriter()
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter("always", DocxWriterLossyWarning)
writer.write(ldm_doc, "output/complex_out.docx")
for warning in w:
print("Lossy:", warning.message)Dicas e melhores práticas
- Sempre ligue.
DocumentReader.to_light_document()antes de passar o documento para aLdmDocxWritero autor espera um LDMDocument, não em brutoDocumentReader. - Utilização:
write_to_bytes()nos processadores web para evitar a gestão temporária de ficheiros. - Verificação
DocxWriterLossyWarningem ensaios para detectar regressões de ida e volta quando: A actualizar a biblioteca. LdmDocxWriter.optionsestá disponível para configuração de nível do escritor; inspecione o Objeto após instanciação para ver as configurações disponíveis.
Problemas comuns
| Emissão | Causa da morte | Correção |
|---|---|---|
FileNotFoundError em 1 de Setembro de write() | Directório pai não existe | Criar o diretório de saída com: Path.mkdir(parents=True, exist_ok=True) Antes de ligares. write() |
DocxWriterLossyWarning emissão | Construção LDM não representável no DOCX | Rever a mensagem de alerta; aceitar a perda ou ajustar o LDM antes de escrever. |
| Saúde do sistema de gestão da informação DOCX | Documentos de LDM sem secções ou parágrafos | Verificar ldm_doc.sections e a) ldm_doc.all_paragraphs não estão vazios após a carga. |
FAQ
Qual é o LDM (light_document_model)?
O LDM é a representação abstrata e nativa do Python de um documento Word da Aspose.Words FOSS. Ele desacopla a lógica do documento do formato binário DOCX e facilita a inspeção e manipulação programática da estrutura do documental.
Posso escrever em PDF ao invés de DOCX?
Sim utilização LdmPdfWriter.write(doc, output_path) do mesmo pacote para PDF. produção, ou LdmMarkdownWriter.write(doc, output_path) para o Markdown.
- Sim . write_to_bytes() Requer um caminho de saída?
- Não, não.
write_to_bytes(doc)toma apenas o documento LDM e retorna umbytesobjeto sem interação com o sistema de ficheiros.
Resumo de referência da API
| Classe / Método | Descrição: |
|---|---|
LdmDocxWriter | Converte um LDM. Document para um ficheiro DOCX |
LdmDocxWriter.write(doc, output_path) | Escreve DOCX para o caminho de arquivo especificado |
LdmDocxWriter.write_to_bytes(doc) | Retorna o conteúdo DOCX como: bytes |
LdmDocxWriter.options | Opções de configuração do editor |
DocxWriterLossyWarning | Aviso levantado quando uma construção LDM é abandonada durante a escrita |
DocumentReader | Leia um arquivo DOCX e constrói a representação LDM |
DocumentReader.to_light_document() | Retorna o documento carregado como um LDM Document |