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 28 Python
使用Python发送各种形式的邮件的方法汇总
Nov 09 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
Python 删除连续出现的指定字符的实例
Jun 29 Python
python爬虫获取百度首页内容教学
Dec 23 Python
Python进程间通信Queue消息队列用法分析
May 22 Python
Mac安装python3的方法步骤
Aug 09 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
Python通过文本和图片生成词云图
May 21 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
Jul 01 Python
Python基础之条件语句详解
Jun 16 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,ajax实现分页
2008/03/27 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
Jquery中使用setInterval和setTimeout的方法
2013/04/08 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
微信小程序WebSocket实现聊天对话功能
2018/07/06 Javascript
ES6模板字符串和标签模板的应用实例分析
2019/06/25 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
Python合并多个装饰器小技巧
2015/04/28 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
python构建基础的爬虫教学
2018/12/23 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
python脚本第一行如何写
2020/08/30 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
德国网上宠物店:Zoobio
2018/05/23 全球购物
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
美国主要的特色咖啡和茶公司:Peet’s Coffee
2020/02/14 全球购物
临床医学大学生求职信
2013/09/28 职场文书
党委书记岗位职责
2013/11/24 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
企业宣传标语
2014/06/09 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
python如何正确使用yield
2021/05/21 Python
python lambda 表达式形式分析
2022/04/03 Python
Win11查看设备管理器
2022/04/19 数码科技
springboot实现string转json json里面带数组
2022/06/16 Java/Android
MySQL添加索引特点及优化问题
2022/07/23 MySQL
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers