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

Insert multiple images in a single PDF according to image.coordinates - Python

我有一个图像路径和相应的坐标作为字典。前任: {'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 可能有可能,但没有最初的运气。 提前致谢。

您可以使用 reportlab 来达到这个目的。 drawImage可用于Pdf中的图像绘制。

drawImage 个参数。

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

示例程序:

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,在相应的 coordinates.Now 中有两个图像,您可以从 coords 字典中解析坐标和图像。

设:

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

那么 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

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

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

    PyFPDF is simple, small and versatile, with advanced capabilities and easy to learn, extend and maintain.

    tutorial 展示了如何将图像添加到页面,它似乎与 self.image('logo_pb.png', 10, 8)

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

    cairocffi is a CFFI-based drop-in replacement for Pycairo, a set of Python bindings and object-oriented API for cairo. Cairo is a 2D vector graphics library with support for multiple backends including image buffers, PNG, PostScript, PDF, and SVG file output.

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