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中的上下文管理器
Jun 28 Python
Python实现单词翻译功能
Jun 06 Python
详谈python http长连接客户端
Jun 12 Python
谈谈python中GUI的选择
Mar 01 Python
解决Python requests库编码 socks5代理的问题
May 07 Python
解决pycharm界面不能显示中文的问题
May 23 Python
解决Matplotlib图表不能在Pycharm中显示的问题
May 24 Python
使用python 写一个静态服务(实战)
Jun 28 Python
python的re模块使用方法详解
Jul 26 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
python datetime处理时间小结
Apr 16 Python
tensorflow常用函数API介绍
Apr 19 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
php过滤所有的空白字符(空格、全角空格、换行等)
2015/10/27 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
Prototype使用指南之selector.js
2007/01/10 Javascript
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
2009/10/25 Javascript
js 页面传参数时 参数值含特殊字符的问题
2009/12/13 Javascript
JavaScript Eval 函数使用
2010/03/23 Javascript
ExtJs中简单的登录界面制作方法
2010/08/19 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
js提取中文拼音首字母的封装工具类
2018/03/12 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
如何利用nodejs实现命令行游戏
2020/11/24 NodeJs
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
跟老齐学Python之集合(set)
2014/09/24 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
Python多进程multiprocessing用法实例分析
2017/08/18 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
中学生期中自我鉴定
2014/04/20 职场文书
会计求职自荐信
2014/06/20 职场文书
材料化学专业求职信
2014/07/15 职场文书
安全生产标语大全
2014/10/06 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python