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爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
详解Python中for循环是如何工作的
Jun 30 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
matplotlib subplots 调整子图间矩的实例
May 25 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
Python实现的大数据分析操作系统日志功能示例
Feb 11 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
基于多进程中APScheduler重复运行的解决方法
Jul 22 Python
Python读写文件模式和文件对象方法实例详解
Sep 17 Python
Python图像处理库PIL的ImageFilter模块使用介绍
Feb 26 Python
Python requests上传文件实现步骤
Sep 15 Python
Python一行代码实现自动发邮件功能
May 30 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读取数据库信息的几种方法
2008/05/24 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
php实现从上传文件创建缩略图的方法
2015/04/02 PHP
简要剖析PHP的Yii框架的组件化机制的基本知识
2016/03/17 PHP
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
杨氏矩阵查找的JS代码
2013/03/21 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
2017/02/15 Javascript
JavaScript实现实时更新系统时间的实例代码
2017/04/04 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
2018/07/24 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
详解JQuery基础动画操作
2019/04/12 jQuery
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
Python使用metaclass实现Singleton模式的方法
2015/05/05 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
Python使用一行代码获取上个月是几月
2018/08/30 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
对python中各个response的使用说明
2020/03/28 Python
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
五型班组建设方案
2014/02/10 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
主题实践活动总结
2014/05/08 职场文书
激励员工的口号
2014/06/16 职场文书
倡议书格式
2014/08/30 职场文书
2014年人大工作总结
2014/12/10 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
党风廉政建设心得体会
2019/05/21 职场文书
Kubernetes控制节点的部署
2022/04/01 Servers