Python - 开源库 ReportLab 库合并 CVS 和图像生成 PDF 文档

欢迎关注我的CSDN:https://spike.blog.csdn.net/

本文地址:https://spike.blog.csdn.net/article/details/140281680

免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。


ReportLab:https://docs.reportlab.com/

ReportLab 是一个非常流行的 Python 库,专门用于生成 PDF 文档,提供了丰富的功能,可以创建复杂的文档,包括文本、图像、表格、图表等。即:

  • PDF 支持:ReportLab 专注于生成 PDF 文件,支持 PDF 的各种特性,如字体、颜色、图层等。
  • 可扩展性:可以通过编写 Python 代码来扩展 ReportLab 的功能,满足更复杂的需求。
  • 图形和图像:支持在 PDF 中嵌入图像,包括 JPEG、PNG 等格式。同时,ReportLab 也提供了绘制图形的功能。
  • 表格:ReportLab 提供了强大的表格支持,可以创建复杂的表格布局,并支持表格的格式化和样式设置。
  • 文本处理:支持多种字体和文本样式,包括粗体、斜体、下划线等。还可以调整文本的对齐方式和行间距。
  • 图表:可以生成各种图表,如条形图、饼图、折线图等,支持图表的自定义样式和数据源。
  • 自动化文档生成:可以自动化生成文档,如报告、发票、证书等,适合批量生成文档的场景。
  • 跨平台:ReportLab 可以在多种操作系统上运行,包括 Windows、Linux 和 macOS。
  • 开源:ReportLab 是一个开源项目,可以在遵守其许可证的情况下自由使用和修改。

示例函数 create_pdf 用于 构建 PDF 文件,输入 csv 文件列表和 image 文件列表:

  • csv_files 是 csv 文件路径列表;
  • image_files 是 image 文件路径列表;
  • headline 是 pdf 文件标题;
  • output_pdf 是 输出 的 PDF 路径;

源码如下:

bash 复制代码
import csv
import os.path

from reportlab.lib import colors
from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Image, Spacer, Paragraph

from root_dir import DATA_DIR
from utils.project_utils import traverse_dir_files


def create_pdf(csv_files, image_files, headline, output_pdf):
    """
    Merge the data from each CSV file into a single PDF file.
    """
    # 创建 PDF 文档
    doc = SimpleDocTemplate(output_pdf, pagesize=letter)
    elements = []

    line1 = headline
    styles = getSampleStyleSheet()
    style_normal = styles['Heading1']
    elements.append(Paragraph(line1, style_normal))

    # 读取并添加每个 CSV 文件的数据
    for csv_file in csv_files:
        data = []
        with open(csv_file, 'r', newline='') as file:
            reader = csv.reader(file)
            headers = next(reader)  # 读取标题行
            data += [headers]
            data += [row for row in reader]  # 读取数据行

        # 创建表格
        table = Table(data)
        table.setStyle(TableStyle([
            ('BACKGROUND', (0, 0), (-1, 0), colors.white),
            ('TEXTCOLOR', (0, 0), (-1, 0), colors.black),
            ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
            ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
            ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
            ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
        ]))

        # 将表格添加到文档元素中
        elements.append(table)

        elements.append(Spacer(1, 20))

        for image_file in image_files:
            img = Image(image_file)
            # img.hAlign = 'CENTER'
            # img.vAlign = 'TOP'
            ratio = img.imageWidth / 400
            img.drawHeight = img.imageHeight / ratio
            img.drawWidth = img.imageWidth / ratio
            # img.scaleToFit(200, 200)  # 调整图像大小以适应页面
            elements.append(img)

    # 构建文档
    doc.build(elements)


def main():
    input_csv_path = os.path.join(DATA_DIR, "abag-summary.csv")
    input_img_path = os.path.join(DATA_DIR, "plots")
    path_list = traverse_dir_files(input_img_path, ext="png")
    output_path = os.path.join(DATA_DIR, "output.pdf")
    create_pdf([input_csv_path], path_list, output_path)


if __name__ == '__main__':
    main()
相关推荐
想会飞的蒲公英10 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel11 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记11 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
CCPC不拿奖不改名12 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code12 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook12 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化
蜡台13 小时前
uniapp pdf文件预览组件
pdf·uni-app·合同·pdfh5
我的xiaodoujiao15 小时前
快速学习Python基础知识详细图文教程9--函数进阶
开发语言·python·学习·测试工具
weixin_4080996715 小时前
2026 图片去水印 API 接口完全指南:一键去除图片水印(附 Python/Java/PHP/C# 示例)
java·python·php·图片处理·api调用·图片去水印·石榴智能
去码头整点薯条ing16 小时前
某当网登录滑块【协议+OCR】
爬虫·python·ocr