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

python的reportlab库介绍制作pdf和作图

  1 说明
  1.1 reportlab模块是用python语言生成pdf文件的模块,也可以作图。
  1.2 已经亲测,拿来就可以使用,适合收藏,万一自己需要就可以直接使用。
  1.3 环境:python3.8,deepin-linux深度操作系统和微软编辑器vscode。
  2 安装:pip install reportlab #pip3.8 install reportlab      #本机安装
  3 Helloworld.pdf代码:from reportlab.graphics.shapes import Drawing, String from reportlab.graphics import renderPDF #参数:Drawing(width=400, height=200, *nodes, **keywords) #宽和高,是一张pdf的大小,默认是400和200 d = Drawing(100, 100) #参数:String(x, y, text, **kw) #注意textAnchor="middle"时x值不能等于0,否则只能显示world了。 #s = String(50, 90, "Hello, world!", textAnchor="middle")  #注意特色,左下角坐标是0,0,采用默认字体和大小 s = String(0, 90, "Hello, world!")  d.add(s) #生成pdf的路径和文件名 renderPDF.drawToFile(d, "/home/xgj/Desktop/reportlab/helloworld.pdf")
  4 中文设置123.pdf
  代码:#引入所需要的基本包 from reportlab.pdfgen import canvas from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont #自己下载字体放在指定目录,hwfs=华文仿宋 pdfmetrics.registerFont(TTFont("hwfs", "/home/xgj/Desktop/reportlab/hwfs.ttf")) #生成123的pdf文件和指定目录 c=canvas.Canvas("/home/xgj/Desktop/reportlab/123.pdf") #导入字体和大小色孩子 c.setFont("hwfs", 20) message= "Hello,你好,欢迎学习reportlab制作pdf!" #注意下面坐标x和y,当(0,0)是代表左下角 #一张pdf的高800,所以第一行800,再大就出 c.drawString(50,800,message) c.showPage() c.save()
  5 柱状图bar.py代码from reportlab.graphics.charts.barcharts import VerticalBarChart from reportlab.lib.colors import HexColor from reportlab.platypus import SimpleDocTemplate from reportlab.graphics.shapes import Drawing, Rect from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.charts.piecharts import Pie #定义作图 def autoLegender( chart,title=""):     width = 448     height = 230     d = Drawing(width,height)     lab = Label()     lab.x = 220  #x和y是文字的位置坐标     lab.y = 210     lab.setText(title)     lab.fontSize = 20     d.add(lab)     d.background = Rect(0,0,width,height,strokeWidth=1,strokeColor="#868686",fillColor=None) #边框颜色     d.add(chart)     return d  def draw_bar_chart(min, max, x_list, data=[()], x_label_angle=0, bar_color=HexColor("#7BB8E7"), height=125, width=280):     bc = VerticalBarChart()     bc.x = 50            # x和y是柱状图在框中的坐标     bc.y = 50     bc.height = height  # 柱状图的高度     bc.width = width    # 柱状图的宽度     bc.data = data           for j in range(len(x_list)):         setattr(bc.bars[j], "fillColor", bar_color)     # 调整step     minv = min * 0.5     maxv = max * 1.5     maxAxis = int(height/10)     # 向上取整     minStep = int((maxv-minv+maxAxis-1)/maxAxis)      bc.valueAxis.valueMin = min * 0.5      #设置y轴的最小值     bc.valueAxis.valueMax = max * 1.5      #设置y轴的最大值     bc.valueAxis.valueStep = (max-min)/4   #设置y轴的最小度量单位     if bc.valueAxis.valueStep < minStep:         bc.valueAxis.valueStep = minStep     if bc.valueAxis.valueStep == 0:         bc.valueAxis.valueStep = 1     bc.categoryAxis.labels.boxAnchor = "ne"   # x轴下方标签坐标的开口方向     bc.categoryAxis.labels.dx = -5           # x和y是x轴下方的标签距离x轴远近的坐标     bc.categoryAxis.labels.dy = -5     bc.categoryAxis.labels.angle = x_label_angle   # x轴上描述文字的倾斜角度     x_real_list = []     if len(x_list) > 10:         for i in range(len(x_list)):             tmp = "" if i%5 != 0 else x_list[i]             x_real_list.append(tmp)     else:         x_real_list = x_list     bc.categoryAxis.categoryNames = x_real_list     return bc #画图 z = autoLegender(draw_bar_chart(100, 300, ["a", "b", "c"], [(100, 200, 120)])) #保存路径和文件 pdf=SimpleDocTemplate("/home/xgj/Desktop/reportlab/bar.pdf") #构建 pdf.multiBuild([z])
  6 折线图line.py代码#---导出模块--- #导出追踪模块,python的一个知识点 import traceback #导出作图的相关模块 from reportlab.graphics.shapes import Drawing from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.charts.textlabels import Label from reportlab.graphics import renderPDF from reportlab.graphics.widgets.markers import makeMarker #---附加:导出字体设置模块,如果是英文,就不需要 from reportlab.pdfbase import pdfmetrics, ttfonts #若需要显示中文,需要先注册一个中文字体,hwfs自己下载,这个是根目录下,也可以指定位置 pdfmetrics.registerFont(ttfonts.TTFont("hwfs", "hwfs.ttf")) #---注意data的类型 #每一个数据点是一个元组 #一条曲线对应一个存储数据点元组的元组 #一个图形可以包含多条曲线,用列表存储曲线元组 data=[((1,100),(2,200),(3,300),(4,400),(5,500)),       ((1,50),(2,80),(3,400),(4,40),(5,70))] #定义画布大小 drawing = Drawing(500, 300) #划线设置 lp = LinePlot() lp.x = 50 #坐标轴中心坐标 lp.y = 30 #这个作图的大小与画布大小稍微小一点 lp.height = 250 lp.width = 400 lp.data = data lp.joinedLines = 1 lp.lines.symbol = makeMarker("FilledCircle") #刻度设置 lp.xValueAxis.valueMin = 1 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueStep = 1 #刻度设置 lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 500 lp.yValueAxis.valueStep = 100 drawing.add(lp) #---文字标签设置: # 标题 title = Label() title.fontName   = "hwfs" title.fontSize   = 12 title_text="折线图" title._text = title_text title.x          = 250 title.y          = 280 title.textAnchor ="middle" drawing.add(title) #标签x的显示 Xlabel = Label() Xlabel._text = "x坐标轴" Xlabel.fontSize   = 12 Xlabel.x          = 480 Xlabel.y          = 30 Xlabel.fontName   = "hwfs" Xlabel.textAnchor ="middle" drawing.add(Xlabel) #标签y的显示 Ylabel = Label() Ylabel._text = "y坐标轴" Ylabel.fontSize   = 12 Ylabel.x          = 40 Ylabel.y          = 295 Ylabel.fontName   = "hwfs" Ylabel.textAnchor ="middle" drawing.add(Ylabel)       try:     #保存格式gif,文件名:abc;路径当前目录,这个归功于import traceback,所以outdir的设置就是当前位置      drawing.save(formats=["gif"],outDir=".",fnRoot="abc") except:      traceback.print_exc()
  7 饼图pie.py代码from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate from reportlab.graphics.shapes import Drawing, Rect from reportlab.graphics.charts.textlabels import Label from reportlab.graphics.charts.piecharts import Pie from reportlab.lib.colors import HexColor  def autoLegender(chart,title=""):     width = 448     height = 230     d = Drawing(width,height)     lab = Label()     lab.x = 220  #x和y是文字的位置坐标     lab.y = 210     lab.setText(title)     lab.fontSize = 20     d.add(lab)     #边框颜色和填充颜色     d.background = Rect(0,0,width,height,strokeWidth=1,strokeColor="#45b97c",fillColor="#78cdd1")      d.add(chart)     return d  def draw_pie(data=[], labels=[], use_colors=[], width=360,):     pie = Pie()     pie.x = 60 # x,y饼图在框中的坐标     pie.y = 20     pie.slices.label_boxStrokeColor = colors.white  #标签边框的颜色      pie.data = data      # 饼图上的数据     pie.labels = labels  # 数据的标签     pie.simpleLabels = 0 # 0 标签在标注线的右侧;1 在线上边     pie.sameRadii = 1    # 0 饼图是椭圆;1 饼图是圆形      pie.slices.strokeColor = colors.red       # 圆饼的边界颜色     pie.strokeWidth=1                         # 圆饼周围空白区域的宽度     pie.strokeColor= colors.white             # 整体饼图边界的颜色     pie.slices.label_pointer_piePad = 10       # 圆饼和标签的距离     pie.slices.label_pointer_edgePad = 25    # 标签和外边框的距离     pie.width = width     pie.direction = "clockwise"     pie.pointerLabelMode  = "LeftRight"     for i, col in enumerate(use_colors):          pie.slices[i].fillColor  = col     return pie  #数据和颜色定义,对应关系 data = [10,9,8,7,6,5,4,3,2,1] labs = ["dog","pig","cat","bird","mouse",         "fish","cow","sheep","horse","fly"]  color = [HexColor("#f47920"),HexColor("#ef5b9c"),HexColor("#b2d235"),          HexColor("#181d4b"),HexColor("#f58220"),HexColor("#7fb80e"),          HexColor("#585eaa"),HexColor("#1d953f"),HexColor("#ef4136"),          HexColor("#483D8B")          ]  z = autoLegender(draw_pie(data,labs,color)) pdf=SimpleDocTemplate("/home/xgj/Desktop/reportlab/pie.pdf") pdf.multiBuild([z])
  8 段落式中英文parahello.py代码from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus import Paragraph,SimpleDocTemplate from reportlab.lib import  colors #导入中文字体设置模块 from reportlab.pdfbase import pdfmetrics, ttfonts #若需要显示中文,需要先注册一个中文字体 pdfmetrics.registerFont(ttfonts.TTFont("hwfs", "/home/xgj/Desktop/reportlab/hwfs.ttf"))  Style=getSampleStyleSheet()  bt = Style["Normal"]  #字体的样式 bt.fontName="hwfs"    #使用的字体 bt.fontSize=14        #字号大小设置 bt.wordWrap = "CJK"    #该属性支持自动换行,"CJK"是中文模式换行,用于英文中会截断单词造成阅读困难,可改为"Normal" bt.firstLineIndent = 1  #该属性支持第一行开头空格,注意如果设置bt.alignment=1  #居中,那么这个设置就是多余 bt.leading = 20             #该属性是设置行距,注意与字体大小的关系,一般偏大一点,否则挤在一行              #bt.alignment=1  #居中 bt.textColor = colors.red  t = Paragraph("Hello,你好,欢迎光临,我是reportlab;Hello,你好,欢迎光临,我是reportlab;Hello,你好,欢迎光临,我是reportlab",bt) pdf=SimpleDocTemplate("/home/xgj/Desktop/reportlab/parahello.pdf") pdf.multiBuild([t])
  自己整理,分享出来,希望喜欢,重点在制作pdf,不在作图,但是如果有文字,有表格,有作图,那么肯定是有优势的。
  ==========未完待续==========
  下次有空介绍高级的。

睡前绘本海尼曼AntCanampamp39t(有音频哦)Jennifer为了更好的服务于各位宝妈们,从今天开始,我们一起读分级绘本。我给大家指定了学习计划,每天提供绘本和音频资料,大家抱团学习,更有动力!这次我给大家选择的是海尼曼分级阅睡前绘本海尼曼TheVeryBusyHen(有音频哦)Jennifer为了更好的服务于各位宝妈们,从今天开始,我们一起读分级绘本。我给大家指定了学习计划,每天提供绘本和音频资料,大家抱团学习,更有动力!这次我给大家选择的是海尼曼分级阅海尼曼绘本阅读第46本,FightingFires海尼曼G2系列总共101本,今天这期42系列第50本,一大半已经带领大家看完了。从60开始,海尼曼绘本的难度逐步提升了,前面基础没打牢的朋友,后面很难每一本都读得懂了,单词量很大,超详细RAZ牛津树分级阅读执行攻略,比上2万元培训班更有效Jennifer亲子英语海尼曼RAZ红火箭等这些分级读物,想必妈妈们应该不陌生了,面对分级阅读,妈妈们最大的困扰除了到底买哪个外,还有一个未来一定要面的问题,分级阅读到底该怎么刷?不花钱!巧读绘本开发孩子想象力,利用寒假悄悄变聪明私信进圈今天分享的绘本阅读主题,不仅适用于英文绘本,也适合中文绘本哦。建议收藏,时常拿出来温习!绘本,这几年非常的流行,家长应该不陌生了,事实上低幼儿的黑白卡玩具书洗澡书都不叫绘本英语启蒙1年,孩子迟迟不肯开口说,无外乎这3大原因后台收到一位妈妈的留言,说宝宝现在3岁半,正式英语启蒙半年多了,小时候给他听儿歌,后来加入了绘本,目前在读大猫分级,现在简单的日常生活对话基本能听得懂,为什么就是不爱开口说呢?还有普通父母和牛爸牛妈的区别竟然这么大!9张图告诉你差距在哪里教育孩子,就像是一场闯关游戏。一个又一个教育难题关卡迎来,每一次选择都要极其慎重,因为很有可能直接改变孩子的未来!下面这九个教育孩子的关卡,你都选对了吗?01hr你能看到孩子哪些特坐在教室里的黄金座位成绩就好?教室里真正的学霸区在这里在很多家长眼里,孩子要想书读得好,光有好高中好老师好同学还不够,还得有个好座位!每年新学期,排座位都是家长比较关心的问题,部分家长认为孩子成绩的好坏和座位有很大关系,所以让孩子在教孩子爱打人,是有暴力倾向吗?最近经常有家长向闻达君吐槽,我家孩子为什么总喜欢打人,吃零食时玩玩具时看书时玩游戏时,甚至在公共场所溜滑梯或荡秋千时,都会轻易地和其他小朋友发生摩擦。一言不合就打人,为什么孩子打人家长速看!你还在用不要和陌生人说话糊弄孩子的安全教育吗?在许多幼儿安全教育案例中,我们都会看到这样一个试验记者假扮人贩子,利用棒棒糖零食去诱惑幼儿园的孩子。在其中一次试验中,21个孩子有20个中招,直接跟着陌生人走了。这个试验最终引出来孩子寒假玩疯了?这份收心计划家长请收好寒假已经过半,孩子们假期学习得怎么样了呢?几天后马上就是一年一度的春节了,又是孩子们撒欢玩耍的时候了,但春节后紧接着的又是所剩不多的假期时间了,许多家长开始担心,这学习的心一放出去
作业真的这么多?孩子每晚12点以后才睡觉,看完才知真相竟是这样经常听到邻居说要盯着自己女儿写作业,我说为什么要盯着呢?她说如果不盯着就不老实写,特别磨叽,能写到十二点,有时候如果不看着她写自己能写睡着了。听后我说作业那么多么?邻居说并不算多,温暖的拥抱昨天当两岁三个月的孩子和妈妈一起去外婆家的前,他走进书房,他说来跟爸爸抱一下。我听到这个话内心是很开心的,还有欣慰和温暖。我欣赏孩子的积极阳光,热情主动,感恩知敬一个两岁三个月的孩给孩子独立自主的机会今天陪2岁3个月孩子在院子里玩,我们要去提一壶水去浇灌泡沫箱里面的葱和辣椒,我问孩子说你愿意提这个水壶吗?孩子就把我的水壶拿过去,边走着边玩,不舍得把水壶放下来。感受到了孩子很开心强制隔离戒毒日期应折抵刑期2008年6月1日起施行的中华人民共和国禁毒法(以下简称禁毒法)将以前的强制戒毒和劳教戒毒合并为强制隔离戒毒,所谓强制隔离戒毒,就是将吸毒成瘾人员限制在一个封闭的区域内,对其实施强太可爱!胎宝宝在肚子里居然还能做这些,看完都忍不住要生二胎了怀胎十月,肚子里的小家伙一天天在长大,最让孕妈高兴的是有了胎动,孕妈每天都会在想肚子里的娃是睡着了还是在玩耍,又或者是在偷听妈妈讲话!宝宝没出生之前,妈妈只能通过胎动来感受他的存在2021年第二次征兵即将开始,报名条件有改变,身高成为新标准一人当兵,全家光荣,或许每个大学生心中都有一个军人梦,希望有机会能够参军入伍保家卫国,可以为国家贡献自己的力量。想要参军的学生可以通过报考军校来实现自己的梦想,学生如果可以考上一个2022年考研迎来新变化,统考已成大势所趋,考生上岸难度减小近几年,越来越多的大学生在毕业的时候选择考研,一方面是因为就业困境,另一方面是出于对知识的追求,据了解,21年年考研人数大377万,而2022年的人数极有可能突破四百万。从考研庞大九年义务教育或将改成54,9月1日开始实施?教育部做出回应九年义务教育,听到这几个字相信大家都不陌生,小学六年再加上初中三年刚好是我国实行的9年义务教育。大家可别小看了,这九年义务教育。不仅教给学生科学的文化知识和做人的道理,还关乎着学生小学生脑回路清奇,0分作文气坏老师,网友被耽误的段子手现在的小学生什么都懂,个个精明,平时在学校读的是圣贤书,出来校门外课外知识补得也不少,怪不得人们都说这是一个信息爆炸的时代,从小学生的作文就能看出来。很多小学生经常能写出来让人看后985农村学霸的苦涩,毕业后北上广难留,老家没脸回在同学们参加高考的时候,父母都会希望自己的儿子或者女儿考一个高一点的分数,分数越高,在填报学校的时候就会有很多选择权。我国是一个重视教育的国家,有高校近3000所,其中有39所98今年高考提前批次招生,为何军校普遍遇冷,报考热度不如警校每年高考季,各省的成绩以及录取分数线都备受人们的关注。相信现在大部分学生都已经填报好志愿,甚至部分提前批的考生已经收到了心仪院校的录取通知书。众所周知,每年高考录取通知书都会按照一