根据 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。
我有一个图像路径和相应的坐标作为字典。前任: {'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。