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 urllib模块urlopen()与urlretrieve()详解
Nov 01 Python
python实现根据窗口标题调用窗口的方法
Mar 13 Python
一个基于flask的web应用诞生 用户注册功能开发(5)
Apr 11 Python
python创建属于自己的单词词库 便于背单词
Jul 30 Python
Django url,从一个页面调到另个页面的方法
Aug 21 Python
解决python中的幂函数、指数函数问题
Nov 25 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
Python qrcode 生成一个二维码的实例详解
Feb 12 Python
Python yield生成器和return对比代码实例
Apr 20 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 Python
python画条形图的具体代码
Apr 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
PHP 开发环境配置(测试开发环境)
2010/04/28 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
jQuery timers计时器简单应用说明
2010/10/28 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
2016/06/02 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
详解ES6之async+await 同步/异步方案
2017/09/19 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
js实现时分秒倒计时
2019/12/03 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
VUE实时监听元素距离顶部高度的操作
2020/07/29 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
Python 分析Nginx访问日志并保存到MySQL数据库实例
2014/03/13 Python
Python最长公共子串算法实例
2015/03/07 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
2020/07/03 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
Europcar德国:全球汽车租赁领域的领导者
2018/08/15 全球购物
北承题目(C++)
2012/05/16 面试题
大学校园毕业自我鉴定
2014/01/15 职场文书
精彩自我鉴定
2014/01/16 职场文书
机械设计毕业生自荐信
2014/02/02 职场文书
学校食品安全责任书
2015/01/29 职场文书
社区六一儿童节活动总结
2015/02/11 职场文书
开会迟到检讨书范文
2015/05/06 职场文书