绘制简单图形并保存为文件(pdf)

11

我正在寻找一个Python库,可以用来绘制简单的形状和字符,并将其保存到文件中(以可转换为PDF格式的方式)。如果不需要运行X服务器,那就更好了。

例如,可以看起来像这样:

import drawing_lib
obj = drawing_lib.Object()
for i in range(5):
    obj.draw_line(from=(i*10, 20), to=(i*10+10, 35))
obj.save_pdf('five_inclined_lines.pdf')

有什么想法吗?

4个回答

10

您可以使用cairo来实现此功能。

import math,cairo

width, height = 768,768
surface = cairo.PDFSurface ("circle.pdf", width, height)
ctx = cairo.Context (surface)
ctx.set_source_rgb(1,1,1)
ctx.rectangle(0,0,width,height)
ctx.fill()
ctx.set_source_rgb(1,0,0)
ctx.move_to(width/2,height/2)
ctx.arc(width/2,height/2,512*0.25,0,math.pi*2)
ctx.fill()
ctx.show_page()

另请参阅:


1
在理想情况下,我希望首先编写绘图命令,然后根据内容来设置宽度和高度(不包括边框),而不是事先设置固定的宽度和高度。有人知道如何实现这个吗? - Matthias 009
1
在1.10版本中,cairo引入了RecordingSurface,您可以在其中记录绘图命令,并在完成后请求其“墨迹范围”。然后,您可以创建一个紧密适合的PDF表面,并通过命令ctx.paint()绘制记录表面的内容。请参见:http://cairographics.org/manual/cairo-Recording-Surfaces.html - Dov Grobgeld
@DovGrobgeld: 我试图让这个工作起来,但遇到了一些问题(https://stackoverflow.com/questions/25066437/crop-cairo-generated-pdf)。也许你有想法? - Richard
如何在现有的PDF文件中添加形状? - Luk Aron

2

有几个这样的库。

个人建议使用reportlab,因为它非常灵活多用途。


1

正如Roman Susu和Dov Grobgeld所说,确实有几个库可以做到这一点。

我自己尝试了几个。除了(如前所述)Cairo和reportlab之外,我认为还有三个值得在这里提及:

  1. FPDF Python端口:https://pyfpdf.readthedocs.io/en/latest/
  2. PyX(https://pyx-project.org/),这是一种使用LaTeX处理PDF的方式
  3. 编写PostScript(PS)文件并使用Ghostscript转换它们。

第3个比您想象的更有效率。PS在最低级别上相当易于理解,并且给您很多控制权。当然,一切都非常依赖于您的情况。


0
考虑一下:用svgwrite(或其他库)来绘制图形。 然后简单地将svg转换为pdf。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接