使用 DOC 阅读器
使用 DOC 阅读器
Aspose.Words FOSS for Python 包含一个专用的读取器,用于旧版 Word 97-2003 .doc 文件。DocFileReader 类解析 OLE2 二进制格式,并生成可操作或转换为其他格式的轻量文档模型(LDM)。
加载 DOC 文件
使用 DocFileReader 从磁盘打开一个 .doc 文件并将其转换为 Document:
import aspose.words_foss as aw
doc = aw.Document("report.doc")
print(f"Paragraphs: {len(doc.all_paragraphs)}")Document 构造函数委托给 create_reader(),后者会根据 .doc 扩展名自动选择 DocFileReader。
直接使用 DocFileReaderCore
对于更低层次的控制,实例化 DocFileReaderCore 并调用其加载方法:
from aspose.words_foss.doc_reader.doc_file_reader_core import DocFileReaderCore
reader = DocFileReaderCore()
reader.load_file("legacy.doc")DocFileReaderCore 提供三种输入方式:
| 方法 | 输入类型 | 使用场景 |
|---|---|---|
load_file(filepath) | 文件路径字符串 | 从磁盘读取 |
load_stream(stream) | 类文件对象 | 从上传或网络流读取 |
load_bytes(data) | bytes | 从内存缓冲区读取 |
构建 Light Document Model
加载后,对 DocFileReader 调用 to_light_document() 以生成 LDM Document:
from aspose.words_foss.doc_reader.doc_file_reader import DocFileReader
reader = DocFileReader()
reader.load_file("input.doc")
ldm_doc = reader.to_light_document()LDM 是在所有读取器(DocFileReader、DocumentReader、TextFileReader)之间共享的内部表示。拥有 LDM 文档后,您可以将其保存为任何受支持的输出格式。
DocumentFormatReader 协议
所有读取器都实现了 DocumentFormatReader 协议,该协议定义了通用接口:load_file()、load_stream() 和 load_bytes()。create_reader() 工厂函数根据文件扩展名返回相应的读取器:
from aspose.words_foss.reader_factory import create_reader
reader = create_reader("data.doc") # returns DocFileReader
reader.load_file("data.doc")提示与最佳实践
- 在大多数工作流中使用高级
Document("file.doc")构造函数——它会自动处理读取器的选择。 - 仅在需要直接访问二进制解析层时才使用
DocFileReaderCore。 - 对于以
bytes接收的文件(例如来自 HTTP 上传),建议使用load_bytes()以避免写入临时文件。 - DOC 阅读器在文本、段落和基本格式方面提供与 DOCX 阅读器相同的往返保真度。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
load_file() 引发 FileNotFoundError | 文件路径不正确 | 在调用之前验证路径是否存在 |
| 加载后出现乱码 | 文件不是有效的 OLE2 二进制文件 | 确认文件确实是 .doc 格式,而不是被重命名的 .docx |
| 输出中缺少格式 | 某些高级 DOC 功能尚未支持 | 检查 limitations.md 是否有不受支持的功能 |
FAQ
DocFileReader 与 DocFileReaderCore 有何区别?
DocFileReaderCore 负责 OLE2 格式的低层二进制解析。DocFileReader 通过添加 to_light_document() 方法进行扩展,该方法生成适用于转换的完整 LDM Document。
我可以从流中加载 DOC 文件吗?
是的。使用 DocFileReaderCore.load_stream(stream) 或传入类似文件的对象。这对于文件以流形式上传的 Web 应用程序非常有用。
DOC 阅读器是否支持密码保护的文件?
目前不支持密码保护的 .doc 文件。如果文件被加密,阅读器会抛出异常。
API Reference 摘要
| 类 / 方法 | 描述 |
|---|---|
DocFileReader | 完整的 DOC 阅读器,具备 LDM 构建功能 |
DocFileReader.to_light_document() | 将解析后的 DOC 数据转换为 LDM 文档 |
DocFileReaderCore | Word 97-2003(.doc)二进制文件的核心阅读器 |
DocFileReaderCore.load_file(filepath) | 从路径加载 DOC 文件 |
DocFileReaderCore.load_stream(stream) | 从流中加载 DOC 文件 |
DocFileReaderCore.load_bytes(data) | 从字节缓冲区加载 DOC 文件 |
DocumentFormatReader | 所有文档读取器的协议接口 |
create_reader(path) | 根据文件扩展名返回正确读取器的工厂 |