背景知识视频教程
Reportlab Python完整教程Python PDF处理viadean.com![7aff14f7480c04212a2ddb2ca0d8646e.png](https://i-blog.csdnimg.cn/blog_migrate/c8200b630e74792a0de92f8879670e12.png)
![b23b7b96f71337c49b7cf4dbb5814801.png](https://i-blog.csdnimg.cn/blog_migrate/444d7d432b3c6406ca37965f89afe456.jpeg)
![3e79f7b325408610901b6e8990c0321b.png](https://i-blog.csdnimg.cn/blog_migrate/2af94a8478411536a64127e1da6a3f23.png)
本文使用Reportlab的开源版本。通过Reportlab PDF工具包,您可以使用Python编程语言快速有效地创建Adobe的可移植文档格式(PDF)。 Reportlab是使用Python生成PDF的事实上的方法。除PDF之外,您还可以使用Reportlab以bimap和矢量格式创建图表和图形。 Reportlab以快速生成PDF的能力而闻名。
Reportlab入门
ReportLab是一个非常强大的库。 稍加努力,您几乎可以想到任何布局。 多年来,我一直使用它来复制许多复杂的页面布局。在本文中,我们将学习如何使用ReportLab的pdfgen软件包。
pdfgen软件包的级别很低。 您将在画布上绘画或“涂画”以创建PDF。 画布是从pdfgen包中导入的。 当您在画布上绘画时,您将需要指定X / Y坐标,以告诉ReportLab从哪里开始绘画。 默认值为(0,0),其原点位于页面的左下角。 许多桌面用户界面工具包,例如wxPython,Tkinter等,也具有此概念。 您也可以使用X / Y坐标将按钮绝对放置在许多工具包中。 这样可以非常精确地放置要添加到页面中的元素。
我需要提及的另一项内容是,当您在PDF中放置某项时,是根据您从原点开始的点数进行定位。 它是点,而不是像素,毫米或英寸。 点! 让我们来看看一个字母大小的页面上有多少个点:
>>> from reportlab.lib.pagesizes import letter
>>> letter
(612.0, 792.0)
在这里,我们了解到一个字母宽612点,高792点。 让我们找出英寸和毫米分别有多少个点:
>>> from reportlab.lib.units import inch
>>> inch
72.0
>>> from reportlab.lib.units import mm
>>> mm
2.834645669291339
这些信息将帮助我们将图纸放置在您的画上。 至此,我们已经准备好创建PDF!
canvas对象位于pdfgen包中。 让我们导入它并绘制一些文本:
# hello_reportlab.py
from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
c.drawString(100, 100, 'Welcome to Reportlab!')
c.showPage()
c.save()
在此示例中,我们导入canvas对象,然后实例化Canvas对象。 您会注意到,唯一的要求参数是文件名或路径。 接下来,我们在画布对象上调用drawString(),并告诉它开始在原点右边100点向上100点绘制字符串。 之后,我们调用showPage()方法。 showPage()方法将保存画布的当前页面。 实际上不是必需的,但建议使用。 showPage()方法也会结束当前页面。 如果在调用showPage()之后绘制另一个字符串或其他元素,则该对象将被绘制到新页面。 最后,我们调用canvas对象的save()方法,该方法将文档保存到磁盘。 现在我们可以打开它,看看我们的PDF是什么样的:
您可能会注意到,我们的文字位于文档底部附近。 原因是原点(0,0)是文档的左下角。 因此,当我们告诉ReportLab绘制文本时,我们是在告诉它从左侧开始绘制100点,从底部开始绘制100点。 这与在Tkinter或wxPython中创建用户界面(左上角是起源)形成对比。
另请注意,由于我们未指定页面大小,因此默认使用ReportLab配置中的默认大小,通常为A4。 在reportlab.lib.pagesizes中可以找到一些常见的页面大小。
让我们看一下Canvas的构造函数,以了解其对参数的要求:
def __init__(self,filename,
pagesize=None,
bottomup = 1,
pageCompression=None,
invariant = None,
verbosity=0,
encrypt=None,
cropMarks=None,
pdfVersion=None,
enforceColorSpace=None,
):
在这里,我们可以看到可以将pagesize作为参数传递。 pagesize实际上是一个以点为单位的宽度和高度的元组。 如果要从默认的左下角更改原点,则可以将bottomup参数设置为0,这会将原点更改为左上角。
pageCompression参数默认为零或关闭。 基本上,它将告诉ReportLab是否压缩每个页面。 启用压缩后,文件生成过程会变慢。 如果您的工作需要尽快生成PDF,则需要将默认值保持为零。 但是,如果不关心速度,并且您想使用更少的磁盘空间,则可以打开页面压缩。 请注意,PDF中的图像将始终被压缩,因此打开页面压缩的主要用例是每页上有大量文本或大量矢量图形时。
ReportLab的《用户指南》没有提及不变参数的用途,因此我看了一下源代码。 根据消息来源,它会产生具有相同时间戳信息的可重复的相同PDF(用于回归测试)。 我从未见过有人在他们的代码中使用此参数,并且由于消息人士说该参数用于回归测试,所以我认为我们可以放心地忽略它。
下一个参数是详细程度,用于记录级别。 Zero(0),ReportLab将允许其他应用程序从标准输出中捕获PDF。 如果将其设置为一(1),则每次创建PDF时都会打印出一条确认消息。 可能添加了其他级别,但是在撰写本文时,这是仅有的两个文档。
画布
全部有关字体
使用脚本的页面布局和版式
段落
表
其他对象
自定义对象
图表/图形
其他图形
PDF特殊功能
Python使用Reportlab处理PDF数据详解第1部分 - 国外课栈viadean.com![b56b0c4915ed047f57d8726162186679.png](https://i-blog.csdnimg.cn/blog_migrate/7db4db1ce152b26108b7bdfe353b0e15.png)