3.2.0Python之ReportLab绘制文本

使用 ReportLab 绘制 PDF 一个pdfgen引擎本质上是一个将文档"绘制"到页面序列上的指令序列。每个实例都包含一个Frames的列表,并且有一些 方法应该在每个页面的开始和结束时被调用, 可以使用此参数绘制我们的页眉和页脚. 绘制复杂Pdf文件时 我们可以为每页设置单独的页面模板。它带有相当多的内部机制,但没有默认的页面模板. 所以需要添加定制好的页面模板(PageTemplate)。因我们在工作中需要用到pdf文件, 而对于复杂的定制的pdf文件往往不好处理. 所以本文介绍如何使用Reportlab生成定制pdf文件。... 阅读详情
利用Python生成PDF文件时,对比了fpdf和reportlab两个库。fpdf最新更新还是2015年,
另外reportlab的资料网上更多一些。所以选择使用reportlab。

pdfgen

  pdfgen包是生成PDF文档最底层的接口。一个pdfgen编程实质是一系列将一个文档绘制到连续页面上的操作指南。提供绘制操作的接口对象是pdfgen canvas。
  canvas应该被认为一张白纸,上面的点用笛卡尔坐标来标记。默认页面的左下角为原点(0,0),此外x轴向右,y轴向上。示意图如下:
  
这里写图片描述

绘制文本

首先演示一个绘制”hello world!”的PDF文件。

#引入所需要的基本包
from reportlab.pdfgen import canvas
#设置绘画开始的位置
def hello(c):
    c.drawString(100, 100, "hello world!")
#定义要生成的pdf的名称
c=canvas.Canvas("hello.pdf")
#调用函数进行绘画,并将canvas对象作为参数传递
hello(c)
#showPage函数:保存当前页的canvas
c.showPage()
#save函数:保存文件并关闭canvas
c.save()

运行结果:

这里写图片描述
canvas.Canvas构造函数

def __init__(self,filename,
            pagesize=(595.27,841.89),
            bottomup = 1,
            pageCompression=0,
            encoding=rl_config.defaultEncoding,
            verbosity=0
            encrypt=None):

其中:

  • filename:PDF文件名
  • pagesize:两个数字的元组。canvas页面大小默认是A4(国际标准纸张大小),A4不同于美国标准纸张大小letter。大多数纸张大小在reportlab.lib.pagesizes。例如:
from reportlab.lib.pagesizes import letter, A4
myCanvas = Canvas('myfile.pdf', pagesize=letter)
width, height = letter #keep for later
  • bottomup :目前是废弃的
  • pageCompression:决定每页PDF操作流是否被压缩。默认设为0,不压缩。因为压缩会减慢文件生成过程。如果每页有大量文本和矢量图形,设置pageCompression = 1来压缩节省空间。
  • encoding:决定字体编码,默认值就很好了。
  • verbosity:决定多长信息被打印。
  • encrypted:决定PDF文档是否加密。

添加字体

下面演示如何添加字体。首先下载微软雅黑字体。

from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont 
pdfmetrics.registerFont(TTFont('msyh', 'Msyh.ttf')) 

解决绘制中文文本问题?

解决绘制中文文本问题?只要注册的字体本身支持中文,就能绘制。canvas默认的字体是不支持中文的。

#引入所需要的基本包
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont 
pdfmetrics.registerFont(TTFont('msyh', 'Msyh.ttf')) 
#设置绘画开始的位置
def hello(c):
    c.drawString(100, 100, "您好")
#定义要生成的pdf的名称
c=canvas.Canvas("hello.pdf")
#设置字体
c.setFont("msyh", 8)
#调用函数进行绘画,并将canvas对象作为参数传递
hello(c)
#showPage函数:保存当前页的canvas
c.showPage()
#save函数:保存文件并关闭canvas
c.save()

运行结果:

这里写图片描述

获取文本宽度

利用canvas的stringWidth方法获取文本宽度。

#引入所需要的基本包
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont 
pdfmetrics.registerFont(TTFont('msyh', 'Msyh.ttf')) 
#设置绘画开始的位置
def hello(c):
    c.drawString(100, 100, "您好")
    width = c.stringWidth("您好")
    c.drawString(100, 120, "文本宽度:%f"%width)
#定义要生成的pdf的名称
c=canvas.Canvas("hello.pdf")
#设置字体
c.setFont("msyh", 8)
#调用函数进行绘画,并将canvas对象作为参数传递
hello(c)
#showPage函数:保存当前页的canvas
c.showPage()
#save函数:保存文件并关闭canvas
c.save()

运行结果:

这里写图片描述

python生成PDF文档的库reportlab 它提供了一系列用于创建和处理PDF文档的工具和函数,可以用于生成各种类型的PDF文件,例如报告、图表、表格等。然后,我们使用 Paragraph 类添加了一个标题和一些正文文本,使用 Image 类添加了一个图像,并使用 Table 类添加了一个表格。我们创建了一个 PDF 文档,并使用 SimpleDocTemplate 类来定义页面大小和边距,然后定义了一个名为 story 的列表,用于存储我们要添加到 PDF 中的内容。我们创建了一个名为“example.pdf”的PDF文档,并设置了其标题。 阅读详情

相关推荐

reportlab中文手册.pdf

reportlab中文手册.pdf

在Centos7下使用reportlab输出中文到pdf文档

首先,先说明一下需求,之所以需要生成PDF中文文档,是因为网站需要生成打印用户的报名表信息。因此将踩过的坑记录下来。 Python版本 3.7.4 reportlab包的版本 3.5.31 Linux版本 Centos7 在作出说明之前,首先大家可以参考reportlab的官方英文文档,文章后面已附带上了。 如果是有了一定的reportlab基础的,并且只想解决加载中文的问题的,可以直接跳到最后,...

大魚的个人博客,如有不足,欢迎指正。 2099

reportlab(python用户使用说明书)

reportlab用户使用教程,内容很全面,看了之后就会很容易使用。

使用ReportLab绘制PDF

使用ReportLab绘制PDF 1. ReportLab 简介 这是一个软件库,可让您使用Python编程语言以Adobe的可移植文档格式(PDF)直接创建文档。它还以各种位图和矢量格式以及PDF创建图表和数据图形。Wikipedia,hp都在使用。 2. ReportLab功能 绘制图形(直线,圆,自定义图形) 自定义文字和编码(主要是英文,对中文不太友好) PDF页面框架布局自定义和模板定...

Magician Blog 7186

Python库reportLab用户手册+API

Python库reportLab用户手册。reportLab是一个强大的创建修改pdf文件的工具。本文档为其用户使用手册,包含reportLab核心使用方法。文档内容根据据reportLab官网的用户手册,去除无关内容使手册阅读更加直观便捷,并且支持快速索引,喜欢用pdf作为文献阅读工具的的可选择下载。 注意:该手册为英文版,下载前请视自身情况而定。

详尽的reportLab开发手册.pdf

使用reportLab生成pdf,详尽的用户手册,详细的开发指南,具有详细的开发说明,并且附有一个简单的例子

Python系列 之 ReportLab库 pdfgen模块Canvas对象绘制图形和文本

ReportLab库 pdfgen模块 Canvas对象 关于注册字体(中文显示问题) Canvas对象的绘制操作 showPage方法 save方法 设置字体 绘制字符串 绘制直线 绘制形状 绘制图片 设置颜色 设置线条样式 改变几何形态 状态控制 用text object绘制 用path object绘制 Canvas对象的其他方法

唐僧骑马噔了个噔 5898

reportlab指南

renportlab是一个基于Python的库,用于生成pdf格式文档。

Python reportlab

python强大的PDF处理库reportlab,网上详细的教程比较少,这是我自己看它的user guide,摘选翻译并加入自己的理解写出来

TeamLee的博客 3439

reportlab_python_pdf编程手册.pdf

reportlab帮助文档,内容丰富,解说详细。

H.264 入门篇 - 09 (帧间预测 - 参考帧列表)

短期和长期的关系和区别:在一个解码器中的 DPB(参考帧缓存)大小总是有限的,所以引入一个问题,什么样的参考帧会被保存到 DPB 中,什么样的参考帧会被移除出去,因此将分为长期和短期参考帧,所谓短期参考帧是这帧不会长期驻留在DPB中,如果参考帧缓存已满或者有其他特定的条件,那么短期参考帧就会被从DPB中移除;与之相对的长期参考帧,只要没有遇到某个指定的条件,遇到某个IDR帧, 遇到了清空整个DPB的指令等等,那么长期参考帧会长期在DPB中,不会因为有新的参考帧而被冲刷掉;(P帧是按照编码顺序)

StephenZhou 5103

Python利用Reportlab生成PDF文档

通过整整两天时间的学习。已经基本摸清reportlab生成pdf的方法。下面记录我的学习成果: reportlab文档:https://www.reportlab.com/docs/reportlab-userguide.pdf reportlab实例:https://www.programcreek.com/python/index/1920/reportlab.platypus repo...

bocai_xiaodaidai的博客 1万+

基于大模型的围术期谵妄防控系统研究报告

围术期谵妄是一种急性脑功能障碍综合征,通常发生在手术前后一段时间内。患者会出现意识障碍、注意力不集中、认知功能紊乱、睡眠 - 觉醒周期失调等症状,严重者甚至会出现幻觉、妄想和攻击行为 。这种病症不仅会给患者自身带来极大的痛苦,还会对其术后康复产生严重的负面影响。从患者角度来看,围术期谵妄会显著延长患者的住院时间,增加患者的医疗费用负担。有研究表明,发生谵妄的患者住院时间平均比未发生者延长 2 - 3 天。长时间的住院不仅会影响患者的生活质量,还可能导致患者错过最佳的康复时机,影响身体机能的恢复。同时,谵妄还

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1071

Python学习——使用ReportLab生成带表格和图文的PDF

项目环境: 环境:Anaconda Python 3.10 编辑器:PyCharm 2021.2.3 Packages:Reportlab 3.6.2 ReportLab简介 “This is a software library that lets you directly create documents in Adobe’s Portable Document Format (PDF)using the Python programming language. It also creates cha

xxilong的博客 1万+

如何用python开发“跳一跳”游戏【附源码】

jump_start_time = pygame.time.get_ticks() # 记录跳跃开始时间。jump_duration = current_time - jump_start_time # 计算跳跃持续时间。current_time = pygame.time.get_ticks() # 获取当前时间。jump_velocity = -15 # 设置跳跃的初始速度。# 如果小球跳跃结束,重置跳跃状态。# 根据跳跃持续时间计算跳跃高度。# 移除超出屏幕的障碍物。

helloshili2011的博客 2496

Verilog实战:手把手教你实现IEEE 754单精度浮点乘法器(附完整代码)

本文详细介绍了如何使用Verilog实现IEEE 754单精度浮点乘法器,包括标准解析、架构设计、Verilog代码实现及优化技巧。通过两级流水线设计,平衡性能与面积,适用于数字信号处理、AI加速器等高性能计算场景。

weixin_33724046的博客 314

python安装reportlab

python3.6安装reportlab的时候报错,错误信息如下: Collecting reportlab Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by ‘SSLError(SSLError(1, ‘[SSL: CERTIFICA...

阳水平的博客 8797

NXP实战笔记(五):S32K3xx基于RTD-SDK在S32DS上配置ADC的硬件触发同步采样与软件采样过程

恩智浦 S32K3xx 系列汽车微控制器器件具有 15 位分辨率逐次逼近模数转换器(SAR ADC),可用于模拟输入信号的采集和数字化。-15 位的分辨率。转换数据总是15 位宽,与所选转换分辨率无关(每转换数据 14、12、10、8 个有效位,减少这个数字会加快数据转换,因为 SAR 算法的执行步骤会更少)。-每个输入通道捕获的转换数据放在单独寄存器中。-可使用“ 平均法” 提高精度,即通过计算最高 32 次转换数据的平均数来提供最终结果。-正常转换触发转换多个。

梦想技术家 3845

python reportlab模块

参考链接: pyhton之Reportlab模块 https://www.cnblogs.com/hujq1029/p/7767980.html reportlab模块是用python语言生成pdf文件的模块 一、安装 #安装命令 pip install -U reportlab 首先需要在cmd窗口安装reportlab模块,成功安装的结果如下: 二、注册中文字体 reportlab模块默认...

JxufeCarol的博客 3202

51雾化器实现

1. 雾化器简介 雾化器是将试液雾化的一种器械。雾化器是原子化系统的重要部件,其性能对测定的精密度和化学干扰等产生显著影响。因此要求雾化器喷雾稳定、雾滴细小、均匀和雾化效率高。雾化器的类型有超声雾化器,空气压缩式雾化器,网式雾化器。超声雾化器因其价格合适,适合家用,被广泛应用于加湿器,香薰机等各种小家电,也在医疗领域有很多的应用。家用雾化器的主要器件是一枚雾化片。 家用雾化器分为两种不同类别雾化片,实孔雾化片和微孔雾化片,这两种的喷雾方法和工作原理是有所不同的。不同的雾化片需要特定的频率才能工作。 实孔雾

qq_42415953的博客 2万+

LCZ数据下载及处理-以重庆市为例(完整Python代码)

LCZ数据下载及处理-以重庆市为例(完整Python代码)

WW、forever的博客 611

python reportlab

python reportlab pdfgen第二部分

TeamLee的博客 2675

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: Spring Boot AOP之Java 动态代理
下一篇: 3.2.1Python之ReportLab绘图
暮-成-雪
博客等级 码龄12年 5328粉丝 319原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值