最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用reportlab生成pdf實例

 更新時間:2022年02月09日 16:36:32   作者:yujie.zhao  
大家好,本篇文章主要講的是python使用reportlab生成pdf實例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

Intro

項目中遇到需要 導(dǎo)出統(tǒng)計報表 等業(yè)務(wù)時,通常需要 pdf 格式。python 中比較有名的就是 reportlab 。
這邊通過幾個小 demo 快速演示常用 api。所有功能點 源碼 都在 使用場景

一句話了解:跟 css 差不多,就是不斷地對每樣?xùn)|西設(shè)置 style,然后把 style 和內(nèi)容綁定。

功能點

生成
文件: 先 SimpleDocTemplate(‘xxx.pdf’),然后 build
流文件:先 io.BytesIO() 生成句柄,然后同理
曲線圖 LinePlot
餅圖 Pie
文字 Paragraph
fontSize 字體大小 推薦 14
加粗 <b>xxx</b> 使用的是 html 的方式,字體自動實現(xiàn)
firstLineIndent 首行縮進(jìn) 推薦 2 * fontSize
leading 行間距 推薦 1.5 * fontSize
fontName 默認(rèn)中文會變成 ■
下載 .ttf 文件 至少2個 【常規(guī)】【加粗】
注冊字體 pdfmetrics.registerFont 【常規(guī)】請用原名,方便加粗的實現(xiàn)
注冊字體庫 registerFontFamily(“HanSans”, normal=“HanSans”, bold=“HanSans-Bold”)

其他 api 自行摸索,但基本離不開 css 那種理念。官網(wǎng)并沒有常規(guī)文檔的那種 md 模式,而是完全寫在了 pdf 里,玩家需要自己去 pdf 里像查字典一樣去找。

預(yù)覽

在這里插入圖片描述

完整代碼

import os

from reportlab.graphics.charts.lineplots import LinePlot
from reportlab.graphics.charts.piecharts import Pie
from reportlab.graphics.shapes import Drawing
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.pdfmetrics import registerFontFamily
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import Paragraph

home = os.path.expanduser("~")

try:
    pdfmetrics.registerFont(TTFont("HanSans", f"{home}/.fonts/SourceHanSansCN-Normal.ttf"))
    pdfmetrics.registerFont(TTFont("HanSans-Bold", f"{home}/.fonts/SourceHanSansCN-Bold.ttf"))
    registerFontFamily("HanSans", normal="HanSans", bold="HanSans-Bold")
    FONT_NAME = "HanSans"
except:
    FONT_NAME = "Helvetica"


class MyCSS:
    h3 = ParagraphStyle(name="h3", fontName=FONT_NAME, fontSize=14, leading=21, alignment=1)
    p = ParagraphStyle(name="p", fontName=FONT_NAME, fontSize=12, leading=18, firstLineIndent=24)


class PiiPdf:
    @classmethod
    def doH3(cls, text: str):
        return Paragraph(text, MyCSS.h3)

    @classmethod
    def doP(cls, text: str):
        return Paragraph(text, MyCSS.p)

    @classmethod
    def doLine(cls):
        drawing = Drawing(500, 220)
        line = LinePlot()
        line.x = 50
        line.y = 50
        line.height = 125
        line.width = 300
        line.lines[0].strokeColor = colors.blue
        line.lines[1].strokeColor = colors.red
        line.lines[2].strokeColor = colors.green
        line.data = [((0, 50), (100, 100), (200, 200), (250, 210), (300, 300), (400, 800))]

        drawing.add(line)
        return drawing

    @classmethod
    def doChart(cls, data):
        drawing = Drawing(width=500, height=200)
        pie = Pie()
        pie.x = 150
        pie.y = 65
        pie.sideLabels = False
        pie.labels = [letter for letter in "abcdefg"]
        pie.data = data  # list(range(15, 105, 15))
        pie.slices.strokeWidth = 0.5

        drawing.add(pie)
        return drawing

使用場景1:生成文件

doc = SimpleDocTemplate("Hello.pdf")

p = PiiPdf()
doc.build([
    p.doH3("<b>水泵能源消耗簡報</b>"),
    p.doH3("<b>2021.12.1 ~ 2021.12.31</b>"),
    p.doP("該月接入能耗管理系統(tǒng)水泵系統(tǒng) xx 套,水泵 x 臺。"),
    p.doP("本月最大總功率 xx kW,環(huán)比上月增加 xx %,平均功率 xx kW;環(huán)比上月增加 xx %。"),
    p.doP("功率消耗趨勢圖:"),
    p.doLine(),
    p.doP("本月總能耗 xxx kWh,環(huán)比上月增加 xx %。"),
    p.doP("分水泵能耗統(tǒng)計:"),
    p.doChart(list(range(15, 105, 20))),
    p.doP("其中能耗最高的水泵為:xxx, 環(huán)比上月增加 xxx kWh,xx %。"),
])

使用場景2:web(flask)

@Controller.get("/api/pdf")
def api_hub_energy_pdf():
    buffer = io.BytesIO()										# 重點 起一個 io
    doc = SimpleDocTemplate(buffer)

    p = PiiPdf()
    doc.build([
        p.doH3("<b>2021.12.1 ~ 2021.12.31</b>"),
    ])

    buffer.seek(0)
    return Response(											# io 形式返回
        buffer,
        mimetype="application/pdf",
        headers={"Content-disposition": "inline; filename=test.pdf"},
    )

總結(jié)

到此這篇關(guān)于python使用reportlab生成pdf實例的文章就介紹到這了,更多相關(guān)python reportlab生成pdf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python正則表達(dá)式實現(xiàn)截取成對括號的方法

    Python正則表達(dá)式實現(xiàn)截取成對括號的方法

    這篇文章主要介紹了Python正則表達(dá)式實現(xiàn)截取成對括號的方法,涉及Python正則匹配相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • Python Socket傳輸文件示例

    Python Socket傳輸文件示例

    這篇文章主要介紹了Python Socket傳輸文件示例,發(fā)送端可以不停的發(fā)送新文件,接收端可以不停的接收新文件。有興趣的可以了解一下。
    2017-01-01
  • Pandas div()函數(shù)的具體使用

    Pandas div()函數(shù)的具體使用

    本文主要介紹了Pandas div()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python中類的一些方法分析

    python中類的一些方法分析

    這篇文章主要介紹了python中類的一些方法分析,實例講述了Python中子類調(diào)用父類時繼承的方法問題,需要的朋友可以參考下
    2014-09-09
  • Python編程mac下使用pycharm小技巧

    Python編程mac下使用pycharm小技巧

    這篇文章主要介紹了Python編程中在mac下使用pycharm的一些小技巧,建議正在使用Pycharm的同學(xué)們可以收藏閱讀,可以節(jié)省你的編程時間
    2021-09-09
  • python處理csv中的空值方法

    python處理csv中的空值方法

    今天小編就為大家分享一篇python處理csv中的空值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Django-imagekit的使用詳解

    Django-imagekit的使用詳解

    ImageKit是一個用于處理圖像的Django應(yīng)用程序。這篇文章主要介紹了Django-imagekit的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 利用Python操作MongoDB數(shù)據(jù)庫的詳細(xì)指南

    利用Python操作MongoDB數(shù)據(jù)庫的詳細(xì)指南

    MongoDB是由C++語言編寫的非關(guān)系型數(shù)據(jù)庫,是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng),其內(nèi)容存儲形式類似JSON對象,下面這篇文章主要給大家介紹了關(guān)于利用Python操作MongoDB數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Python在PDF中添加或刪除超鏈接的操作

    Python在PDF中添加或刪除超鏈接的操作

    PDF文件現(xiàn)已成為文檔存儲和分發(fā)的首選格式,然而,PDF文件的靜態(tài)特性有時會限制其交互性,超鏈接是提高PDF文件互動性和用戶體驗的關(guān)鍵元素,本文將詳細(xì)介紹如何使用第三方庫Spire.PDF for Python來進(jìn)行這些操作,需要的朋友可以參考下
    2024-12-12
  • Python利用PyVista進(jìn)行mesh的色彩映射的實現(xiàn)

    Python利用PyVista進(jìn)行mesh的色彩映射的實現(xiàn)

    這篇文章主要介紹了Python利用PyVista進(jìn)行mesh的色彩映射的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評論

上高县| 新营市| 汨罗市| 金阳县| 南溪县| 平原县| 陕西省| 北流市| 青冈县| 新野县| 亚东县| 牟定县| 和静县| 剑川县| 巴东县| 进贤县| 麦盖提县| 汤原县| 惠水县| 越西县| 乌拉特中旗| 大城县| 星子县| 应用必备| 静宁县| 桐梓县| 和顺县| 利津县| 德令哈市| 安岳县| 丽水市| 凭祥市| 涡阳县| 普宁市| 四平市| 信丰县| 木里| 宜川县| 汉沽区| 吴江市| 洛阳市|