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创建关联数组(字典)的方法
May 04 Python
Python 通配符删除文件的实例
Apr 24 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
python实现验证码识别功能
Jun 07 Python
在Python中获取两数相除的商和余数方法
Nov 10 Python
python实现一个简单的udp通信的示例代码
Feb 01 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
Sep 18 Python
基于Python快速处理PDF表格数据
Jun 03 Python
Python虚拟环境的创建和包下载过程分析
Jun 19 Python
python 实现朴素贝叶斯算法的示例
Sep 30 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 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中存储过程、函数的一些问题
2007/02/14 PHP
解析php取整的几种方式
2013/06/25 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
2016/01/08 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
js 内存释放问题
2010/04/25 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
jQuery插件 Jqplot图表实例
2016/06/18 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
[46:48]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第三局
2016/02/25 DOTA
对python添加模块路径的三种方法总结
2018/10/16 Python
Python-ElasticSearch搜索查询的讲解
2019/02/25 Python
Python实现二叉树的常见遍历操作总结【7种方法】
2019/03/06 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
Python爬取微信小程序Charles实现过程图解
2020/09/29 Python
python代码实现图书管理系统
2020/11/30 Python
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
adidas美国官网:adidas US
2016/09/21 全球购物
新浪网技术部笔试题
2016/08/26 面试题
大学生求职推荐信
2013/11/27 职场文书
便利店投资创业计划书
2014/02/08 职场文书
《春笋》教学反思
2014/04/15 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
治超工作实施方案
2014/05/04 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
九九重阳节致辞
2015/07/31 职场文书
升学宴家长答谢词
2015/09/29 职场文书