docx (OOXML) 到 html 转换器
项目描述
将docx (OOXML)文件转换为语义HTML。所有Word格式化混乱都被去除,留下干净格式化的内容版本。
用法
>>> from docx2html import convert >>> html = convert('path/to/docx/file')
运行开发测试
$ virtualenv path/to/new/virtualenv $ source path/to/new/virtualenv/bin/activate $ cd path/to/workspace $ git clone git://github.com/PolicyStat/docx2html.git $ cd docx2html $ pip install . $ pip install -r test_requirements.txt $ ./run_tests.sh
描述
docx2html被设计用来从一个docx文件中提取内容,并将其转换为HTML。它不关心样式或字体或任何改变内容显示方式的东西(有少数例外)。以下是目前支持的功能列表
- 段落
粗体
斜体
下划线
超链接
- 列表
嵌套列表
列表样式(字母、罗马数字等)
表格
段落
- 表格
行跨度
列跨度
嵌套表格
列表
- 图片
调整大小
转换为较小的格式(用于位图和tiffs)
有一个钩子允许在上下文之外设置图片标签的src,稍后详细介绍
- 标题
简单标题
根级列表(大写罗马数字)被转换为h2标签
处理嵌入式图片
docx2html允许您指定如何处理图片上传。例如,您可能正在上传图片到Amazon S3等:注意:此文档很糟糕,您可能需要阅读源代码。
import os.path from shutil import copyfile from docx2html import convert def handle_image(image_id, relationship_dict): image_path = relationship_dict[image_id] # Now do something to the image. Let's move it somewhere. _, filename = os.path.split(image_path) destination_path = os.path.join('/tmp', filename) copyfile(image_path, destination_path) # Return the `src` attribute to be used in the img tag return 'file://%s' % destination html = convert('path/to/docx/file', image_handler=handle_image)
命名约定
在docx2html的源代码中存在两种主要的命名约定,包括build函数,这些函数将返回表示HTML的etree元素。还有get_content函数,这些函数返回HTML的字符串表示形式。
变更日志
- 0.2.3
存在一个bug,即带有换行标签的超链接会导致文档无法转换。这个问题已经修复。
- 0.2.2
存在一个bug,即缺少文本的超链接会导致文档无法转换。这个问题已经修复。
- 0.2.1
如果一个列表在ilvls中存在不一致性,则不一致的ilvl的内容将丢失。现在我们将那个不一致的列表滚动到根目录,不再丢失内容。
- 0.2.0
如果一个列表的numId不在编号字典中存储,则将抛出键错误。现在,如果给定列表标签的numId或ilvl无效,则默认返回十进制类型的列表。
- 0.1.11
有时在OOXML中,一个图像的高度或宽度为0。如果发生这种情况,我们现在将忽略OOXML中的高度和宽度,并使用完整的图像。
- 0.1.10
添加了面向用户的版本
- 0.1.9
一些列表存在问题,如果列表ID表现不佳,会导致内容丢失。这个问题已经得到解决。
- 0.1.8
修复了带有多个run标签和smartTags的超链接的丢失内容问题。
现在正在忽略某些图像类型。这些包括:emf、wmf和svg。
- 0.1.7
如果一组列表(具有相同的列表ID)的缩进级别被破坏(从较高的缩进级别开始,然后是较低的缩进级别),则整个子列表(具有较低缩进级别的列表)将不会添加到根列表。这会导致从最终输出中删除损坏的列表。这个问题已经得到解决。
- 0.1.6
标题检测依赖于大小写。但是,标题的小写版本也可能出现。现在这些都将被正确处理。
- 0.1.4
添加了一个用于删除标签的函数,同时清除“sectPr”标签,因为它们与页眉和页脚有关。
- 0.1.3
没有文本的超链接不再抛出错误
修复了使用不完整的styles字典确定字体大小的问题
- 0.1.2
修复了确定段落标签的字体大小的问题
- 0.1.1
添加了变更日志
现在从超链接中删除了样式
jinja2现在用于渲染测试xml
- 0.1.0
正确处理列表中的表格和段落。在此之前,如果列表中有一个表格,它将使列表分为两半,表格之前的一半和表格之后的一半(表格位于它们之间)。现在如果列表中有一个表格或段落,这些元素将滚动到列表中。