1

我正在使用 python-docx 和 django 来生成 word 文档。

有没有办法使用add_picture从网络而不是从文件系统添加图像?

总之,当我选择添加图片时,我可以只给出 URL。我试着简单地写下:

document.add_picture("http://icdn4.digitaltrends.com/image/microsoft_xp_bliss_desktop_image-650x0.jpg")

并得到错误:

IOError:[Errno 22] 无效模式 ('rb') 或文件名:' http://icdn4.digitaltrends.com/image/microsoft_xp_bliss_desktop_image-650x0.jpg '

4

3 回答 3

4

不是很优雅,但我找到了一个解决方案,基于这里的问题

我的代码现在看起来像这样:

import urllib2, StringIO
image_from_url = urllib2.urlopen(url_value)
io_url = StringIO.StringIO()
io_url.write(image_from_url.read())
io_url.seek(0)
try:
  document.add_picture(io_url ,width=Px(150))

这很好用。

于 2014-06-22T05:52:59.227 回答
1

如果您使用docxtemplater(命令行界面),

您可以创建自己的模板并使用 URL 嵌入图像。

请参阅:https ://github.com/edi9999/docxtemplater

docxtemplater 命令行界面

docxtemplater 图像替换

于 2014-06-26T10:28:56.930 回答
1

下面是 Python 3 的全新实现:

from io import BytesIO

import requests
from docx import Document
from docx.shared import Inches

response = requests.get(your_image_url)  # no need to add stream=True
# Access the response body as bytes
#   then convert it to in-memory binary stream using `BytesIO`     
binary_img = BytesIO(response.content)  

document = Document()
# `add_picture` supports image path or stream, we use stream
document.add_picture(binary_img, width=Inches(2))
document.save('demo.docx')
于 2018-06-14T00:35:02.417 回答