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中decorator使用实例
Apr 14 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
python 按不同维度求和,最值,均值的实例
Jun 28 Python
对Python3.x版本print函数左右对齐详解
Dec 22 Python
python如何解析配置文件并应用到项目中
Jun 27 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
基于Python实现剪切板实时监控方法解析
Sep 11 Python
Flask中endpoint的理解(小结)
Dec 11 Python
Python如何执行系统命令
Sep 23 Python
python3中确保枚举值代码分析
Dec 02 Python
python 实现体质指数BMI计算
May 26 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
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
javascript开发随笔二 动态加载js和文件
2011/11/25 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
jQuery中可见性过滤器简单用法示例
2018/03/31 jQuery
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
mpvue实现微信小程序快递单号查询代码
2020/04/03 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
Python的多维空数组赋值方法
2018/04/13 Python
pandas 数据索引与选取的实现方法
2019/06/21 Python
Python叠加两幅栅格图像的实现方法
2019/07/05 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
2020/05/26 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
伦敦高级内衣品牌:Agent Provocateur(大内密探)
2016/08/23 全球购物
Giglio美国站:意大利奢侈品购物网
2018/02/10 全球购物
具有防紫外线功能的高性能钓鱼服装:Hook&Tackle
2018/08/16 全球购物
《乌塔》教学反思
2014/02/17 职场文书
作文批改评语大全
2014/04/23 职场文书
数字化校园建设方案
2014/05/03 职场文书
关于保护环境的建议书
2014/05/13 职场文书
国庆节活动总结
2014/08/26 职场文书
法人代表证明书格式
2014/10/01 职场文书
大学生村官入党自传
2015/06/26 职场文书
MATLAB 如何求取离散点的曲率最大值
2021/04/16 Python