删除 docx 文件中的所有图像

Ofe*_*dan 3 python docx python-docx

我搜索了python-docx其他软件包的文档以及堆栈溢出,但找不到如何docx使用 python 从文件中删除所有图像。

我的具体用例:我需要将数百个 Word 文档转换为“草稿”格式以供客户查看。这些草稿应与原始文档相同,但必须删除/编辑其中的所有图像。

抱歉,没有提供我尝试过的示例,我尝试过的是数小时的研究,但没有提供任何信息。我发现这个问题是关于如何从Word文件中提取图像,但这并没有从实际文档中删除它们:Extract pictures from Word and Excel with Python

从那里和其他来源我发现docx文件可以被读取为简单的zip文件,我不知道这是否意味着可以在没有图像的情况下“重新压缩”而不影响文件的完整性docx(编辑:只需删除图像即可,但python-docx由于缺少对图像的引用而无法继续使用此文件),但认为这可能是解决方案的路径。

有任何想法吗?

mat*_*ata 6

如果您的目标是编辑图像,也许我用于类似用例的这段代码可能有用:

import sys
import zipfile
from PIL import Image, ImageFilter
import io

blur = ImageFilter.GaussianBlur(40)

def redact_images(filename):
    outfile = filename.replace(".docx", "_redacted.docx")
    with zipfile.ZipFile(filename) as inzip:
        with zipfile.ZipFile(outfile, "w") as outzip:
            for info in inzip.infolist():
                name = info.filename
                print(info)
                content = inzip.read(info)
                if name.endswith((".png", ".jpeg", ".gif")):
                        fmt = name.split(".")[-1]
                        img = Image.open(io.BytesIO(content))
                        img = img.convert().filter(blur)
                        outb = io.BytesIO()
                        img.save(outb, fmt)
                        content = outb.getvalue()
                        info.file_size = len(content)
                        info.CRC = zipfile.crc32(content)
                outzip.writestr(info, content)
Run Code Online (Sandbox Code Playgroud)

在这里,我使用 PIL 来模糊某些文件中的图像,但可以使用任何其他合适的操作来代替模糊滤镜。这对于我的用例非常有效。