设为首页 收藏本站
查看: 774|回复: 0

[经验分享] 使用Python生成pdf文件

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-7-24 09:09:45 | 显示全部楼层 |阅读模式
Python平台的优秀PDF报表类库Reportlab。它不属于Python的标准类库,所以必须手动下载类库包并安装:  
    yum install python-reportlab -y
    这篇文章将介绍reportlab中基本常用的api,使用canvas画出一份整洁的PDF报表。详细内容参考reportlab的官方user guide。

示例一、生成一段文字
   
#!/usr/bin/python
from reportlab.pdfgen import canvas
def hello():
    c = canvas.Canvas("helloworld.pdf")
    c.drawString(100,100,"Hello,World")
    c.showPage()
    c.save()
hello()


示例二、生成单个文件的pdf


   
#需要安装字体 yum install wqy-* -y
#!/usr/bin/python
import datetime
import subprocess
import codecs
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch
from reportlab.lib.pagesizes import A4, landscape
import reportlab.pdfbase.ttfonts  
reportlab.pdfbase.pdfmetrics.registerFont(reportlab.pdfbase.ttfonts.TTFont('song', '/usr/share/fonts/cn/msjh.ttf'))  
import reportlab.lib.fonts  
def disk1_report():
p1 = subprocess.Popen("cat cmd1.log ",shell=True,stdout=subprocess.PIPE)
return p1.stdout.readlines()
def create_pdf(input,output="disk1.pdf"):
now = datetime.datetime.today()
date = now.strftime("%h %d %Y %H:%M:%S")
c = canvas.Canvas(output,pagesize=A4)
c.setFont('song',10)
textobject = c.beginText()
textobject.setTextOrigin(1*inch,11*inch)
textobject.textLines('''Disk Capacity Report: %s ''' % date )
for line in input:
  textobject.textLine(line.strip())
c.drawText(textobject)
c.showPage()
c.save()
report = disk1_report()
create_pdf(report)

示例三、循环生成指定目录下的多个文件()

   
#!/usr/bin/python
import os
import os.path
import datetime
import subprocess
from reportlab.lib.pagesizes import A4, landscape
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch
logdir = "/var/www/device/check_log"
for root,dirs,filenames in os.walk(logdir):
  for filename in filenames:
    v = root+os.sep+filename
    os.environ['file'] = str(v)
    def disk_report():
      p = subprocess.Popen("cat $file ",shell=True,stdout=subprocess.PIPE)
      return p.stdout.readlines()
    def create_pdf(input,output="/var/www/device/check_pdf/"+filename+".pdf"):
     now = datetime.datetime.today()
     date = now.strftime("%h %d %Y %H:%M:%S")
     c = canvas.Canvas(output,pagesize=A4)
     textobject = c.beginText()
     textobject.setTextOrigin(1*inch,11*inch)
     textobject.textLines('''Disk Capacity Report: %s ''' % date )
     for line in input:
      textobject.textLine(line.strip())
     c.drawText(textobject)
     c.showPage()
     c.save()
    report = disk_report()
    create_pdf(report)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-90049-1-1.html 上篇帖子: python __slots__ 使你的代码更加节省内存 下篇帖子: Python学习之List 文章
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表