wxPython之解决闪烁的问题

作者:阿Bin先生 时间:2022-05-12 13:21:30 

利用Python生成PDF文件时,对比了fpdf和reportlab两个库。fpdf最新更新还是2015年,

另外reportlab的资料网上更多一些。所以选择使用reportlab。

pdfgen

pdfgen包是生成PDF文档最底层的接口。一个pdfgen编程实质是一系列将一个文档绘制到连续页面上的操作指南。提供绘制操作的接口对象是pdfgen canvas。

canvas应该被认为一张白纸,上面的点用笛卡尔坐标来标记。默认页面的左下角为原点(0,0),此外x轴向右,y轴向上。

示意图如下:

wxPython之解决闪烁的问题

绘制文本

首先演示一个绘制”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()

运行结果:

wxPython之解决闪烁的问题

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()

运行结果:

wxPython之解决闪烁的问题

获取文本宽度

利用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()

运行结果:

wxPython之解决闪烁的问题

来源:http://blog.csdn.net/webzhuce/article/details/72972809

标签:wxPython,解决,闪烁
0
投稿

猜你喜欢

  • 如何在Python中将字符串转换为数组详解

    2021-09-10 06:36:09
  • 自定义用于ASP Web站点的 SQL 7.0 数据库

    2008-10-28 21:09:00
  • CSS在Internet Explorer 6, 7 和8中的差别

    2009-10-26 18:14:00
  • Mootools 1.2教程(9)——输入过滤第二部分(字符串)

    2008-12-01 12:25:00
  • 基于Python制作flappybird游戏的详细步骤

    2023-07-29 10:08:29
  • Python使用pyshp库读取shapefile信息的方法

    2023-07-27 04:56:36
  • 一劳永逸彻底解决pip install慢的办法

    2023-08-10 20:30:52
  • python实现图书馆研习室自动预约功能

    2022-03-22 02:04:44
  • PHP文件上传功能实现逻辑分析

    2023-05-25 02:28:30
  • PHP错误提示的关闭方法详解

    2023-11-14 13:00:05
  • 扫盲大讲堂:mysql出错的代码解析及解答

    2009-09-05 10:08:00
  • PHP高级编程实例:编写守护进程

    2023-10-27 02:03:22
  • asp.net 上传下载输出二进制流实现代码

    2023-06-28 16:06:05
  • 编写SQL Server的扩展存储过程实例

    2009-01-20 15:45:00
  • 通过Jython调用Python脚本的实现方法

    2022-07-08 23:21:42
  • 详解CSS3中的属性选择符

    2008-04-24 14:30:00
  • PyTorch中的CUDA的操作方法

    2022-02-24 18:54:41
  • sqlserver中根据字符分割字符串的最好的写法分享

    2012-06-06 19:44:40
  • MySQL6.0新增特性

    2010-03-25 10:08:00
  • Django中间件实现拦截器的方法

    2022-10-21 04:47:53
  • asp之家 网络编程 m.aspxhome.com