用jpg和python替换.docx文件中的字符串

时间:2017-09-08 06:53:30

标签: python

抱歉我的英语不好。

我正在尝试用.jpg文件替换.docx文件中的字符串。首先我将JPEG转换为BMP并将其移至剪贴板Copy PIL/PILLOW Image to Windows Clipboard,然后使用Find.Execute和“^ c”替换docx文件中的特殊字符串。

替换效果很好,但它将宽度为15.42cm的图像粘贴到.docx文件中。我试图用im.resize调整它的大小,但它以一个大的模糊图像而不是一个小图像结束。我怎么能让它变小?

我正在使用python2.7.2和Win7。非常感谢。

from win32com.client import Dispatch
from cStringIO import StringIO
import win32clipboard
import win32com
from PIL import Image

def setImageToClipboard(clip_type, data):
    win32clipboard.OpenClipboard()
    win32clipboard.EmptyClipboard()
    win32clipboard.SetClipboardData(clip_type, data)
    win32clipboard.CloseClipboard()

filepath = 'd:/tmp.jpg'
im = Image.open(filepath)
#im = im.resize((10, 10))

output = StringIO()
im.convert("RGB").save(output, "BMP")
data = output.getvalue()[14:]
output.close()

w = win32com.client.Dispatch('Word.Application')
w.Visible = 1
w.DisplayAlerts = 0
doc = w.Documents.Open("d:/clipboard_test.docx")

search = "TEST"

setImageToClipboard(win32clipboard.CF_DIB, data)
w.Selection.Find.ClearFormatting()
w.Selection.Find.Replacement.ClearFormatting()
w.Selection.Find.Execute("TEST", False, True, False, False, False, True, 1, True, ReplaceWith="^c", Replace=2000)

doc.SaveAs("d:/clipboard_test2.docx")
doc.Close()
w.Quit() 

1 个答案:

答案 0 :(得分:0)

您可以更干净地执行此操作,而无需实际安装MS-Word或使用python-docx启动它。

您需要阅读现有文档,找到需要替换的文本,然后使用document.add_picture('monty-truth.png', width=Inches(1.25)) 而不是使用word并假装画画。

唯一的另一个选择是让python选择你粘贴的图像并在word中设置它的属性。