python - 当我只能以只读模式打开某些文件时,使用 Python comtypes 打开和保存 word 文件?
问题描述
有没有人有打开许多 Word 文档并将它们保存为 PDF 的经验,但是当它们在共享服务器上时,可能有其他人正在编辑它们,但你仍然想通过并保存PDF?
我有一些使用以下 comtypes 的代码,它适用于共享驱动器上其他用户未编辑的文件,但如果任何文档当前由同事打开,则会失败,因为它们以只读方式打开并且我无法保存。
word=comtypes.client.CreateObject(Word.Application)
word.Visible = 1
input_file_path = input_file_path
doc = word.Documents.Open(input_file_path)
file_name = os.path.splitext(input_file_name)[0]
output_file_path = output_file_path
doc.SaveAs(output_file_path,32)
doc.Close()
word.Quit()
解决方案
将word文档作为数据文件打开,将临时word文档作为输出文件打开,循环读取BUFSIZE块数据,将数据写入输出文件,完成后关闭文件。基本上,将 word 文件的二进制副本复制到临时文件,然后 PDF 化生成的 docx 临时文件并将其删除。
这是一个额外的步骤,临时文件需要额外的磁盘空间,但如果你不受限制,它肯定比担心打开文件更安全。
这篇文章:Python writing binary files, bytes提供了一些关于复制二进制文件副本的想法。
推荐阅读
- ansible - 如何解决 Ansible 中本地下载包的依赖关系?当包 A 依赖于包 B
- javascript - 为什么在 web 组件中自定义事件优于属性回调?
- node.js - 从 URL 获取图像到 S3
- python - 使用 QStyledItemDelegates 作为 QListView 中的自定义项
- javascript - 谷歌地图 - 更改不同缩放级别上的所有标记大小 - map.data.setStyle
- phaser-framework - 从另一个身体的墙壁上弹起一个身体。Phaser3
- javascript - 使用正则表达式或替代方法检查字符串的第一个字符是否为数字或空格
- forms - 复选框在所有记录而不是选定记录上触发
- java - 在 Spring 中消耗大量 json 有效负载的最佳方法是什么?
- javascript - 轴未显示域中的第一个元素