提问者:小点点

使用 Python docx 对特定标题下的图像进行蓝光处理


我计划搜索文档中的特定标题,然后我必须删除该标题中的所有内容。文档有许多标题,每个标题可以完全或任意组合地包含段落,表格,图像。

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

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

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

问题2:我已经从python代码中使用VBMacro启用了跟踪更改选项。但是,无论我使用 docx(删除线)所做的任何更改都不会突出显示跟踪。


共1个答案

匿名用户

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

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

>

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

    模糊图像。

    在python-docx中,这些操作都没有直接的API支持。但是,您可以使用python-docx访问底层XML并使用lxml调用(python-docx在内部使用)进行更改。这些努力通常被称为“解决方法函数”,因此如果您在“python-docx OR python-pptx 解决方法函数”上搜索Google,您会找到示例。

    内联图像存储在运行级别。因此,您可以遍历感兴趣部分中的所有运行,并查看其中是否有图像。这个来自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 中更改图像的透明度,使其看起来更亮。这不会从图像中删除细节,并且实际图像仍然“落后”,保持不变,例如,如果用户想要右键单击并选择“保存图像...”。

    第二种方法要容易得多。您必须决定它是否符合您的要求。

    一旦你决定了你想走哪条路,你可以搜索该问题的解决方案,或者提交一个专注于该主题的新问题。