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 相关文章推荐
Python2.x和3.x下maketrans与translate函数使用上的不同
Apr 13 Python
在Python中使用HTML模版的教程
Apr 29 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
python中数据爬虫requests库使用方法详解
Feb 11 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
django配置app中的静态文件步骤
Mar 27 Python
Python搭建Keras CNN模型破解网站验证码的实现
Apr 07 Python
理解Django 中Call Stack机制的小Demo
Sep 01 Python
python Yaml、Json、Dict之间的转化
Oct 19 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 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
新浪新闻小偷
2006/10/09 PHP
php实现的二分查找算法示例
2017/06/20 PHP
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
2016/02/24 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
在Python中操作字典之fromkeys()方法的使用
2015/05/21 Python
详解Python中heapq模块的用法
2016/06/28 Python
Python实现简易端口扫描器代码实例
2017/03/15 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
python实现猜单词小游戏
2020/05/22 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
pandas数据集的端到端处理
2019/02/18 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
python自动下载图片的方法示例
2020/03/25 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
html5时钟实现代码
2010/10/22 HTML / CSS
HTML5中的autofocus(自动聚焦)属性介绍
2014/04/23 HTML / CSS
HTML5 transform三维立方体实现360无死角三维旋转效果
2014/08/22 HTML / CSS
Java的接口和C++的虚类的相同和不同处
2014/03/27 面试题
土木工程师岗位职责
2013/11/24 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
物控部经理职务说明书
2014/02/25 职场文书
护理专业求职信
2014/06/15 职场文书
升职自我推荐信范文
2015/03/25 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
Mysql MVCC机制原理详解
2021/04/20 MySQL
MySQL transaction事务安全示例讲解
2022/06/21 MySQL