接待关注我的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 路径;
源码如下:
- 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()
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |