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

打印 上一主题 下一主题

主题 378|帖子 378|积分 1134

接待关注我的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 路径;
源码如下:
  1. import csv
  2. import os.path
  3. from reportlab.lib import colors
  4. from reportlab.lib.pagesizes import letter
  5. from reportlab.lib.styles import getSampleStyleSheet
  6. from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Image, Spacer, Paragraph
  7. from root_dir import DATA_DIR
  8. from utils.project_utils import traverse_dir_files
  9. def create_pdf(csv_files, image_files, headline, output_pdf):
  10.     """
  11.     Merge the data from each CSV file into a single PDF file.
  12.     """
  13.     # 创建 PDF 文档
  14.     doc = SimpleDocTemplate(output_pdf, pagesize=letter)
  15.     elements = []
  16.     line1 = headline
  17.     styles = getSampleStyleSheet()
  18.     style_normal = styles['Heading1']
  19.     elements.append(Paragraph(line1, style_normal))
  20.     # 读取并添加每个 CSV 文件的数据
  21.     for csv_file in csv_files:
  22.         data = []
  23.         with open(csv_file, 'r', newline='') as file:
  24.             reader = csv.reader(file)
  25.             headers = next(reader)  # 读取标题行
  26.             data += [headers]
  27.             data += [row for row in reader]  # 读取数据行
  28.         # 创建表格
  29.         table = Table(data)
  30.         table.setStyle(TableStyle([
  31.             ('BACKGROUND', (0, 0), (-1, 0), colors.white),
  32.             ('TEXTCOLOR', (0, 0), (-1, 0), colors.black),
  33.             ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
  34.             ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
  35.             ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
  36.             ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
  37.         ]))
  38.         # 将表格添加到文档元素中
  39.         elements.append(table)
  40.         elements.append(Spacer(1, 20))
  41.         for image_file in image_files:
  42.             img = Image(image_file)
  43.             # img.hAlign = 'CENTER'
  44.             # img.vAlign = 'TOP'
  45.             ratio = img.imageWidth / 400
  46.             img.drawHeight = img.imageHeight / ratio
  47.             img.drawWidth = img.imageWidth / ratio
  48.             # img.scaleToFit(200, 200)  # 调整图像大小以适应页面
  49.             elements.append(img)
  50.     # 构建文档
  51.     doc.build(elements)
  52. def main():
  53.     input_csv_path = os.path.join(DATA_DIR, "abag-summary.csv")
  54.     input_img_path = os.path.join(DATA_DIR, "plots")
  55.     path_list = traverse_dir_files(input_img_path, ext="png")
  56.     output_path = os.path.join(DATA_DIR, "output.pdf")
  57.     create_pdf([input_csv_path], path_list, output_path)
  58. if __name__ == '__main__':
  59.     main()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦应逍遥

金牌会员
这个人很懒什么都没写!

标签云

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