知方号

知方号

教你用Python写报表<如何用python做报表>

教你用Python写报表

软件设计有两种方式:一种方式是,使软件过于简单,明显没有缺陷;另一种方式是,使软件过于复杂,没有明显的缺陷

我们python有数量庞大,各种各样的库,那有没有一种库用来帮我们操作pdf呢,有的 ,reportlab

官方介绍:

Generating PDFs from Wall Street to Wikipedia

We build solutions to generate rich, attractive and fully bespoke PDF documents at incredible speeds. This can let you serve personalised documents in real time, produce high-quality output, and support all kinds of delivery from web downloads through to personalised digital print.

简要来说,就是 快速实时生成丰富的、定制的PDF文档。用于实时个性化定制,生成高质量的输出,支持各种交付,可以从网络下载到个人输出等。

要想操作pdf,我们首先得有一个pdf

file_name="paragraph_text.pdf"f =open(file_name,"wb")

该库还提供pdf加密方法

enc=pdfencrypt.StandardEncryption("liuyue",canPrint=1) def __init__(self, userPassword, ownerPassword=None, canPrint=1, canModify=1, canCopy=1, canAnnotate=1, strength=40)

该方法有7个参数,分别是控制用户密码,所有者密码 能不能打印,能不能修改,能不能赋值,能不能注释,最后一个没弄清楚,好像是控制修订版本的?

不过代码中有说明这些加密措施强度很弱,不要依赖这个进行加密

doc=SimpleDocTemplate(f,author="liuyue",title="第一个报表",leftMargin=15, rightMargin=15,pdfencrypt=enc)

调用SimpleDocTemplate生成文档对象,第一个参数代表文件,author传作者,title传标题,leftMargin和rightMargin分别控制左右边距,最后一个pdfencrypt是加密措施

要想在里面写东西可以通过multiBuild,看名字就知道这是个建立多行的东西,需要传一个列表承载要写入的信息

要写入的信息必要要装入规定的对象中,我们来写一个生成承载文字对象的方法

def generate_paragrap(content,align="center",style_name="Heading3"): """ :param content: 文字内容 :param align: 对齐方式 :param style_name: 样式名称 :return: Paragraph instance """ text=""" %s"""%(align,content) return Paragraph(text,getSampleStyleSheet()[style_name])

可以注意到控制文字样式是通过html的style

datas=[]datas.append(generate_paragrap("很高兴认识你,我叫流月"))doc.multiBuild(datas)f.close()

完毕,运行程序便会有一个pdf文件在你指定的路径下生成,但打开pdf文件你会发现一个问题,乱码,你换成英文就好了,但如果我们想要显示中文怎么办呢?

我们可以通过引入字体的办法来解决这个问题,字体文件需要自己去网上找

from reportlab.pdfbase import pdfmetricsfrom reportlab.pdfbase.ttfonts import TTFontpdfmetrics.registerFont(TTFont("FZLTXH","FZLTXIHK.TTF"))

这样一个带有文字的pdf就生成了,如果你想添加

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。

上一篇 没有了

下一篇没有了