最新资讯

  • python实现自动化生成pdf报告

python实现自动化生成pdf报告

2025-04-27 09:00:16 0 阅读

easypdf使用手册

  • 1. 项目介绍
    • 1.1 关于
    • 1.2 easypdf 有什么优势
    • 1.2 easypdf 可以用来做什么
    • 1.3 项目框架
    • 1.4 项目教程视频
  • 2. 安装项目环境
    • 2.1 安装Python3
    • 2.2在Windows上安装Python3
    • 2.3 在Mac上安装Python3
    • 2.4 在Linux上安装Python3
    • 2.5 在Windows上安装Pycharm
    • 2.6 在Mac上安装Pycharm
    • 2.6 安装虚拟环境
  • 3.文档封面设计
    • 3.1 根据个性化信息生成封面
  • 4. 目录设计
    • 4.1 根据标题级别生成目录
  • 5 文本使用
    • 5.1 设置文本
    • 5.2 设置链接跳转
    • 5.3 设置列表文本
    • 5.4 设置文本加粗
    • 5.5 设置文本大于&小于
    • 5.6 设置文本下划线
    • 5.7 设置文本颜色
    • 5.8 设置文本删除线
    • 5.9 设置强调字体
    • 5.10 设置文本换行
    • 5.11 设置文本中插入图片
    • 5.12 设置注意提示文本
    • 5.13 设置写入代码格式文本
  • 6. 表格
    • 6.1 生成普通表格
    • 6.2 设置一个定制化的表格
    • 6.3 设置一个有状态的表格数据
    • 6.4 其它表格
  • 7. 图片
    • 7.1 插入图片
  • 8 折线图
    • 8.1 普通折线图
    • 8.2 折线标记图
    • 8.3 折线图-3d
    • 8.4 多数据折线标记图展示
    • 8.5 虚线加数字格式折线图
    • 8.6 时间走势图
  • 9. 直线图
    • 9.1 普通直线图
    • 9.2 标记直线图
    • 9.3 直线图-3d
  • 10. 柱状图
    • 10.1 普通柱状图
    • 10.2 柱状图-3d
    • 10.3 堆叠柱形图
    • 10.4 百分比堆叠性柱形图
    • 10.5 横向柱形图
    • 10.6 带负标签的柱状图
    • 10.7 正向竖线柱状图
    • 10.8 类别柱型对比图
    • 10.9 柱状图表格并存
  • 11. 饼图
    • 11.1 常规饼图
    • 11.2 嵌套Legend 饼图
    • 11.4 饼图+列表
  • 12. 散点图
    • 12.1 插入散点图
  • 13. 雷达图
    • 13.1 填充雷达图
    • 13.2 常规雷达图
    • 13.3 标记雷达图
  • 14 面积图
    • 14.1 面积折线图
    • 14.2 面积动态标签图

1. 项目介绍

1.1 关于

qquad easypdf 是我在基于ReportLab PDF库进行修改。项目产生来源于我在工作自动化运维巡检一键生成PDF巡检报告。刚开始我也在百度、谷歌找的自动化生成PDF的资料,发现这方面的知识非常零散和知识不全面,教程基本都是用ReportLab 库进行一些简单的文本和绘图操作,没有一个完整的文档功能设计。所以我决定研究一下,用时接近一个月的时间,设计了一套拥有可定制的封面;自动生成的目录;可选择的样式、文本;可插入多种类型的图表和插图,这些功能使用非常便捷,只需要通过调用相应的方法,传入数据执行既可以生成。

1.2 easypdf 有什么优势

  • 简单易用,功能模块化:不用想着从零开始设计封面、模板
  • 功能齐全完整,拥有pdf文档:满足各类复杂的文本、图表和插图操作
  • 可定制化性强,可以自行重写方法满足需求
  • 可移植性强,可以打包成可执行文件在linux和windows上运行
  • 提高生产效率, 减少了手动重复操作的需求,如排版、格式调整多个文档等
  • 符合相应的SOP标准流程规范,确保文档都遵循统一的格式和标准
  • 减少错误和遗漏,自动化生成pdf流程通过减少人为干预来降低错误率

1.2 easypdf 可以用来做什么

easypdf 自动化生成PDF可以用来快速、准确地创建标准化的电子文档,用于各种业务场景下的信息共享、报告制作等,提高工作效率和文档一致性。

easypdf至少在以下业务场景下有用:

  • 数据分析报告
  • 运维巡检报告
  • 资源统计报告
  • 性能测试报告
  • 其它应用场景

1.3 项目框架

.PDF
├── easypdf
│   ├── __init__.py
│   ├── components # 公共属性
│   │   ├── __init__.py
│   │   ├── constant.py
│   │   ├── exception.py
│   │   ├── t_parse.py
│   │   └── utils.py
│   ├── core # 核心代码
│   │   ├── __init__.py
│   │   ├── doc_examples.py
│   │   ├── figure.py
│   │   ├── flowable.py
│   │   ├── graphics # 图表属性
│   │   ├── office_examples # 各种图表的方法
│   │   ├── pdf.py # 封装好的封面、目录、模板、字体、图表的方法入口
│   │   ├── regist_fonts.py # 字体注册方法
│   │   ├── style  # 字体、目录样式
│   │   ├── templates.py # 封面设计
│   │   └── toc.py # 目录内容和样式定义
│   └── fonts # 思源字体
│       ├── SourceHanSans-ExtraLight.ttf
│       ├── SourceHanSans-Light.ttf
│       └── SourceHanSans-Normal.ttf
├── images # pdf文档封面图
│   ├── es_back.png
│   └── logo.png

1.4 项目教程视频

B站我有详细的教学视频,兄弟们记得视频给个3连(点赞 投币 收藏 关注)

python生成pdf报告 企鹅自研项目 简单易用

2. 安装项目环境

关于python环境安装,B站我有详细的教学视频,记得视频礼貌给个3连(点赞 投币 收藏 关注)

最新版python3安装+pycharm安装永久版本

2.1 安装Python3

目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的。由于3.x版越来越普及,我们的easypdf也是在Python 3.7.16版本为基础。请确保你的电脑上安装的Python版本是最新的3.x,这样,你才能无痛学习这个easypdf项目。

2.2在Windows上安装Python3

首先,根据你的Windows版本(64位还是32位)下载好python安装程序,然后,运行下载的exe安装包。
特别要注意勾上Add Python 3.x to PATH,然后点“Install Now”即可完成安装。

2.3 在Mac上安装Python3

如果你正在使用Mac,那么系统自带的Python版本是2.7。要安装最新的Python 3,有两个方法:

方法一:下载Python 3 macOS版的安装程序,下载后双击运行并安装;

方法二:如果你已经安装了Homebrew,直接通过命令brew install python3安装即可。

2.4 在Linux上安装Python3

如果你正在使用Linux,那我可以假定你有Linux系统管理经验,自行安装Python 3应该没有问题,否则,请换回Windows系统。

2.5 在Windows上安装Pycharm

大家可以安装社区版本的pycharm这是免费用的,也可以安装专业版本的pycharm;
前面步骤按照默认配置点下一步,到下图的时候全部勾选上在下一步按照

2.6 在Mac上安装Pycharm

找到下载好的pycharm dmg镜像,双击点击运行,然后拖动到Applications里面既可,找到pycharm双击运行。

2.6 安装虚拟环境

此步骤非必需

# 安装virtualenv虚拟环境包
$ pip3 install virtualenv -i https://pypi.mirrors.ustc.edu.cn/simple
# 创建一个名为PDF的虚拟环境, pycharm打开项目选择解释器的时候选择虚拟环境的解释器
$ virtualenv PDF -p  /usr/local/bin/python3.x # python解释器需要修改成实际路径

3.文档封面设计

3.1 根据个性化信息生成封面

首先在easypdf 同级目录下,创建一个test.py文件,复制以下代码直接干;

import json
import os
from datetime import datetime
from easypdf.components import constant
from reportlab.lib.pagesizes import A4
from easypdf.core.pdf import PDF
from reportlab.lib.units import inch
from reportlab.lib import colors
from reportlab.platypus.tables import Table, TableStyle

from easypdf.core import doc_examples
from easypdf.core.office_examples.charts import (
    scatter as of_ex_scatter,
    quick_charts as of_ex_quick_charts,
    )
from easypdf.core.office_examples.charts import (
	bar as of_ex_bar,
	area as of_ex_area,
	pie as of_ex_pie,
    lines as of_ex_lines,
    )

BASE_DIR = os.path.dirname(__file__)
IMAGES = os.path.join(BASE_DIR, 'images', 'es_back.png')

class Report(PDF):
    """生成pdf"""

    def __init__(self):
        PDF.__init__(self,
                     # 保存pdf文档的文件名
                     filename='easypdf生成的pdf文档展示.pdf',
                     # 封面图片
                     cover_image=IMAGES,
                     # 文档大小
                     pagesize=A4,
                     # 页眉左边title
                     title=constant.PAGE_TITLE,
                     # 版权信息
                     copyrights=constant.copyright,
                     # 版本信息
                     version_info=constant.version_info,
                     )

    def cover_design(self):
        """封面设计"""
        # 封面的主题
        self.add_main_title('企鹅侠')
        # 封面显示的时间
        self.add_centred(datetime.now().strftime('%Y-%m-%d %H:%M:%S %Z'))
        # 使用目录模板
        self.next_toc_template()
        self.add_toc()
        self.next_normal_template()

# 实例化一个pdf对象        
pdf = Report()
# 封面设计
pdf.cover_design()
# 创建pdf文档
pdf.build_pdf() 

es_back.png:这是一个pdf的封面图片,你可以改为个人的封面或者企业的封面,我这里封面比较简单。
filename:生成pdf的文件名,各位可以根据自己业务场景进行命名
pagesize: 默认就是A4纸大小,大家不用去设置
title:标题,会显示在页眉的左边,页眉右边显示的是标题
copyrights:版权信息,大家可以根据需求修改
version_info:版本信息
next_toc_template:目录模板,后面会根据你的标题生成目录
add_toc: 添加目录内容处理模板,如目录字体设置
next_normal_template:后面使用常规模板,就是写入正文的页面

4. 目录设计

4.1 根据标题级别生成目录

    def cluster_overview(self):
        """生成内容"""
        # 一级目录
        self.add_heading('项目介绍', level=1)
        # 二级目录
        self.add_heading('关于', level=2)
        self.add_paragraph(
            "$easypdf$ 是我在基于ReportLab PDF库进行修改。"
            "项目产生来源于我在工作自动化运维巡检一键生成PDF巡检报告。刚开始我也在百度、"
            "谷歌找的自动化生成PDF的资料,发现这方面的知识非常零散和知识不全面,教程基本都是用ReportLab"
            "库进行一些简单的文本和绘图操作,没有一个完整的文档功能设计。所以我决定深挖,用时接近一个月的时间,"
            "设计了一套拥有可定制的封面;自动生成的目录;可选择的样式、文本;可插入多种类型的图表和插图,这些功能使用非常便捷,"
            "只需要通过调用相应的方法,传入数据执行既可以生成。在前期消耗巨大的时间成本和人力成本情况下,我决定干脆再做个教程,"
            "精心编纂知识手册,并录制详尽的视频教程,以合理的价格分享给每一位追求进步的伙伴。",
            style=self.stylesheet[constant.STYLE_COMMENT])
        self.add_heading('easypdf 有什么优势?', level=2)
        self.add_bullet("简单易用,功能模块化:不用想着从零开始设计封面、模板")
        self.add_bullet("功能齐全完整,拥有pdf文档:满足各类复杂的文本、图表和插图操作")
        self.add_bullet("可定制化性强,可以自行重写方法满足需求")
        self.add_bullet("可移植性强,可以打包成可执行文件在linux和windows上运行")
        self.add_bullet("提高生产效率, 减少了手动重复操作的需求,如排版、格式调整多个文档等")
        self.add_bullet("符合相应的SOP标准流程规范,确保文档都遵循统一的格式和标准")
        self.add_bullet("减少错误和遗漏,自动化生成pdf流程通过减少人为干预来降低错误率")

        self.add_heading('easypdf 可以用来做什么?', level=2)
        self.add_paragraph("easypdf 自动化生成PDF可以用来快速、准确地创建标准化的电子文档,"
                           "用于各种业务场景下的信息共享、报告制作等,提高工作效率和文档一致性。",
                           style=self.stylesheet[constant.STYLE_COMMENT])
        self.add_paragraph("easypdf至少在以下业务场景下有用:",
                           style=self.stylesheet[constant.STYLE_COMMENT])
        self.add_bullet("数据分析报告")
        self.add_bullet("运维巡检报告")
        self.add_bullet("资源统计报告")
        self.add_bullet("性能测试报告")
        self.add_bullet("其它应用场景")

self.add_heading 方法有3个参数:
第一个参数是目录标题文本
第二个参数是目录级别
第三个参数是目录字体设计,这里我用的是STYLE_COMMENT
self.add_bullet 方法是插入列表文本。
self.add_paragraph 方法是插入文本,下一章会讲

5 文本使用

qquad 一般情况下,我们只需要插入文本,那只需要调用add_paragraph方法传入字符串就可以,add_paragraph方法可还以通过style参数来设置不同的风格文本。当然我们在复杂场景,通常需要个性化标记文本,这时候需要采用xml 标记标签来实现,如文本字体颜色、大小、下划线、删除线等。xml标记标签对我们数据可视化很用用处,如用来表示状态、警告、提示等。

5.1 设置文本

插入普通的文本,没有设置字体

        self.add_heading('文本使用', level=1)
        self.add_heading('设置文本', level=2)
        self.add_paragraph("add_paragraph方法是普通文本。默认的字体样式,我可以自己换行喔,你只需要把文本输入进来就可以")

我们可以根据style来设置不同的段落文本风格

        self.add_paragraph("我们可以通过style来设置文本样式,现在我又变成另外一个文本样式了,哈哈哈"
            , style=self.stylesheet[constant.STYLE_CODE]
        )
        self.add_paragraph("我们可以通过style来设置文本样式,我继续变成另外一个文本样式了,哈哈哈"
                           , style=self.stylesheet[constant.STYLE_DOC_STRING]
                           )

通过xml标记标签来实现个性化的文本效果。

5.2 设置链接跳转

self.add_heading('设置链接跳转', level=2)
        self.add_paragraph(
            "这是一个跳转链接请,点击访问我的博客: "
            "penguinservices.blog.csdn.net。"
        )

5.3 设置列表文本

        self.add_heading('设置列表文本', level=2)
        self.add_bullet("我是列表文本1. 我也可以通过style来设置样式")
        self.add_bullet("我是列表文本2. 我也可以通过style来设置样式")

5.4 设置文本加粗

self.add_heading('设置文本加粗', level=2)
        self.add_paragraph(
            '如果安装了$pyphen$ python模块,'
            '则属性 $hyphenationLang$ 控制'
            '哪种语言将被用于在没有明确嵌入连字符的情况下连字符。'
        )

5.5 设置文本大于&小于

self.add_heading('设置文本大于&小于', level=2)
self.add_paragraph('最外层 < para > 标签')

5.6 设置文本下划线

self.add_heading('设置文本下划线', level=2)
self.add_paragraph(
        "$兹指控$你于1970年5月28日故意、非法和恶意地预谋出版一本所谓的英匈短语书," "意图破坏和平。 你如何辩护?",
    )

5.7 设置文本颜色

self.add_heading('设置文本颜色', level=2)
self.add_paragraph(""" 这里是绿色 """)

5.8 设置文本删除线

self.add_heading('设置文本删除线', level=2)
self.add_paragraph("""这是不可取的,恶意地预谋""")

5.9 设置强调字体

self.add_heading('设置强调字体', level=2)
self.add_paragraph("""你在此被控于1970年5月28日故意、非法和怀着预谋的恶意
        出版一本所谓的英匈短语书,意图破坏和平。 你如何辩护?""")

5.10 设置文本换行

self.add_heading('设置文本换行', level=2)
self.add_paragraph("我会换行,我是
企鹅侠"
)

5.11 设置文本中插入图片

src=“https://blog.csdn.net/unbuntu_luo/article/details/images/es_back.png” 替换为实际的图片路径

self.add_heading('设置文本中插入图片', level=2)
self.add_paragraph("""
        This
        is image;  is aligned
        """)

5.12 设置注意提示文本

self.add_heading('设置注意提示文本', level=2)
self.add_pencil_note()
self.add_text_note("""该服务状态异常,请联系工程师排查""")

5.13 设置写入代码格式文本

self.add_heading('设置写入代码格式文本', level=2)
self.add_code_eg("""
            self.add_paragraph('我是
企鹅侠') self.add_pencil_note() self.add_text_note('该服务状态异常,请联系工程师排查') """
)

6. 表格

6.1 生成普通表格

		self.add_heading('表格', level=1)
        self.add_heading('生成普通表格', level=2)

        # 设置表格样式
        # 如这里有两组坐标 (0,0), (-1,0), 是定义范围,前面一组是上坐标,后面一组是下坐标,每组坐标为(列,行)
        # 上坐标从0开始数
        # 下坐标从-1开始数
        style_list = [('BACKGROUND', (-1, 0), (-1, -1), colors.green),
                      # ('BACKGROUND', (1, 1), (-2, -2), colors.green),
                      ('TEXTCOLOR', (0, 0), (1, -1), colors.red)]
        # 需要传入的数据
        data = [['00', '01', '02', '03', '04'],
                ['10', '11', '12', '13', '14'],
                ['20', '21', '22', '23', '24'],
                ['30', '31', '32', '33', '34']]

        self.add_space()
        table_style = TableStyle(style_list) # 实例化表格样式
        table = Table(data=data, style=table_style) # 实例化一个表格
        self.add_flowable(table)

6.2 设置一个定制化的表格

设置一个定制化的表格属性,生成符合需求的表格数据。如果需要生成不同规格的表格,通常style可以作为公共的部份,通过修改style的属性元素来生成不同规格或属性的表格。

        self.add_heading('设置一个定制化的表格', level=2)
        self.table_style = 
            [
                ('FONT', (0, 0), (200, 200), 'SourceHanSans-Normal', 10), # 设置表格范围使用特定字体
                ('FONTSIZE', (0, 0), (-1, 0), 12),  # 首行字体大小
                ('SPAN', (0, 0), (-1, 0)),  # 合并单元格,合并首行
                ('ALIGN', (0, 0), (-1, -1), 'CENTER'),  # 设定首行为居中对齐
                ('FONT', (0, 1), (0, -1), 'SourceHanSans-Normal', 10, 10),
                ('VALIGN', (0, 0), (200, 200), 'MIDDLE'),  # 设置表格范围文本居中
                ('BOX', (0, 0), (-1, -1), 1.25, colors.black),  # 外边框线条大小
                ("BOX", (0, 0), (-1, 0), 1.5, colors.black), # 内边框线条大小
                ("BOX", (0, 2), (-1, 1), 1, colors.black), # 内边框线条大小
                ("GRID", (0, 0), (-1, -1), 0.5, colors.grey), # 网格布局
                ("BACKGROUND", (0, 0), (0, 0), colors.grey),  # 设置第一行背景颜色
            ]
        data = [['节点状态'],
               ['节点', '在线时长', 'Cpu
使用率', 'Mem
使用率', '过去1分钟,5分钟,15分钟
节点负载情况'],
               ['node-2', '106天', '38.16%', '91.24%', '10.30, 10.76, 10.68'],
               ['node-1', '106天', '31.58%', '70.52%', '8.87, 8.42, 8.23'],
               ['node-3', '106天', '28.95%', '80.08%', '12.83, 11.81, 10.83']]

        self.add_space() # 添加一个空行,为了美观
        table = Table(data=data, style=self.table_style, colWidths=(60, 50, 98, 98, 138))
        # data 参数传入实际的列表数据
        # colWidths 参数用元祖数据,元祖元素个数表示列表的列数,每个数值表示列表的宽度
        # style 表格属性
        self.add_flowable(table)

6.3 设置一个有状态的表格数据

有状态的表格难点在于规定范围使用相应的属性,所以大家一定要学会看坐标:

        self.add_heading("设置一个有状态的表格数据", level=2)
        self.table_style.append(('FONT', (6, 2), (7, 300), 'Courier', 10, 12))
        self.table_style.append(('TEXTCOLOR', (6, 2), (6, -1), colors.green))
        self.table_style.append(('TEXTCOLOR', (7, 2), (7, -1), colors.red))
        data = [['节点信息'], ['名称', '角色', 'IPMI', '架构', 'CPU(核)', '内存(G)', '在线', '离线'],
         ['node-1', 'controller_all', '10.0.60.1', 'x86_64', 48, 256, '✔', ''],
         ['node-2', 'controller_all', '10.0.60.2', 'x86_64', 48, 256, '', '✔'],
         ['node-3', 'controller_all', '10.0.60.3', 'x86_64', 48, 256, '', '✔']]

        self.add_space()
        table = Table(data=data, style=self.table_style, colWidths=(55, 100, 80, 55, 40, 40, 35, 35))
        self.add_flowable(table)
        # 添加一个表格说明
        self.add_caption('我是有状态表格', category=constant.CAPTION_TABLE)

6.4 其它表格

		self.add_heading("其它表格", level=2)
        style = [
            ('FONTNAME', (0, 0), (-1, -1), 'SourceHanSans-Normal'),  # 字体
            ('FONTSIZE', (0, 0), (-1, 0), 12),  # 第一行的字体大小
            ('FONTSIZE', (0, 1), (-1, -1), 10),  # 第二行到最后一行的字体大小
            ('SPAN', (0, 0), (-1, 0)),  # 合并单元格,合并首行
            ('BACKGROUND', (0, 0), (-1, 0), '#d5dae6'),  # 设置第一行背景颜色
            ('ALIGN', (0, 0), (-1, -1), 'CENTER'),  # 第一行水平居中
            # ('ALIGN', (0, 1), (-1, -1), 'LEFT'),  # 第二行到最后一行左右左对齐
            ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),  # 所有表格上下居中对齐
            ('TEXTCOLOR', (0, 0), (-1, -1), colors.darkslategray),  # 设置表格内文字颜色
            ('GRID', (0, 0), (-1, -1), 0.5, colors.grey),  # 设置表格框线为grey色,线宽为0.5
        ]
        style.append(('FONT', (6, 2), (7, 300), 'Courier', 10, 12))
        style.append(('TEXTCOLOR', (6, 2), (6, -1), colors.green))
        style.append(('TEXTCOLOR', (7, 2), (7, -1), colors.red))
        self.add_space()
        table = Table(data=data, style=style, colWidths=(55, 100, 80, 55, 40, 40, 35, 35))
        self.add_flowable(table)
        self.add_caption('我是其它表格', category=constant.CAPTION_TABLE)

7. 图片

7.1 插入图片

        self.add_heading("图片", level=1)
        self.add_heading("插入图片", level=2)
        self.add_paragraph(
                        "欢迎大家扫码关注我的公众号,干货多多:"
                        "点击这里访问我的csdn博客。"
                    )


        self.add_image('images/logo.png', width=5*inch, height=2*inch)
        self.add_caption('企鹅侠的公众号') # 添加一个图片说明
        

logo.png 是企鹅侠本人的公众号图片,大家可以替换成自己的

8 折线图

8.1 普通折线图

        self.add_heading("折线图", level=1)
        self.add_heading('普通折线图', level=2)
        data = [0.86, 0.86, 0.87, 0.86, 0.87, 0.87, 0.86, 0.87, 0.86, 0.87, 0.86, 0.87, 0.86, 0.87, 0.87, 0.87, 0.87,
                0.87, 0.87, 0.87, 0.88, 0.87, 0.88, 0.87, 0.87, 0.87, 0.9, 0.91, 0.91, 0.95, 0.94, 0.97]

        times = ['6-9', '6-10', '6-11', '6-12', '6-13', '6-14', '6-15', '6-16', '6-17', '6-18', '6-19', '6-20', '6-21',
                 '6-22', '6-23', '6-24', '6-25', '6-26', '6-27', '6-28', '6-29', '6-30', '7-1', '7-2', '7-3', '7-4',
                 '7-5', '7-6', '7-7', '7-8', '7-9', '7-10']

		self.add_quick_chart(
            data=[data], # Y轴值数据
            series=['使用情况(TiB)'], # 数据系列名
            width=520, # 折线图宽度
            height=230, # 折线图高度
            names=times, # x 轴的数据源
            chart_type='linechart', # 图类型
            ytitletext='单位/TiB', # 显示在y轴的说明
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            xangle=50, # x 轴数值的角度
            title='最近1个月存储使用情况',
            ylines=True # 增加y轴横线
        )

执行代码生成的折线图

8.2 折线标记图

        self.add_heading('折线标记图', level=2)
        self.add_quick_chart(
            data=[data],
            series=['使用情况(TiB)'],
            width=520, # 折线图宽度
            height=230, # 折线图高度
            names=times,
            chart_type='linechart_markers',
            ytitletext='单位/TiB',
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            xangle=50, # x 轴数值的角度
            title='最近1个月存储使用情况',
            ylines=True # 增加y轴横线
        )

执行代码生成的折线图

8.3 折线图-3d

 self.add_heading('折线图-3d', level=2)
 self.add_quick_chart(
            data=[data],
            series=['使用情况(TiB)'],
            width=520, # 折线图宽度
            height=230, # 折线图高度
            names=times,
            chart_type='linechart3d',
            ytitletext='单位/TiB',
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            xangle=50, # x 轴数值的角度
            title='最近1个月存储使用情况',
            ylines=True # 增加y轴横线
        )

执行代码生成的折线图

8.4 多数据折线标记图展示

        self.add_heading('多数据折线标记图展示', level=2)
        # 数据源
        data = [0.86, 0.86, 0.87, 0.86, 0.87, 0.87, 0.86, 0.87, 0.86, 0.87, 0.86, 0.87, 0.86, 0.87, 0.87, 0.87, 0.87,
                0.87, 0.87, 0.87, 0.88, 0.87, 0.88, 0.87, 0.87, 0.87, 0.9, 0.91, 0.91, 0.95, 0.94, 0.97]
		# 数据源1
        data1 = [0.8, 0.86, 0.87, 0.8, 0.67, 0.87, 0.86, 0.87, 0.45, 0.87, 0.86, 0.87, 0.86, 0.87, 0.87, 0.87, 0.87,
                0.8, 0.87, 0.87, 0.7, 0.87, 0.88, 0.67, 0.87, 0.57, 0.9, 0.41, 0.91, 0.95, 0.94, 0.97]
		# 数据源2
        data2 = [0.8, 0.86, 0.97, 0.6, 0.57, 0.7, 0.6, 0.87, 0.45, 0.87, 0.86, 0.87, 0.86, 0.87, 0.87, 0.87, 0.87,
                 0.8, 0.87, 0.87, 0.7, 0.87, 0.88, 0.67, 0.87, 0.57, 0.9, 0.41, 0.91, 0.95, 0.94, 0.97]

        times = ['6-9', '6-10', '6-11', '6-12', '6-13', '6-14', '6-15', '6-16', '6-17', '6-18', '6-19', '6-20', '6-21',
                 '6-22', '6-23', '6-24', '6-25', '6-26', '6-27', '6-28', '6-29', '6-30', '7-1', '7-2', '7-3', '7-4',
                 '7-5', '7-6', '7-7', '7-8', '7-9', '7-10']


        self.add_quick_chart(
            data=[data, data1, data2],
            series=['pool1使用情况(TiB)', 'pool2使用情况(TiB)', 'pool3使用情况(TiB)'],
            width=520, # 折线图宽度
            height=230, # 折线图高度
            names=times,
            chart_type='linechart_markers',
            ytitletext='单位/TiB',
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            xangle=50, # x 轴数值的角度
            title='最近1个月存储使用情况',
            ylines=True # 增加y轴横线
        )

执行代码生成的多数据折线标记图

8.5 虚线加数字格式折线图

        self.add_heading('虚线加数字格式折线图', level=2)
        # 如果需要传入个性化数据生成图,需要改dashed_line_and_number_format的方法代码
        self.add_flowable(
            of_ex_lines.dashed_line_and_number_format(width=460, height=240)
        )
        self.add_caption('虚线+数字格式', category=constant.CAPTION_IMAGE)

执行代码生成虚线加数字格式折线图

8.6 时间走势图

        self.add_heading('时间走势图', level=2)
        # 如果需要传入个性化数据生成图,需要改line_with_time_series_plot的方法代码
        self.add_flowable(
            of_ex_lines.line_with_time_series_plot(width=460, height=180)
        )
        self.add_caption('时间走势图', category=constant.CAPTION_IMAGE)

执行代码生成时间走势图

9. 直线图

9.1 普通直线图

        self.add_heading("直线图", level=1)
        self.add_heading("普通直线图", level=2)
        # 数据源
        data = [10, 20]
        data2 = [40, 60]
        data3 = [80,90]
        self.add_quick_chart(
            data=[[2018,2024],data, data2, data3],
            series=['pool1使用情况(TiB)','pool2使用情况(TiB)','pool3使用情况(TiB)'],
            width=520, # 直线图宽度
            height=230, # 直线图高度
            names=times,
            chart_type='lineplot',
            ytitletext='单位/TiB',
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            xangle=50, # x 轴数值的角度
            title='最近1个月存储使用情况',
            ylines=True # 增加y轴横线
        )

执行代码生成直线图

9.2 标记直线图

        self.add_heading("标记直线图", level=2)
        self.add_quick_chart(
            data=[[2018,2024],data, data2, data3],
            series=['pool1使用情况(TiB)','pool2使用情况(TiB)','pool3使用情况(TiB)'],
            width=520, # 折线图宽度
            height=230, # 折线图高度
            names=times,
            chart_type='lineplot_markers',
            ytitletext='单位/TiB',
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            xangle=50, # x 轴数值的角度
            title='最近1个月存储使用情况',
            ylines=True # 增加y轴横线
        )

执行代码生成标记直线图

9.3 直线图-3d

	   self.add_heading("直线图-3d", level=2)
       self.add_quick_chart(
            data=[[2018,2024],data, data2, data3],
            series=['pool1使用情况(TiB)','pool2使用情况(TiB)','pool3使用情况(TiB)'],
            width=520, # 折线图宽度
            height=230, # 折线图高度
            names=times,
            chart_type='lineplot3d',
            ytitletext='单位/TiB',
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            xangle=50, # x 轴数值的角度
            title='最近1个月存储使用情况',
            ylines=False # 增加y轴横线
        )

执行代码生成3d直线图

10. 柱状图

10.1 普通柱状图

        self.add_heading("柱状图", level=1)
        self.add_heading('普通柱状图', level=2)
        data = [[10, 20, 30], [20, 30, 40], [30, 40, 50]]
        self.add_quick_chart(
            data=data,
            series=['A国每年GDP','B国每年GDP','C国每年GDP'],
            width=520, # 柱状图宽度
            height=230, # 柱状图高度
            names=['2018', '2019', '2020'],
            chart_type='column',
            ytitletext='单位/TiB',
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            # xangle=50, # x 轴数值的角度
            title='普通柱状图',
            ylines=True # 增加y轴横线
        )

执行代码生成普通柱状图

10.2 柱状图-3d

self.add_heading('柱状图-3d', level=2)
self.add_quick_chart(
            data=data,
            series=['A国每年GDP','B国每年GDP','C国每年GDP'],
            width=520, # 柱状图宽度
            height=230, # 柱状图高度
            names=['2018', '2019', '2020'],
            chart_type='column3d',
            ytitletext='单位/TiB',
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            # xangle=50, # x 轴数值的角度
            title='柱状图-3d',
            ylines=True # 增加y轴横线

        )

执行代码生成柱状图-3d

10.3 堆叠柱形图

 self.add_heading('堆叠柱形图', level=2)
 self.add_quick_chart(
            data=data,
            series=['A国每年GDP','B国每年GDP','C国每年GDP'],
            width=520, # 柱状图宽度
            height=230, # 柱状图高度
            names=['2018', '2019', '2020'],
            chart_type='stacked_column',
            ytitletext='单位/TiB',
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            # xangle=50, # x 轴数值的角度
            title='堆叠柱形图',
            ylines=True # 增加y轴横线

        )

执行生成堆叠柱形图

10.4 百分比堆叠性柱形图

		self.add_heading('百分比堆叠性柱形图', level=2)
        self.add_quick_chart(
            data=data,
            series=['A国每年GDP','B国每年GDP','C国每年GDP'],
            width=520, # 柱状图宽度
            height=230, # 柱状图高度
            names=['2018', '2019', '2020'],
            chart_type='percent_column',
            ytitletext='单位/TiB',
            xvalue=-50, # x轴偏移位置(负数代表右移,正数代表左移)
            # xangle=50, # x 轴数值的角度
            title='百分比堆叠性柱形图',
            ylines=True # 增加y轴横线
        )

执行生成百分比堆叠性柱形图

10.5 横向柱形图

 self.add_heading('横向柱形图', level=2)
 data3 = [['webconsole2', 'messages-dispatcher2', 'messages-dispatcher1', '母机_clone', 'exchange-instance-YbxaYS'], [29, 18, 17, 5, 5]]
        self.add_space()
        self.add_flowable(of_ex_bar.BarChartsOnOneCanvas(
            width=260, height=200,
            data=[data3[1]],
            names=data3[0]
        ))
        self.add_space()
        self.add_caption('横向柱形图', category=constant.CAPTION_IMAGE)

执行生成横向柱形图

10.6 带负标签的柱状图

 self.add_heading('带负标签的柱状图', level=2)
 data = [(100, -110, 120, 130), (70, 80, 85, 90)]
        names = ['china', 'jan', 'ag', 'eng']
        self.add_flowable(
            of_ex_bar.HBarChartWRedXValueAxisNegLabels(
                data=data,width=460, height=200
            )
        )
        self.add_caption('带负标签的柱状图', category=constant.CAPTION_IMAGE)

执行代码生成带负标签的柱状图

10.7 正向竖线柱状图

        self.add_heading('正向竖线柱状图', level=2)
        data = [(100, -110), (25, -30)]
        self.add_flowable(
            of_ex_bar.VBarChartWLineBarLabels(
                data=data, width=460, height=200
            )
        )
        self.add_caption('带线标签的竖线柱状图', category=constant.CAPTION_IMAGE)

执行代码生成正向带线标签的竖线柱状图

10.8 类别柱型对比图

        self.add_heading('类别柱型对比图', level=2)
		# 时间
        names = [
            'Jan',
            'Feb',
            'Mar',
            'Apr',
            'May',
            'Jun',
            'Jul',
            'Aug',
            'aaa',
            '12121'
        ]
        # 数据
        data = [
            (0.27, 2.17, 3.66, 5.2, -1.33, -3.12, -6.36, 4.4,),
            (1.34, 1.11, 3.53, 4.55, -3.36, -6.64, -7.41, -6.22,),
            (1.37, 2.17, 3.77, 5.12, -1.22, -3.22, -5.36, 4.14,),
            (0.33, 1.21, 3.52, 4.77, -1.36, -6.64, -8.1, -7.52,),
        ]
		# 类别
        series = (
            'BP',
            'Shell Transport & Trading',
            'Liberty ' 'International',
            'Royal Bank of Scotland',
        )

        self.add_flowable(
            of_ex_bar.FourCategoryEightMonth(
                data=data, names=names, series=series,
                width=460, height=200
            )
        )
        self.add_caption('4个类别8个月对比图', category=constant.CAPTION_IMAGE)


执行代码生成4个类别8个月对比图

10.9 柱状图表格并存

        self.add_heading('柱状图表格并存', level=2)
        self.add_flowable(
            of_ex_bar.BarChartWithTable(
                width=460, height=200)
        )
        pdf.add_caption('柱状图和表格', category=constant.CAPTION_IMAGE)

11. 饼图

11.1 常规饼图

        self.add_heading("饼图", level=1)
        self.add_heading('常规饼图', level=2)
        self.add_space()
        # 如果需要传入个性化数据,需要改exploding_pie方法的代码
        self.add_flowable(
            of_ex_pie.exploding_pie(width=460, height=240)
        )
        self.add_caption('Exploding 饼图', category=constant.CAPTION_IMAGE)

执行代码生成饼图

11.2 嵌套Legend 饼图

        self.add_heading('嵌套Legend 饼图', level=2)
        self.add_space()
        self.add_flowable(
        	# 如果需要传入个性化数据,需要改pie_with_nested_legend方法的代码
            of_ex_pie.pie_with_nested_legend(
                width=460, height=240
            )
        )
        pdf.add_caption('嵌套Legend 饼图', category=constant.CAPTION_IMAGE)

执行代码生成嵌套Legend 饼图

11.4 饼图+列表

        self.add_heading('饼图+列表', level=2)
        self.add_space()
        self.add_flowable(
        	# 如果需要个性化传入数据,需要改pie_with_multi_column_legend方法的代码
            of_ex_pie.pie_with_multi_column_legend(width=460)
        )
        self.add_caption('饼图+多列', category=constant.CAPTION_IMAGE)

执行代码生成饼图加列表

12. 散点图

12.1 插入散点图

        self.add_heading("散点图", level=1)
        self.add_heading('插入散点图', level=2)
        self.add_space()
        # 如果需要传入个性化数据,需要修改scatter_plot_with_legend方法代码
        self.add_flowable(
            of_ex_scatter.scatter_plot_with_legend(width=560, height=240)
        )
        self.add_caption('散点图', category=constant.CAPTION_IMAGE)

执行代码生成散点图

13. 雷达图

13.1 填充雷达图

        self.add_heading("雷达图", level=1)
        self.add_heading('填充雷达图', level=2)
        self.add_space()
        # 传入个性化数据修改QuickFilledRadarChart方法的代码就好
        self.add_flowable(
            of_ex_quick_charts.QuickFilledRadarChart(
            width=460, height=180, titleFontName=self.font_bold
        ))
        self.add_caption('填充雷达图', category=constant.CAPTION_IMAGE)

执行代码生成填充雷达图

13.2 常规雷达图

        self.add_heading('常规雷达图', level=2)
        self.add_flowable(
            of_ex_quick_charts.QuickRadarChart(
                width=460, height=180, titleFontName=self.font_bold
            )
        )
        self.add_caption('常规雷达图', category=constant.CAPTION_IMAGE)

执行代码生成雷达图

13.3 标记雷达图

        self.add_heading('标记雷达图', level=2)
        self.add_flowable(
            of_ex_quick_charts.QuickMarkRadarChart(
                width=460, height=180, titleFontName=self.font_bold
            )
        )
        self.add_caption('标记雷达图)', category=constant.CAPTION_IMAGE)

14 面积图

14.1 面积折线图

        self.add_heading("面积图", level=1)
        self.add_heading('面积折线图', level=2)
        self.add_space()
        # 传入个性化数据修改AreaWithLinesChart方法的代码就好
        self.add_flowable(of_ex_area.AreaWithLinesChart(width=460, height=160,))
        self.add_caption('面积折线图', category=constant.CAPTION_IMAGE)

执行生成面积折线图

14.2 面积动态标签图

        self.add_heading('面积动态标签图', level=2)
        self.add_flowable(of_ex_area.AreaWithDynamicLabelChart(width=460, height=140))
        self.add_caption('面积动态标签图', category=constant.CAPTION_IMAGE)

执行生成面积动态标签图

本文地址:https://www.vps345.com/3118.html

搜索文章

Tags

PV计算 带宽计算 流量带宽 服务器带宽 上行带宽 上行速率 什么是上行带宽? CC攻击 攻击怎么办 流量攻击 DDOS攻击 服务器被攻击怎么办 源IP 服务器 linux 运维 游戏 云计算 deepseek Ollama 模型联网 API CherryStudio javascript 前端 chrome edge 进程 操作系统 进程控制 Ubuntu ssh ubuntu 数据库 centos oracle 关系型 安全 分布式 python MCP llama 算法 opencv 自然语言处理 神经网络 语言模型 harmonyos 华为 开发语言 typescript 计算机网络 flutter react.js 前端面试题 node.js 持续部署 笔记 C 环境变量 进程地址空间 Dell R750XS 科技 ai java 人工智能 个人开发 macos adb numpy rust http 网络 nginx 监控 自动化运维 阿里云 网络安全 网络协议 django fastapi flask web3.py docker 容器 DeepSeek-R1 API接口 android c++ c语言 github 创意 社区 Flask FastAPI Waitress Gunicorn uWSGI Uvicorn RTSP xop RTP RTSPServer 推流 视频 kvm 无桌面 命令行 Hyper-V WinRM TrustedHosts matlab YOLOv8 NPU Atlas800 A300I pro asi_bench Deepseek ecm bpm tcp/ip unity c# ansible playbook golang 后端 IIS .net core Hosting Bundle .NET Framework vs2022 udp 自动化 蓝耘科技 元生代平台工作流 ComfyUI php html 经验分享 ollama llm 深度学习 机器学习 chatgpt 大模型 llama3 Chatglm 开源大模型 深度优先 图论 并集查找 换根法 树上倍增 pycharm 串口服务器 zotero WebDAV 同步失败 代理模式 vue.js audio vue音乐播放器 vue播放音频文件 Audio音频播放器自定义样式 播放暂停进度条音量调节快进快退 自定义audio覆盖默认样式 YOLO pytorch sql KingBase mcp mcp-proxy mcp-inspector fastapi-mcp agent sse 银河麒麟 kylin v10 麒麟 v10 spring boot websocket tomcat ESP32 LDAP nuxt3 vue3 实时音视频 filezilla 无法连接服务器 连接被服务器拒绝 vsftpd 331/530 ide Docker Compose docker compose docker-compose 统信 国产操作系统 虚拟机安装 .net 面试 性能优化 jdk intellij-idea 架构 gitlab 多线程服务器 Linux网络编程 conda pillow spring json html5 firefox kubernetes 学习方法 程序人生 windows 搜索引擎 mysql string模拟实现 深拷贝 浅拷贝 经典的string类问题 三个swap 游戏服务器 TrinityCore 魔兽世界 开发环境 SSL证书 sysctl.conf vm.nr_hugepages redis 向日葵 Python 网络编程 聊天服务器 套接字 TCP 客户端 Socket 小程序 apache svn stm32 嵌入式硬件 单片机 Linux xrdp 远程桌面 远程连接 live555 源码剖析 rtsp实现步骤 流媒体开发 chfs ubuntu 16.04 odoo 服务器动作 Server action 能力提升 面试宝典 技术 IT信息化 mongodb kylin 银河麒麟操作系统 国产化 rpc 远程过程调用 Windows环境 直播推流 腾讯云 rsyslog 智能路由器 电脑 云原生 机器人 prometheus 媒体 微信公众平台 C语言 ipython 物联网 硬件工程 FTP服务器 学习 jmeter 软件测试 gitee microsoft vscode 编辑器 DeepSeek 服务器繁忙 AI 联想开天P90Z装win10 qt DigitalOcean GPU服务器购买 GPU服务器哪里有 GPU服务器 统信UOS 麒麟 bonding 链路聚合 excel 压力测试 tailscale derp derper 中转 mount挂载磁盘 wrong fs type LVM挂载磁盘 Centos7.9 jenkins C++软件实战问题排查经验分享 0xfeeefeee 0xcdcdcdcd 动态库加载失败 程序启动失败 程序运行权限 标准用户权限与管理员权限 权限 ollama下载加速 web安全 安全架构 Minecraft 课程设计 大数据 cursor MCP server C/S LLM windows日志 gpu算力 负载均衡 unix LORA 大语言模型 NLP H3C 命名管道 客户端与服务端通信 Dify agi AIGC 计算机视觉 服务器无法访问 ip地址无法访问 无法访问宝塔面板 宝塔面板打不开 av1 电视盒子 机顶盒ROM 魔百盒刷机 uni-app es jvm 3d 数学建模 目标检测 华为云 网络结构图 springsecurity6 oauth2 授权服务器 前后端分离 go express 硬件架构 系统架构 jar arm FunASR ASR 佛山戴尔服务器维修 佛山三水服务器维修 android studio 交互 file server http server web server ssl https 集成学习 集成测试 openEuler AI编程 远程工作 消息队列 minio Docker Hub docker pull 镜像源 daemon.json 代码调试 ipdb rdp 实验 Cursor UOS 统信操作系统 yum oceanbase rc.local 开机自启 systemd 其他 ddos shell MNN Qwen 备份SQL Server数据库 数据库备份 傲梅企业备份网络版 gaussdb ruoyi 爬虫 数据集 ios DeepSeek行业应用 Heroku 网站部署 xss 宝塔面板访问不了 宝塔面板网站访问不了 宝塔面板怎么配置网站能访问 宝塔面板配置ip访问 宝塔面板配置域名访问教程 宝塔面板配置教程 pygame 小游戏 五子棋 pppoe radius hugo arm开发 思科模拟器 思科 Cisco java-ee kind react next.js 部署 部署next.js ocr AI agent googlecloud X11 Xming 僵尸进程 bash JAVA IDEA Java 开源 EMQX MQTT 通信协议 运维开发 弹性计算 虚拟化 KVM 计算虚拟化 弹性裸金属 idm flash-attention 报错 漏洞 缓存 宝塔面板 同步 备份 建站 GaN HEMT 氮化镓 单粒子烧毁 辐射损伤 辐照效应 安全威胁分析 vscode 1.86 SSH 豆瓣 追剧助手 迅雷 nas 微信 内存 unity3d 安装教程 GPU环境配置 Ubuntu22 CUDA PyTorch Anaconda安装 Xterminal aws 备选 网站 api 调用 示例 银河麒麟桌面操作系统 Kylin OS postman mock mock server 模拟服务器 mock服务器 Postman内置变量 Postman随机数据 virtualenv debian 监控k8s集群 集群内prometheus Reactor 设计模式 C++ git elasticsearch IIS服务器 IIS性能 日志监控 maven intellij idea 外网访问 内网穿透 端口映射 r语言 数据挖掘 数据可视化 数据分析 word图片自动上传 word一键转存 复制word图片 复制word图文 复制word公式 粘贴word图文 粘贴word公式 华为od sqlite dubbo TCP服务器 qt项目 qt项目实战 qt教程 openssl 密码学 模拟退火算法 国标28181 视频监控 监控接入 语音广播 流程 SIP SDP mosquitto 根服务器 TRAE vim spring cloud kafka hibernate kamailio sip VoIP ukui 麒麟kylinos openeuler 微服务 游戏程序 ffmpeg 音视频 AI大模型 大模型入门 大模型教程 webrtc remote-ssh 重启 排查 系统重启 日志 原因 sqlserver 温湿度数据上传到服务器 Arduino HTTP 需求分析 规格说明书 ci/cd springboot Nuxt.js 恒源云 tcp big data okhttp CORS 跨域 雨云 NPS 孤岛惊魂4 Linux PID 博客 oneapi 大模型微调 open webui Headless Linux 远程登录 telnet pdf asp.net大文件上传 asp.net大文件上传下载 asp.net大文件上传源码 ASP.NET断点续传 asp.net上传文件夹 asp.net上传大文件 .net core断点续传 华为认证 网络工程师 交换机 医疗APP开发 app开发 k8s zookeeper rtsp rtp visualstudio 驱动开发 嵌入式实习 Samba SWAT 配置文件 服务管理 网络共享 WSL win11 无法解析服务器的名称或地址 v10 软件 armbian u-boot EasyConnect Cline 企业微信 Linux24.04 deepin ecmascript nextjs reactjs 流式接口 URL Agent ftp openwrt ux 多线程 fpga开发 LLM Web APP Streamlit hadoop opensearch helm ssrf 失效的访问控制 HTML audio 控件组件 vue3 audio音乐播放器 Audio标签自定义样式默认 vue3播放音频文件音效音乐 自定义audio播放器样式 播放暂停调整声音大小下载文件 MI300x eureka jina cuda cudnn anaconda mamba Vmamba 视觉检测 adobe Docker引擎已经停止 Docker无法使用 WSL进度一直是0 镜像加速地址 elk bug clickhouse 元服务 应用上架 ui outlook rclone AList webdav fnOS 信息与通信 图形化界面 换源 国内源 Debian IMX317 MIPI H265 VCU composer wsl2 wsl 视频编解码 pip Ubuntu 24.04.1 轻量级服务器 tensorflow 嵌入式 产测工具框架 IMX6ULL 管理框架 python3.11 dash 正则表达式 ip visual studio code 群晖 文件分享 GCC crosstool-ng 软件工程 中间件 iis 测试工具 Linux的基础指令 W5500 OLED u8g2 雨云服务器 1024程序员节 token sas matplotlib 环境迁移 lio-sam SLAM 服务器管理 配置教程 服务器安装 网站管理 崖山数据库 YashanDB deekseek ragflow 知识库 yolov8 历史版本 下载 安装 Node-Red 编程工具 流编程 知识图谱 网络穿透 云服务器 系统安全 CPU 职场和发展 cpu 实时 使用 高效日志打印 串口通信日志 服务器日志 系统状态监控日志 异常记录日志 NFS jupyter selete 高级IO 毕设 多层架构 解耦 游戏引擎 相差8小时 UTC 时间 rustdesk safari Mac 系统 前端框架 远程控制 远程看看 远程协助 HiCar CarLife+ CarPlay QT RK3588 OD机试真题 华为OD机试真题 服务器能耗统计 devops nvidia 图像处理 命令 dns dify 低代码 微信分享 鸿蒙 Image wxopensdk 三级等保 服务器审计日志备份 程序 编程 性能分析 bat 微信小程序 服务器数据恢复 数据恢复 存储数据恢复 北亚数据恢复 oracle数据恢复 ESXi 多个客户端访问 IO多路复用 回显服务器 TCP相关API 实时互动 bootstrap web 软考 linux 命令 sed 命令 css 策略模式 单例模式 信号 智能音箱 智能家居 繁忙 解决办法 替代网站 汇总推荐 AI推理 n8n 工作流 workflow list 模拟实现 CDN gateway Clion Nova ResharperC++引擎 Centos7 远程开发 dba 宠物 毕业设计 免费学习 宠物领养 宠物平台 prompt easyui langchain 智能手机 小艺 Pura X fd 文件描述符 主板 电源 网卡 可信计算技术 网络攻击模型 矩阵 线性代数 电商平台 大文件分片上传断点续传及进度条 如何批量上传超大文件并显示进度 axios大文件切片上传详细教 node服务器合并切片 vue3大文件上传报错提示错误 大文件秒传跨域报错cors 双系统 XCC Lenovo 压测 ECS mac DOIT 四博智联 yum源切换 更换国内yum源 防火墙 NAT转发 NAT Server Unity Dedicated Server Host Client 无头主机 stm32项目 cocoapods xcode embedding threejs 3D IPv4 子网掩码 公网IP 私有IP SSH 密钥生成 SSH 公钥 私钥 生成 Linux find grep SenseVoice wsgiref Web 服务器网关接口 flink 数据结构 skynet Windows Qwen2.5-coder 离线部署 计算机 .netcore HarmonyOS Next thingsboard postgresql ardunio BLE 端口测试 iDRAC R720xd VR手套 数据手套 动捕手套 动捕数据手套 iperf3 带宽测试 npm linux驱动开发 SSH 服务 SSH Server OpenSSH Server 常用命令 文本命令 目录命令 ShenTong 输入法 XFS xfs文件系统损坏 I_O error 线程 磁盘监控 iot dell服务器 iventoy VmWare OpenEuler css3 7z gitea 服务器主板 AI芯片 keepalived Jellyfin 远程 执行 sshpass 操作 zabbix 服务器配置 生物信息学 自动驾驶 我的世界服务器搭建 asm AI-native Docker Desktop 王者荣耀 Wi-Fi 超融合 Spring Security 我的世界 我的世界联机 数码 云服务 文件系统 路径解析 云电竞 云电脑 todesk BMC IPMI 带外管理 软链接 硬链接 db 硬件 设备 GPU PCI-Express WebUI DeepSeek V3 合成模型 扩散模型 图像生成 办公自动化 自动化生成 pdf教程 jetty undertow 序列化反序列化 tidb GLIBC 无人机 鸿蒙系统 虚拟机 ISO镜像作为本地源 CrewAI rabbitmq ruby log4j Erlang OTP gen_server 热代码交换 事务语义 DevEco Studio HarmonyOS OpenHarmony 真机调试 Ubuntu DeepSeek DeepSeek Ubuntu DeepSeek 本地部署 DeepSeek 知识库 DeepSeek 私有化知识库 本地部署 DeepSeek DeepSeek 私有化部署 流水线 脚本式流水线 efficientVIT YOLOv8替换主干网络 TOLOv8 sqlite3 gcc g++ g++13 cnn DenseNet pyautogui dns是什么 如何设置电脑dns dns应该如何设置 redhat sdkman sequoiaDB freebsd Linux awk awk函数 awk结构 awk内置变量 awk参数 awk脚本 awk详解 Xinference RAGFlow glibc WSL2 IM即时通讯 QQ 剪切板对通 HTML FORMAT onlyoffice 架构与原理 VMware安装Ubuntu Ubuntu安装k8s 测试用例 功能测试 AI写作 prometheus数据采集 prometheus数据模型 prometheus特点 AI作画 聊天室 相机 信号处理 k8s集群资源管理 云原生开发 GoogLeNet mysql离线安装 ubuntu22.04 mysql8.0 Typore 算力 源码 RAGFLOW cd 目录切换 Radius camera Arduino 电子信息 混合开发 环境安装 JDK muduo 个人博客 KylinV10 麒麟操作系统 Vmware 银河麒麟服务器操作系统 系统激活 lsb_release /etc/issue /proc/version uname -r 查看ubuntu版本 基础入门 windwos防火墙 defender防火墙 win防火墙白名单 防火墙白名单效果 防火墙只允许指定应用上网 防火墙允许指定上网其它禁止 hive Hive环境搭建 hive3环境 Hive远程模式 apt webgl 高效远程协作 TrustViewer体验 跨设备操作便利 智能远程控制 Ubuntu 24 常用命令 Ubuntu 24 Ubuntu vi 异常处理 centos-root /dev/mapper yum clean all df -h / du -sh aarch64 编译安装 HPC 数据库架构 数据管理 数据治理 数据编织 数据虚拟化 考研 烟花代码 烟花 元旦 在线office junit xpath定位元素 selenium 自动化测试 性能测试 SEO dity make 显示管理器 lightdm gdm chrome 浏览器下载 chrome 下载安装 谷歌浏览器下载 树莓派 VNC Open WebUI 阻塞队列 生产者消费者模型 服务器崩坏原因 交叉编译 laravel Linux无人智慧超市 LInux多线程服务器 QT项目 LInux项目 单片机项目 vue less grafana 直流充电桩 充电桩 NAS Termux RoboVLM 通用机器人策略 VLA设计哲学 vlm fot robot 视觉语言动作模型 具身智能 边缘计算 MySql netty 裸金属服务器 弹性裸金属服务器 p2p 技能大赛 sentinel Linux环境 epoll 强化学习 Ubuntu Server Ubuntu 22.04.5 HTTP 服务器控制 ESP32 DeepSeek c 状态管理的 UDP 服务器 Arduino RTOS firewall AD域 移动魔百盒 致远OA OA服务器 服务器磁盘扩容 USB转串口 CH340 飞牛NAS 飞牛OS MacBook Pro harmonyOS面试题 游戏机 抗锯齿 邮件APP 免费软件 Kali Netty 即时通信 NIO 实习 黑客 vasp安装 智能硬件 查询数据库服务IP地址 SQL Server 程序员 加解密 Yakit yaklang 语音识别 AutoDL HCIE 数通 gpt 技术共享 deepseek r1 SVN Server tortoise svn SysBench 基准测试 流量运营 wordpress 无法访问wordpess后台 打开网站页面错乱 linux宝塔面板 wordpress更换服务器 MS Materials 金仓数据库 2025 征文 数据库平替用金仓 eclipse 业界资讯 Ark-TS语言 code-server iphone 银河麒麟高级服务器 外接硬盘 Kylin nac 802.1 portal echarts 信息可视化 网页设计 gradle transformer 华为机试 政务 分布式系统 监控运维 Prometheus Grafana make命令 makefile文件 proxy模式 AISphereButler HAProxy 5G 3GPP 卫星通信 大数据平台 虚拟局域网 rust腐蚀 VMware安装mocOS VMware macOS系统安装 uv 框架搭建 显卡驱动 安卓 UDP的API使用 vSphere vCenter wireshark llama.cpp ros 镜像 Java Applet URL操作 服务器建立 Socket编程 网络文件读取 Dell HPE 联想 浪潮 tcpdump ROS ceph iBMC UltraISO Python基础 Python教程 Python技巧 navicat 升级 CVE-2024-7347 VPS .net mvc断点续传 实战案例 MacOS录屏软件 深度求索 私域 web3 环境配置 Claude autodl 软件定义数据中心 sddc RTMP 应用层 反向代理 AnythingLLM AnythingLLM安装 虚幻 状态模式 计算机外设 飞书 QT 5.12.12 QT开发环境 Ubuntu18.04 GRUB引导 Linux技巧 rtsp服务器 rtsp server android rtsp服务 安卓rtsp服务器 移动端rtsp服务 大牛直播SDK docker搭建nacos详解 docker部署nacos docker安装nacos 腾讯云搭建nacos centos7搭建nacos 传统数据库升级 银行 LLMs springboot远程调试 java项目远程debug docker远程debug java项目远程调试 springboot远程 单一职责原则 frp IPMITOOL 硬件管理 opcua opcda KEPServer安装 腾讯云大模型知识引擎 P2P HDLC 串口驱动 CH341 uart 485 工业4.0 k8s资源监控 annotations自动化 自动化监控 监控service 监控jvm IMM 模拟器 教程 can 线程池 uniapp 微信开放平台 微信公众号配置 游戏开发 hexo 移动云 鲲鹏 小智AI服务端 xiaozhi TTS FTP 服务器 RAID RAID技术 磁盘 存储 bcompare Beyond Compare linux上传下载 昇腾 npu 健康医疗 互联网医院 nfs wps SSL 域名 Anolis nginx安装 linux插件下载 mariadb ssh远程登录 自定义客户端 SAS 僵尸世界大战 游戏服务器搭建 多进程 webstorm Trae IDE AI 原生集成开发环境 Trae AI 浏览器开发 AI浏览器 EMUI 回退 降级 linux安装配置 mcu rnn 大大通 第三代半导体 碳化硅 vmware 卡死 ldap 毕昇JDK 微信小程序域名配置 微信小程序服务器域名 微信小程序合法域名 小程序配置业务域名 微信小程序需要域名吗 微信小程序添加域名 半虚拟化 硬件虚拟化 Hypervisor etl etcd 数据安全 RBAC Kali Linux 渗透测试 信息收集 h.264 micropython esp32 mqtt 中兴光猫 换光猫 网络桥接 自己换光猫 seatunnel RustDesk自建服务器 rustdesk服务器 docker rustdesk yaml Ultralytics 可视化 黑客技术 项目部署到linux服务器 项目部署过程 本地部署 ArkUI 多端开发 智慧分发 应用生态 鸿蒙OS pyqt pgpool 开机自启动 rag ragflow 源码启动 单元测试 vscode1.86 1.86版本 ssh远程连接 田俊楠 SSE rocketmq open Euler dde 迁移指南 网卡的名称修改 eth0 ens33 ue4 着色器 ue5 cpp-httplib 网工 SRS 流媒体 直播 软件需求 ABAP edge浏览器 perf 链表 DBeaver 数据仓库 kerberos trae 存储维护 NetApp存储 EMC存储 系统开发 binder 车载系统 framework 源码环境 openstack Xen TCP协议 开发 CLion milvus 服务器部署ai模型 Logstash 日志采集 蓝桥杯 软负载 risc-v firewalld 分析解读 AI Agent 字节智能运维 swoole curl wget 端口 查看 ss visual studio ip命令 新增网卡 新增IP 启动网卡 docker部署翻译组件 docker部署deepl docker搭建deepl java对接deepl 翻译组件使用 西门子PLC 通讯 ubuntu24.04.1 风扇控制软件 上传视频至服务器代码 vue3批量上传多个视频并预览 如何实现将本地视频上传到网页 element plu视频上传 ant design vue vue3本地上传视频及预览移除 自动化任务管理 宕机切换 服务器宕机 MacMini 迷你主机 mini Apple PX4 rpa triton 模型分析 fast 大模型应用 springcloud 离线部署dify 代理 飞牛nas fnos eNSP 企业网络规划 华为eNSP 网络规划 程序员创富 PVE vr 热榜 mq Unity插件 x64 SIGSEGV xmm0 李心怡 Google pay Apple pay sonoma 自动更新 xshell termius iterm2 TrueLicense Linux的权限 neo4j 数据库开发 database trea idea 语法 YOLOv12 ArcTS 登录 ArcUI GridItem DNS arkUI 服务网格 istio js UDP docker部署Python chrome devtools chromedriver Invalid Host allowedHosts 键盘 VMware创建虚拟机 CentOS 服务器时间 产品经理 MDK 嵌入式开发工具 论文笔记 sublime text arcgis 网络爬虫 嵌入式系统开发 大模型推理 大模型学习 鸿蒙开发 移动开发 搭建个人相关服务器 minicom 串口调试工具 音乐服务器 Navidrome 音流 代理服务器 ping++ 影刀 #影刀RPA# 图形渲染 在线预览 xlsx xls文件 在浏览器直接打开解析xls表格 前端实现vue3打开excel 文件地址url或接口文档流二进 黑苹果 运维监控 增强现实 沉浸式体验 应用场景 技术实现 案例分析 AR 捆绑 链接 谷歌浏览器 youtube google gmail alias unalias 别名 figma 远程服务 bot Docker 虚幻引擎 leetcode 推荐算法 DocFlow conda配置 conda镜像源 ubuntu24 vivado24 阿里云ECS 论文阅读 大模型部署 自动化编程 regedit 开机启动 怎么卸载MySQL MySQL怎么卸载干净 MySQL卸载重新安装教程 MySQL5.7卸载 Linux卸载MySQL8.0 如何卸载MySQL教程 MySQL卸载与安装 物联网开发 lua vue-i18n 国际化多语言 vue2中英文切换详细教程 如何动态加载i18n语言包 把语言json放到服务器调用 前端调用api获取语言配置文件 社交电子 ros2 moveit 机器人运动 本地化部署 Deepseek-R1 私有化部署 推理模型 京东云 欧标 OCPP 音乐库 飞牛 实用教程 私有化 docker run 数据卷挂载 交互模式 玩机技巧 软件分享 软件图标 域名服务 DHCP 符号链接 配置 midjourney 网络药理学 生信 PPI String Cytoscape CytoHubba 本地知识库部署 DeepSeek R1 模型 rime deep learning searxng linux环境变量 Windsurf mm-wiki搭建 linux搭建mm-wiki mm-wiki搭建与使用 mm-wiki使用 mm-wiki详解 信创 信创终端 中科方德 nlp 干货分享 黑客工具 密码爆破 hosts 聚类 mybatis xml EtherNet/IP串口网关 EIP转RS485 EIP转Modbus EtherNet/IP网关协议 EIP转RS485网关 EIP串口服务器 执法记录仪 智能安全帽 smarteye iftop 网络流量监控 数据库系统 cmos dock 加速 C# MQTTS 双向认证 emqx 粘包问题 docker命令大全 ai小智 语音助手 ai小智配网 ai小智教程 esp32语音助手 diy语音助手 gpt-3 文心一言 做raid 装系统 VM搭建win2012 win2012应急响应靶机搭建 攻击者获取服务器权限 上传wakaung病毒 应急响应并溯源 挖矿病毒处置 应急响应综合性靶场 人工智能生成内容 金融 网络用户购物行为分析可视化平台 大数据毕业设计 火绒安全 Ubuntu共享文件夹 共享目录 Linux共享文件夹 内网服务器 内网代理 内网通信 EtherCAT转Modbus ECT转Modbus协议 EtherCAT转485网关 ECT转Modbus串口网关 EtherCAT转485协议 ECT转Modbus网关 docker搭建pg docker搭建pgsql pg授权 postgresql使用 postgresql搭建 VLAN 企业网络 大模型面经 uni-file-picker 拍摄从相册选择 uni.uploadFile H5上传图片 微信小程序上传图片 Attention 拓扑图 剧本 ubuntu20.04 开机黑屏 RAG 检索增强生成 文档解析 大模型垂直应用 匿名管道 IO VS Code LInux 基础环境 AD 域管理 spark HistoryServer Spark YARN jobhistory 多路转接 网站搭建 serv00 项目部署 grub 版本升级 扩容 wpf VSCode 沙盒 word AP配网 AK配网 小程序AP配网和AK配网教程 WIFI设备配网小程序UDP开 USB网络共享 Playwright 磁盘镜像 服务器镜像 服务器实时复制 实时文件备份 raid5数据恢复 磁盘阵列数据恢复 CentOS Stream minecraft GIS 遥感 WebGIS ssh漏洞 ssh9.9p2 CVE-2025-23419 gnu ai工具 kali 共享文件夹 java-rocketmq OpenSSH 嵌入式Linux IPC IO模型 Kylin-Server AI代码编辑器 内网环境 Cookie 分布式训练 WebRTC win服务器架设 windows server 灵办AI Redis Desktop seleium 目标跟踪 OpenVINO 推理应用