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中日期和时间格式化输出的方法小结
Mar 19 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
浅谈Python中的数据类型
May 05 Python
python异常和文件处理机制详解
Jul 19 Python
Python第三方库face_recognition在windows上的安装过程
May 03 Python
深入浅析Python中的迭代器
Jun 04 Python
python networkx 包绘制复杂网络关系图的实现
Jul 10 Python
Pycharm远程调试原理及具体配置详解
Aug 08 Python
python Pillow图像处理方法汇总
Oct 16 Python
python 线性回归分析模型检验标准--拟合优度详解
Feb 24 Python
python游戏开发Pygame框架
Apr 22 Python
pytest实现多进程与多线程运行超好用的插件
Jul 15 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下载文件的代码示例
2012/06/29 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
jquery中attr、prop、data区别与用法分析
2019/09/25 jQuery
vue中的使用token的方法示例
2020/03/10 Javascript
详解node.js 事件循环
2020/07/22 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
Python语言的12个基础知识点小结
2014/07/10 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
python多线程下信号处理程序示例
2019/05/31 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
解决python多行注释引发缩进错误的问题
2019/08/23 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
创意婚礼策划方案
2014/05/18 职场文书
电工实训报告总结
2014/11/05 职场文书
设备技术员岗位职责
2015/04/11 职场文书
小学教师个人工作总结2015
2015/04/20 职场文书
大学生暑期实践报告
2015/07/13 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
庭外和解协议书
2016/03/23 职场文书
应届毕业生的自我评价
2019/06/21 职场文书
Java比较两个对象中全部属性值是否相等的方法
2021/08/07 Java/Android
Spring中的使用@Async异步调用方法
2021/11/01 Java/Android
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang
python如何将mat文件转为png
2022/07/15 Python