范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

reportlab高级制作多格式PDF和python的class和装饰器复习

  1 说明
  1.1 reportlab高级制作多格式PDF:即包含文字、表格、柱状图。
  1.2 复习python的class和装饰器的高级基础知识。
  1.3 列表转换字符串、读取txt文件等python基础知识。
  1.4 经典,通俗易懂,适合收藏和转发。
  2 reportlab高级制作多格式PDF
  2.1 代码#---导入模块---有点多,且繁琐,可以优化--- from reportlab.platypus import Table, SimpleDocTemplate, Paragraph from reportlab.lib.pagesizes import letter from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib import colors from reportlab.graphics.charts.barcharts import VerticalBarChart from reportlab.graphics.charts.legends import Legend from reportlab.graphics.shapes import Drawing #---导入中文字体模块和注册--- from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont #hwfs是hwfs字体,自己下载,放在根目录下 pdfmetrics.registerFont(TTFont("hwfs", "hwfs.ttf")) #---定义类--- class Graphs:     def __init__(self):         pass     # 装饰器:绘制标题     @staticmethod     def draw_title():         style = getSampleStyleSheet()         #格式         ct = style["Normal"]         #字体名,上面已经注册过的         ct.fontName = "hwfs"         #字体大小         ct.fontSize = 18         # 设置行距         ct.leading = 50         # 颜色         ct.textColor = colors.green         # 居中         ct.alignment = 1         # 添加标题并居         title = Paragraph("reportlab高级制作PDF", ct)         return title     # 绘制内容     @staticmethod     def draw_text():         style = getSampleStyleSheet()         # 常规字体(非粗体或斜体)         ct = style["Normal"]         # 使用的字体s         ct.fontName = "hwfs"         ct.fontSize = 14         # 设置自动换行         ct.wordWrap = "CJK"         # 居左对齐         ct.alignment = 0         # 第一行开头空格         ct.firstLineIndent = 32         # 设置行距         ct.leading = 30         #格式:Paragraph(text, style, bulletText=None, frags=None, caseSensitive=1, encoding="utf8")         #注意文件目录和文件内容,调用外部txt文件内容         with open("/home/xgj/Desktop/reportlab/2.txt","r") as f:             #读取全部,返回一个列表             text2 = f.readlines()             #列表转换为字符串,返回是一大串字符串,如果文字较多而且有分段落的,可能就不适合。             text1 = "".join(text2)             #print(text1)         text=Paragraph(text1,ct)         return text     # 绘制表格     @staticmethod     def draw_table(*args):         #宽度         col_width = 60         #表格样式设置         style = [             ("FONTNAME", (0, 0), (-1, -1), "hwfs"),# 字体             ("BACKGROUND", (0, 0), (-1, 0), "#d5dae6"),# 设置第一行背景颜色             ("ALIGN", (0, 0), (-1, -1), "CENTER"),# 对齐             ("VALIGN", (-1, 0), (-2, 0), "MIDDLE"),# 对齐             ("GRID", (0, 0), (-1, -1), 0.5, colors.grey),# 设置表格框线为grey色,线宽为0.5             ]         table = Table(args, colWidths=col_width, style=style)         return table     # 创建图表     @staticmethod     def draw_bar(bar_data=[], ax=[], items=[]):         #画布大小         drawing = Drawing(500, 250)         bc = VerticalBarChart()         bc.x = 35         bc.y = 100         bc.height = 120         bc.width = 350         bc.data = bar_data         bc.strokeColor = colors.black         bc.valueAxis.valueMin = 0         bc.valueAxis.valueMax = 100         bc.valueAxis.valueStep = 10         bc.categoryAxis.labels.dx = 8         bc.categoryAxis.labels.dy = -10         bc.categoryAxis.labels.angle = 20         bc.categoryAxis.categoryNames = ax         # 图示         leg = Legend()         leg.fontName = "hwfs"         leg.alignment = "right"         leg.boxAnchor = "ne"         leg.x = 465         leg.y = 220         leg.dxTextSpace = 10         leg.columnMaximum = 3         leg.colorNamePairs = items         drawing.add(leg)         drawing.add(bc)         return drawing  if __name__ == "__main__":     #生成的pdf的内容     #content = list()     content=[]     # 第一:文章的标题     content.append(Graphs.draw_title())     # 第二:添加文章的文字段落     content.append(Graphs.draw_text())     # 第三:表格:     # 表格数据     data = [     ("项目", "2019-11", "2019-12", "2020-1", "2020-2", "2020-3", "2020-4"),     ("python", 50, 80, 60, 35, 40, 45),     ("JavaScript", 25, 60, 55, 45, 60, 80),     ("c++", 30, 90, 75, 80, 50, 46)]     #添加表格     content.append(Graphs.draw_table(*data))     # 第四:图表     #图标的数据     b_data = [         (50, 80, 60, 35, 40, 45),          (25, 60, 55, 45, 60, 80),          (30, 90, 75, 80, 50, 46)         ]     ax_data = ["2019-11", "2019-12", "2020-1", "2020-2", "2020-3", "2020-4"]     leg_items = [(colors.red, "python"), (colors.green, "JavaScript"), (colors.blue, "c++")]     # 附加:添加文章的文字段落     #content.append(Graphs.draw_text())     #添加图标柱状图     content.append(Graphs.draw_bar(b_data, ax_data, leg_items))     # 生成pdf文件     newpdf = SimpleDocTemplate("/home/xgj/Desktop/reportlab/report.pdf", pagesize=letter)     newpdf.build(content)
  2.2 图
  3 python的class类:
  3.1 python的面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用。
  类是一个模板,模板中包装了多个"函数"供使用。
  对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数。
  面向对象三大特性:封装、继承和多态。
  3.2 Python 3.x中取消了经典类,默认都是新式类。
  新式类的语法 -> class 类名(object): pass
  3.3 通过例子来讲解新式类的语法
  代码:#方法一 #定义person这个类 #class person(object):  #与下面相同作用,也就是object这个对象就是下面的内容 class person():      #定义speak函数     def speak(self):  #person对象调用了speak函数的这个方法,self就是那个对象;可以把self理解为一个形参         print("%s 说:我今年%s岁" % (self.name, self.age))   #类person 实例化一个对象chaxun chaxun = person() # 给对象查询chaxun添加属性,用‘点’ chaxun.name = "李白" chaxun.age = 1000 # 调用类中的 speak()方法 chaxun.speak()#方法二 #class person(object): #与下面相同 class person():       # 定义构造方法     #__init__() 是类的初始化方法;它在类的实例化操作后 会自动调用,不需要手动调用     def __init__(self, n, a):           # 设置属性         self.name = n         self.age = a     # 定义普通方法     def speak(self):         print("%s 说:我今年%s岁" % (self.name, self.age))  #类person 实例化一个对象chaxun chaxun = person("李白",1000)  # 调用类中的 speak()方法 chaxun.speak()
  # 在python中使用__开头 并以__结尾的方法,称之为魔法方法;
  # __init__(self) 是类的初始化方法,也称构造方法,是一种特殊的魔法方法。
  # __init__(self)在实例化后,会自动调用,而不用手动调用,所以一般把属性设置在_init__()里。
  # 常用到的魔法方法还有:__str__(self) 、 __del__(self)等。
  ============
  4 python3的装饰器:
  4.1 理解装饰器的前提:
  4.1.1 所有东西都是对象(函数可以当做对象传递)
  4.1.2.闭包
  4.2 闭包的概念:
  1)函数嵌套
  2)内部函数使用外部函数的变量
  3)外部函数的返回值为内部函数
  4.3 使用装饰器的缺点:
  4.3.1.位置错误的代码->不要在装饰器之外添加逻辑功能
  4.3.2.不能装饰@staticmethod (第一个代码中使用)或者 @classmethod已经装饰过的方法
  4.3.3.装饰器会对原函数的元信息进行更改,比如函数的docstring,__name__,参数列表。
  装饰器需要实例讲解更清楚,暂时到这里,喜欢的收藏和转发,自己整理,分享出来。
  =========未完待续==========

当下的100万现金,闲置20年会贬值吗?很多人都没想到如何抵御通货膨胀,成了当下人们最关注的热点之一。几十年前,万元户是富豪,但到了当前社会,也不过是高收入者一个月的工资。这就是通货膨胀在作祟,无形中偷走了人们的财产。有一百万存在银行负债超90亿的雨润集团,重整投资人资产门槛为1万亿据中国经营网报道,雨润食品已经宣布破产重整,如今工作也在一步步落实。雨润控股集团旗下需要破产重整的企业从早期的7家已经变成了现在的122家,包括江苏雨润肉类集团等77家公司,以及安唯品会卷入假货风波,市值蒸发88亿,特卖模式还靠谱吗最近一段时间,网络上一直流传着唯品会的假货风波,唯品会的股市价格也因这样的风波下降了6。32,蒸发88亿人民币。不仅如此,一直处于收益逐渐放缓的唯品会,其收益增速也远远低于同类其他房价最低的十大城市出炉,东北占了一半,地方每平方米只要2000元近年来,我国国民的生活水平越来越高了,基本的吃饱穿暖也不用愁了,但这时候,又一个问题难倒了众人。随着楼市泡沫的出现,买房成为了很多家庭需要面临的一道坎,不管是老一辈还是年轻一辈,买大乐透再现天选之子?一人独揽6300万,彩民们却发现了不对劲根据澎湃新闻报道,福建省内有一民众花27元购买体彩大乐透,结果独揽6300万元。根据数据显示,3注追加投注一等奖均分布在泉州地区,中奖是一张3倍投的3注式单式追加票,打破泉州记录。住建部划出两道红线,高层楼房成为目标,未来卖不掉拆不了千禧年后,我国城镇化发展突飞猛进。原先的低矮楼房逐渐被淘汰,现在全部是拔地而起的高楼大厦,甚至不少城市还有高达百层的地标性建筑。相关数据显示,截至2012年底,我国已经成为了拥有高没有工作证明,就办不了银行卡?近年来,由于移动支付的普及,人们完全可以足不出户,使用第三方支付软件购买心仪的物品。随着人们减少了去银行办理业务的频率,银行也因此少了不少业务。人们不用为一些日常的生活费去银行取现又一银行躺赚业务被取消,央行定调,储户们可要留意了虽然人们的支付方式有很多种,但基本的交易平台实质上还是银行,因此哪怕是互联网平台上的一些躺赚方式,其实大多还是做银行的文章。然而,就在这样的基础上,我国金融管理力度开始加强,原本的中介行业内幕被揭穿,两头赚钱还合法,很多人给他们送过钱在很多时候,我们在进行购买商品找房子找工作等社会活动时,并非点对点直接和目标进行接触,而是需要一个中间媒介为我们传递所需要的信息。通常情况下,我们管找房子找工作的媒介叫中介。对于那车主们需留意,油价迎来新一轮涨幅,多地已步入7元时代我国经济发展带来的直接效果就是私家车拥有率暴增,很多小区住户家中多少都有一辆自己的小车,不过这波风气过去之后很多人都不得不面临一个非常现实的问题,那就是油价该怎么办?油价新一轮涨幅网吧行业陷入困境,一年倒闭1。2万家,转型后仍生意清淡据齐鲁晚报报道,调查显示,我国网吧行业陷入了困境,截至今年2月,网吧总数量只剩下124,818家,一年内倒闭了1。2万家。大规模的网吧倒闭也引起了经济学人士的关注。要知道,网吧的兴
当孩子用哭闹要挟你,这句话,比吼他100句都管用哭闹是孩子来到这个世界上学会的第一种表达情绪的方式,当孩子哭闹时,父母对孩子的态度以及处理方法是相当重要的。错误的处理方法不仅不利于孩子的健康成长,反而会伤害亲子之间的感情,让亲子深夜12点,六年级女儿偷看情色片,妈妈的做法太机智了孩子小升初,压力也是越来越大,都深夜12点了,房间灯还亮着。我看到心疼,想顺便提醒她还是要注意睡眠,不要熬夜学习。我轻轻地敲了一下房门,哐的一声,什么东西掉了似的,我立马推门进去,经常发脾气的父母,将收获一个什么样的孩子?我们做父母的与其抱怨孩子身上有这样那样的小毛病,不如换一个角度,看看自己在成长中缺失了哪些,积极作出改变,不让遗憾再传递下去。01hr父母对孩子的教育,首先在于身教从前有个脾气很坏教育孩子,拼的就是父母!做到这四点,孩子就赢了一半忙碌的工作经常会使父母疏于孩子的家庭教育,很多父母也知道这样带来的危害,但仍然用一句话我工作忙呀来躲避这个问题!所以,如何利用碎片时间来教育孩子就变成了现代家庭需要考虑的问题。忙碌过于真实!儿子和女儿的区别,我哭着盘点完好真实的二胎家庭实录,不过为啥我家的完全相反呢?儿子是贴心小棉袄,女儿是皮夹克怎么回事?我们五一回老家,土豆舅舅全程的态度就是对土豆,崩溃地切入自闭模式你出去,不要跟我讲话!转向番孩子有小偷小摸的坏毛病,三个小妙招,引导孩子养成好习惯孩子有小偷小摸的坏毛病,三个小妙招,引导孩子养成好习惯很多孩子都有小偷小摸的坏毛病,经常跟着父母走进商店或超市时,趁着父母不注意的时间,就会手上偷偷拿着一些商品。这时被店员发现了,当孩子说妈妈,我不想学了,你的回答可能改变孩子一生01hr我不懂事,你们也不懂事吗?一天孩子我不想学跳舞了?父母为什么?孩子跳舞太累了,每天都要练基本功,我想学唱歌。父母好,那是你喜欢的。一个月后孩子我不想学唱歌了。父母怎么了?孩爸爸和儿子的幽默对话!佩服!值得存五十年一则儿两岁。某日,头撞桌角,长一包,大哭。一分钟余,我走向桌子,大声问桌子呀,是谁把你撞疼了?哭得这么伤心?儿止哭,泪眼看我。我抚桌,冲儿问谁呀?谁撞疼了桌子?我,爸爸,我撞的!哦当孩子问妈妈,我可以不去上学吗?4句回答,你一定听说过妈妈,我可以不去上学吗?如果有一天,你的孩子小心翼翼地问你,你会作何回应?是假装没听见无视他还是大声地呵斥责骂他?有一位妈妈的做法,暖心而又奏效。这位妈妈柔声问宝贝,你不想上学吗?最好的家庭教育父母越上进,孩子越优秀新学期,一部名为出路的旧纪录片又火了。导演用6年跟拍了3个不同阶层的孩子,结果发现,阶层越低的孩子,越在苦苦挣扎。但他们的大多挣扎都毫无意义,因为父母有可能会断了他们的前途。一个叫三孩生育开放了?微信群沸腾了,我已笑趴,你还生气么?5月31日我国出台了三孩生育政策,政策一出立刻引发全网热议。图片来源新华社看了一圈了评论,现在的网友表示不是不想生,而是生不起。作为到了谈婚论嫁,生儿育女的主力军90后,他们其中大