wxPython之解決閃爍的問題
利用Python生成PDF文件時,對比了fpdf和reportlab兩個庫。fpdf最新更新還是2015年,
另外reportlab的資料網(wǎng)上更多一些。所以選擇使用reportlab。
pdfgen
pdfgen包是生成PDF文檔最底層的接口。一個pdfgen編程實質(zhì)是一系列將一個文檔繪制到連續(xù)頁面上的操作指南。提供繪制操作的接口對象是pdfgen canvas。
canvas應(yīng)該被認為一張白紙,上面的點用笛卡爾坐標來標記。默認頁面的左下角為原點(0,0),此外x軸向右,y軸向上。
示意圖如下:
繪制文本
首先演示一個繪制”hello world!”的PDF文件。
#引入所需要的基本包 from reportlab.pdfgen import canvas #設(shè)置繪畫開始的位置 def hello(c): c.drawString(100, 100, "hello world!") #定義要生成的pdf的名稱 c=canvas.Canvas("hello.pdf") #調(diào)用函數(shù)進行繪畫,并將canvas對象作為參數(shù)傳遞 hello(c) #showPage函數(shù):保存當前頁的canvas c.showPage() #save函數(shù):保存文件并關(guān)閉canvas c.save()
運行結(jié)果:
canvas.Canvas構(gòu)造函數(shù)
def __init__(self,filename, pagesize=(595.27,841.89), bottomup = 1, pageCompression=0, encoding=rl_config.defaultEncoding, verbosity=0 encrypt=None):
其中:
filename:PDF文件名
pagesize:兩個數(shù)字的元組。canvas頁面大小默認是A4(國際標準紙張大?。?,A4不同于美國標準紙張大小letter。大多數(shù)紙張大小在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操作流是否被壓縮。默認設(shè)為0,不壓縮。因為壓縮會減慢文件生成過程。如果每頁有大量文本和矢量圖形,設(shè)置pageCompression = 1來壓縮節(jié)省空間。
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')) #設(shè)置繪畫開始的位置 def hello(c): c.drawString(100, 100, "您好") #定義要生成的pdf的名稱 c=canvas.Canvas("hello.pdf") #設(shè)置字體 c.setFont("msyh", 8) #調(diào)用函數(shù)進行繪畫,并將canvas對象作為參數(shù)傳遞 hello(c) #showPage函數(shù):保存當前頁的canvas c.showPage() #save函數(shù):保存文件并關(guān)閉canvas c.save()
運行結(jié)果:
獲取文本寬度
利用canvas的stringWidth方法獲取文本寬度。
#引入所需要的基本包 from reportlab.pdfgen import canvas from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont pdfmetrics.registerFont(TTFont('msyh', 'Msyh.ttf')) #設(shè)置繪畫開始的位置 def hello(c): c.drawString(100, 100, "您好") width = c.stringWidth("您好") c.drawString(100, 120, "文本寬度:%f"%width) #定義要生成的pdf的名稱 c=canvas.Canvas("hello.pdf") #設(shè)置字體 c.setFont("msyh", 8) #調(diào)用函數(shù)進行繪畫,并將canvas對象作為參數(shù)傳遞 hello(c) #showPage函數(shù):保存當前頁的canvas c.showPage() #save函數(shù):保存文件并關(guān)閉canvas c.save()
運行結(jié)果:
以上這篇wxPython之解決閃爍的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于Django的Admin后臺實現(xiàn)定制簡單監(jiān)控頁
Django自帶的后臺管理是Django明顯特色之一,可以讓我們快速便捷管理數(shù)據(jù)。后臺管理可以在各個app的admin.py文件中進行控制。本文將主要介紹如何利用Admin后臺實現(xiàn)監(jiān)控頁的定制,快來和小編一起學(xué)習(xí)一下吧2021-12-12詳解Python如何巧妙實現(xiàn)數(shù)學(xué)階乘n!
一個正整數(shù)的階乘(factorial)是所有小于及等于該數(shù)的正整數(shù)的積,并且0的階乘為1。自然數(shù)n的階乘寫作n!,本文就給大家介紹如何使用python和第三方庫來實現(xiàn)數(shù)學(xué)運算中的階乘以及階乘累計求和2023-03-03Python GUI學(xué)習(xí)之登錄系統(tǒng)界面篇
這篇文章主要介紹了Python GUI學(xué)習(xí)之登錄系統(tǒng)界面篇,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08