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人人网登录应用实例
Sep 26 Python
python实现在目录中查找指定文件的方法
Nov 11 Python
Python过滤列表用法实例分析
Apr 29 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
Jun 11 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
Python3.8中使用f-strings调试
May 22 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 Python
python 串行执行和并行执行实例
Apr 30 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
python 5个实用的技巧
Sep 27 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
mysql5详细安装教程
2007/01/15 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
thinkPHP事务操作简单案例分析
2019/10/17 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
2016/05/10 Javascript
javascript实现简单的on事件绑定
2016/08/23 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
vue仿element实现分页器效果
2018/09/13 Javascript
前端面试知识点目录一览
2019/04/15 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
python 获取list特定元素下标的实例讲解
2018/04/09 Python
django 外键model的互相读取方法
2018/12/15 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
用Python实现将一张图片分成9宫格的示例
2019/07/05 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Python多继承以及MRO顺序的使用
2019/11/11 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
python opencv进行图像拼接
2020/03/27 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
python实现三种随机请求头方式
2021/01/05 Python
详解利用css3的var()实现运行时改变scss的变量值
2021/03/02 HTML / CSS
高校自主招生自荐信
2013/12/09 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
2014年检察院个人工作总结
2014/12/09 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL