使用Python docx

时间:2017-11-17 09:41:24

标签: python python-docx

我打算搜索文档中的特定标题,然后我必须删除该标题中的所有内容。该文件有许多标题,每个标题可以有段落,表格,图像或任何组合。

我已经安装了docx,我能够搜索特定标题,删除段落,表格。

现在我无法访问该标题下的图像。为了表明图像是三角形,我们试图模糊图像

问题1:我能够获取文档中所有图像的图像ID(资源ID),图像名称。但我不知道如何获取特定标题下的图像的资源ID,然后我必须模糊它。

问题2:我已经使用python代码中的VBMacro启用了Track Changes选项。但是我使用docx(三振出局)所做的任何改变都没有突出显示为跟踪。

1 个答案:

答案 0 :(得分:1)

这是两个单独的问题(或三个,取决于你如何计算)。我将在这里解决第一个问题,你可以将另一个问题作为一个单独的新问题发布。 (也许:“如何使用python-pptx跟踪Word文档中的更改”)。

关于模糊图像,您有两个挑战:

  1. 识别与文档中特定区域相关联的图像。

  2. 模糊图像。

  3. python-docx中没有针对这两项操作的直接API支持。但是,您可以使用python-docx访问基础XML并使用lxml调用进行更改(python-docx在内部使用)。这些努力通常被称为“变通办法”,因此如果您在“python-docx或python-pptx变通办法”上搜索Google,您将找到示例。

    内嵌图像以Run级别存储。因此,您可以迭代感兴趣部分中的所有运行,并查看其中是否有任何图像。 python-docx项目中的此分析页面包含您需要的一些详细信息:http://python-docx.readthedocs.io/en/latest/dev/analysis/features/shapes/shapes-inline.html

    基本上你会做这样的事情:

    for run in runs:  # however you decide to get the runs
        r = run._element  # this is the `<w:r>` XML element for the run
        pics = r.xpath('.//w:drawing/wp:inline/a:graphic/a:graphicData/pic:pic')
        if not pics:
            break
        print(r.xml)  # if you want to see the XML for this run
    

    这将打印包含图片的运行元素的XML。

    关于实际的模糊,我可以想到两种方法:

    1. 用“模糊”版本替换当前图片。
    2. 更改Word中图像的透明度,使其看起来更轻。这不会从图像中删除细节,实际图像仍然“后面”,如果用户想要右键单击并选择“保存图像......”,则不会改变。
    3. 第二种方法更容易。您必须决定它是否符合您的要求。

      一旦您决定要采用哪种方式,就可以搜索该问题的解决方案或提交针对该主题的新问题。