使用 Python docx 模糊特定标题下的图像

Bluring the Image which is under specific Heading using Python docx

我打算搜索文档中的特定标题,然后我必须删除该标题中的所有内容。文档有很多标题,每个标题可以包含段落、表格、图片,也可以任意组合。

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

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

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

问题 2:我使用 python 代码中的 VBMacro 启用了跟踪更改选项。但是我使用 docx(删除线)所做的任何更改都没有突出显示以进行跟踪。

这是两个独立的问题(或三个,取决于您如何计算)。我将在这里解决第一个问题,您可以 post 另一个问题作为一个单独的新问题。 (也许:"How use python-pptx to track changes in Word document")。

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

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

  2. 模糊图像。

python-docx 中没有对这些操作的直接 API 支持。但是,您可以使用 python-docx 访问基础 XML 并使用 lxml 调用(python-docx 在内部使用)进行更改。这种努力通常称为 "workaround functions",因此如果您在 'python-docx OR python-pptx workaround function' 上搜索 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. 用 "blurred" 版本替换当前图片。
  2. 更改 Word 中图像的透明度,使其看起来更亮。这不会从图像中删除细节,实际图像仍然是 "behind",没有变化,例如,如果用户想要右键单击并选择 "Save image..."。

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

一旦您决定了要走的路,您就可以搜索该问题的解决方案或提交专注于该主题的新问题。