使用 DOCX Reader
使用 DOCX Reader
DocumentReader 类读取 Office Open XML(.docx)文件,并生成抽象的数据结构——Light Document Model(LDM)。它处理段落、表格、形状、图像和格式,使内容可用于操作或转换。
读取 DOCX 文件
最简方法是使用 Document 构造函数,它会自动为 .docx 文件选择 DocumentReader:
import aspose.words_foss as aw
doc = aw.Document("input.docx")
print(f"Sections: {len(doc.sections)}")
for para in doc.all_paragraphs:
print(para.text)DocumentReader 架构
DocumentReader 使用两个 mixin 来划分职责:
| Component | Role |
|---|---|
DocumentReader | 主要 DOCX 解析器 — 从 OPC 包中读取 XML 部分 |
LdmBuilderMixin | 从解析后的数据构建 Light Document Model |
ShapeParserMixin | 解析嵌入文档中的绘图和形状元素 |
这三者在内部协同工作——你通过 Document API 与结果交互。
提取文本
在已加载的文档上使用 text 属性来提取纯文本,而无需保存到文件:
import aspose.words_foss as aw
doc = aw.Document("contract.docx")
text = doc.text
print(text[:500])处理段落和格式化
通过 LDM 访问段落级属性:
import aspose.words_foss as aw
doc = aw.Document("styled.docx")
for para in doc.all_paragraphs:
for run in para.runs:
if run.font.bold:
print(f"Bold: {run.text}")每个 Run 都携带从 DOCX XML 中解析出的字体属性(粗体、斜体、大小、颜色)。
处理形状和图像
在解析过程中,ShapeParserMixin 提取绘图元素。形状在 LDM 中以段落内容内的 ShapeNode 对象形式出现:
import aspose.words_foss as aw
doc = aw.Document("with-images.docx")
for para in doc.all_paragraphs:
for node in para.content_sequence:
if hasattr(node, 'shape_type'):
print(f"Shape: {node.shape_type}")技巧与最佳实践
- 对于标准工作流,请使用
Document("file.docx")—— 它会自动处理读取器选择、包验证和 LDM 构建。 - 对于基于流的输入(网页上传),请将类文件对象传递给
Document构造函数。 - 对于包含表格的文件,可通过
doc.tables或doc.all_tables访问它们。 - 对于批量处理,请重复使用相同的 Python 过程,以避免重复的导入开销。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
| 文件未加载(异常) | 损坏或不完整的 ZIP 存档 | 验证文件是有效的 .docx(基于 ZIP 的 OPC 包) |
| 输出中缺少图像 | 图像部件未嵌入到包中 | 检查 DOCX 是否包含嵌入的(而非链接的)图像 |
| 输出中缺少内容 | 所需的 XML 部件缺失于包中 | 文件可能已被截断;请从源应用程序重新导出 |
FAQ
什么是 Light Document Model (LDM)?
LDM 是在所有读取器之间共享的内部表示。它将特定格式的细节(OPC XML、OLE2 binary)抽象为包含 sections、paragraphs、runs、tables 和 shapes 的通用结构。
可以DocumentReader处理 DOCM(宏启用)文件吗?
宏启用的.docm文件使用相同的 OPC 结构。阅读器可以解析文档内容,但宏不会被保留或执行。
阅读器如何处理大型文档?
阅读器顺序处理XML部分。内存使用量随文档大小而增长。对于非常大的文档,建议单独处理各章节。
API Reference 摘要
| 类 / 方法 | 描述 |
|---|---|
DocumentReader | 读取 DOCX 文档并生成抽象的数据结构 |
LdmBuilderMixin | Mixin 提供轻量文档模型构建方法 |
ShapeParserMixin | 提供绘图/形状解析方法的 Mixin |
Document | 表示一个 Word 文档(LDM 根) |
create_reader(path) | 根据文件扩展名返回正确读取器的工厂 |