python-docx:从网上添加图片

时间:2014-06-21 12:27:28

标签: python django docx python-docx

我正在使用带有django的python-docx来生成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'

3 个答案:

答案 0 :(得分:3)

不是很优雅,但我根据here

中的问题找到了解决方案

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

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))

这很好。

答案 1 :(得分:1)

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

您可以创建自己的模板并使用网址嵌入图片。

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

docxtemplater command line interface

docxtemplater image replacing

答案 2 :(得分:0)

以下是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')