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由于缺少对图像的引用而无法继续使用此文件),但认为这可能是解决方案的路径。
有任何想法吗?
如果您的目标是编辑图像,也许我用于类似用例的这段代码可能有用:
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 来模糊某些文件中的图像,但可以使用任何其他合适的操作来代替模糊滤镜。这对于我的用例非常有效。