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科学计算环境推荐——Anaconda
Jun 30 Python
Python中无限元素列表的实现方法
Aug 18 Python
详细介绍Python的鸭子类型
Sep 12 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
Oct 14 Python
pandas读取csv文件,分隔符参数sep的实例
Dec 12 Python
对python PLT中的image和skimage处理图片方法详解
Jan 10 Python
Python 函数绘图及函数图像微分与积分
Nov 20 Python
基于keras输出中间层结果的2种实现方式
Jan 24 Python
Eclipse配置python默认头过程图解
Apr 26 Python
Python selenium爬取微博数据代码实例
May 22 Python
python如何调用java类
Jul 05 Python
Python 数据可视化之Matplotlib详解
Nov 02 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
phpmail类发送邮件函数代码
2012/02/20 PHP
PHP递归返回值时出现的问题解决办法
2013/02/19 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
PHP简单创建压缩图的方法
2016/08/24 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
2017/06/21 PHP
js 表格隔行颜色
2009/12/02 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
jsp 网站引入外部css或者js失效问题解决
2016/10/31 Javascript
JS中微信小程序自定义底部弹出框
2016/12/22 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
vue里面使用mui的弹出日期选择插件实例
2018/09/16 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
nuxt 服务器渲染动态设置 title和seo关键字的操作
2020/11/05 Javascript
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
python用来获得图片exif信息的库实例分析
2015/03/16 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
python函数超时自动退出的实操方法
2020/12/28 Python
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
HEMA法国:荷兰原创设计
2019/02/21 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
驻村工作先进事迹
2014/08/14 职场文书
财务部岗位职责
2015/02/03 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
2019年大学推荐信
2019/06/24 职场文书
HTML基础详解(下)
2021/10/16 HTML / CSS
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL