wxPython之解决闪烁的问题


Posted in Python onJanuary 15, 2018

利用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之解决闪烁的问题

以上这篇wxPython之解决闪烁的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之集合的关系
Sep 24 Python
跟老齐学Python之关于类的初步认识
Oct 11 Python
python中map、any、all函数用法分析
Apr 21 Python
python实现linux下使用xcopy的方法
Jun 28 Python
Python Sql数据库增删改查操作简单封装
Apr 18 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
Python装饰器用法实例总结
Feb 07 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
Python中if有多个条件处理方法
Feb 26 Python
python实现电子词典
Mar 03 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
详细解读tornado协程(coroutine)原理
Jan 15 #Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 #Python
Tornado高并发处理方法实例代码
Jan 15 #Python
使用Python实现windows下的抓包与解析
Jan 15 #Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
Jan 15 #Python
Python操作mysql数据库实现增删查改功能的方法
Jan 15 #Python
使用python编写简单的小程序编译成exe跑在win10上
Jan 15 #Python
You might like
php实现的SESSION类
2014/12/02 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
JavaScript DOM学习第六章 表单实例
2010/02/19 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
Jquery中map函数的用法
2016/06/03 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
Bootstrap作品展示站点实战项目2
2016/10/14 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
JS实现div模块的截图并下载功能
2017/10/17 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
Python实现的读取电脑硬件信息功能示例
2018/05/30 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
python列表推导式入门学习解析
2019/12/02 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
Python中return函数返回值实例用法
2020/11/19 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
美国批发零售网站:GearXS
2016/07/26 全球购物
英国最大的奢侈珠宝和手表网站:C W Sellors
2017/02/10 全球购物
低碳环保口号
2014/06/12 职场文书
2014年班组建设工作总结
2014/12/01 职场文书
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技