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利用Beautiful Soup模块搜索内容详解
Mar 29 Python
浅谈python中的数字类型与处理工具
Aug 02 Python
Python分析学校四六级过关情况
Nov 22 Python
python实现学生管理系统
Jan 11 Python
python hook监听事件详解
Oct 25 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 Python
Python编程学习之如何判断3个数的大小
Aug 07 Python
Python实现点云投影到平面显示
Jan 18 Python
python统计字符的个数代码实例
Feb 07 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 Python
python爬虫scrapy基本使用超详细教程
Feb 20 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文件上传实例详解!!!
2007/01/02 PHP
PHP开发不能违背的安全规则 过滤用户输入
2011/05/01 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
javascript hashtable实现代码
2009/10/13 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
文件上传,iframe跨域数据提交的实现
2016/11/18 Javascript
微信小程序 选项卡的简单实例
2017/05/24 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
微信小程序倒计时功能实例代码
2018/07/17 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
[01:10:24]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第一场 2月28日
2021/03/11 DOTA
详解Python函数作用域的LEGB顺序
2016/05/14 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
详解Canvas事件绑定
2018/06/27 HTML / CSS
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
经销商会议欢迎词
2014/01/11 职场文书
男方婚礼答谢词
2015/01/20 职场文书
公积金贷款承诺书
2015/04/30 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书
2015年国庆节寄语
2015/08/17 职场文书
网络研修心得体会
2016/01/08 职场文书
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫