根据image.coordinates - Python在单个PDF中插入多个图像

时间:2015-02-26 17:57:02

标签: python image pdf reportlab

我有一个图像路径和相应的坐标作为字典。例如:                         {'coords':[u'530,88,592,99'],                          'filepath':1.jpg},                         {'coords':[u'7,12,152,85'],                          'filepath':2.jpg},                         {'coords':[u'448,12,594,86'],                          'filepath':3.jpg} 我想根据图像的相对坐标生成包含所有图像的单个PDF。我想,有可能使用reportlab,但没有最初的运气。 提前谢谢。

2 个答案:

答案 0 :(得分:6)

您可以将reportlab用于此目的。 drawImage可以使用Pdf进行图像绘制。

drawImage个参数。

drawImage(image, x, y, width=None, height=None, mask=None, preserveAspectRatio=False, anchor='c')
  • “image”可以是图像文件名或ImageReader对象。
  • x和y定义您想要绘制的图像的左下角
  • 如果给出宽度和高度,图像将被拉伸以填充由(x,y,x +宽度,y高度)限定的给定矩形。

示例程序:

from reportlab.pdfgen import canvas
from reportlab.lib.units import inch

c = canvas.Canvas("test.pdf")
# move the origin up and to the left
c.translate(inch,inch)
c.setFillColorRGB(1,0,1)
c.drawImage("image1.jpg", 10, 10, 50, 50)
c.drawImage("image2.jpg", 60, 60, 50, 50)

c.showPage()
c.save()

此程序应生成一个pdf test.pdf,其中包含相应坐标中的两个图像。现在您可以解析coords字典中的坐标和图像。

可让:

 coords_dict = {'coords': [u'7,12,152,85'], 'filepath': 2.jpg}

然后你的dict drawImage应该是

 c.drawImage(
    coords_dict["filepath"], 
    coords_dict["coords"][0], 
    coords_dict["coords"][1],
    coords_dict["coords"][3]-coords_dict["coords"][0],
    coords_dict["coords"][4]-coords_dict["coords"][2])

如需更多信息,请check

答案 1 :(得分:0)

Reportlab功能丰富且复杂。对于您的任务,它肯定会工作,但可能有其他选择。我建议您查看这些积极维护的项目之一:

  • PyFPDF(https://github.com/reingart/pyfpdf):

      

    PyFPDF简单,小巧,功能多样,具有先进的功能和   易于学习,扩展和维护。

    tutorial显示了如何向页面添加图片,它似乎就像self.image('logo_pb.png', 10, 8)

  • 一样简单
  • cairocffi(https://pythonhosted.org/cairocffi/):

      

    cairocffi是基于CFFI的直接替代Pycairo,一套   用于cairo的Python绑定和面向对象的API。开罗是2D   支持多个后端的矢量图形库,包括   图像缓冲区,PNG,PostScript,PDF和SVG文件输出。

    在那里,您似乎会创建一个cairocffi.PDFSurface(),然后为所有图片创建ImageSurface(),并将图像添加到PDF中。