ToB企服应用市场:ToB评测及商务社交产业平台

标题: Python - 开源库 ReportLab 库合并 CVS 和图像生成 PDF 文档 [打印本页]

作者: 梦应逍遥    时间: 2024-7-26 23:34
标题: 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 文档,提供了丰富的功能,可以创建复杂的文档,包括文本、图像、表格、图表等。即:

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

源码如下:
  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企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4