做相冊視頻的網站短視頻代運營方案策劃書
歡迎關注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/140281680
免責聲明:本文來源于個人知識與公開資料,僅用于學術交流,歡迎討論,不支持轉載。
ReportLab:https://docs.reportlab.com/
ReportLab 是一個非常流行的 Python 庫,專門用于生成 PDF 文檔,提供了豐富的功能,可以創(chuàng)建復雜的文檔,包括文本、圖像、表格、圖表等。即:
- PDF 支持:ReportLab 專注于生成 PDF 文件,支持 PDF 的各種特性,如字體、顏色、圖層等。
- 可擴展性:可以通過編寫 Python 代碼來擴展 ReportLab 的功能,滿足更復雜的需求。
- 圖形和圖像:支持在 PDF 中嵌入圖像,包括 JPEG、PNG 等格式。同時,ReportLab 也提供了繪制圖形的功能。
- 表格:ReportLab 提供了強大的表格支持,可以創(chuàng)建復雜的表格布局,并支持表格的格式化和樣式設置。
- 文本處理:支持多種字體和文本樣式,包括粗體、斜體、下劃線等。還可以調整文本的對齊方式和行間距。
- 圖表:可以生成各種圖表,如條形圖、餅圖、折線圖等,支持圖表的自定義樣式和數據源。
- 自動化文檔生成:可以自動化生成文檔,如報告、發(fā)票、證書等,適合批量生成文檔的場景。
- 跨平臺:ReportLab 可以在多種操作系統(tǒng)上運行,包括 Windows、Linux 和 macOS。
- 開源:ReportLab 是一個開源項目,可以在遵守其許可證的情況下自由使用和修改。
示例函數 create_pdf
用于 構建 PDF 文件,輸入 csv 文件列表和 image 文件列表:
csv_files
是 csv 文件路徑列表;image_files
是 image 文件路徑列表;headline
是 pdf 文件標題;output_pdf
是 輸出 的 PDF 路徑;
源碼如下:
import csv
import os.pathfrom 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, Paragraphfrom root_dir import DATA_DIR
from utils.project_utils import traverse_dir_filesdef create_pdf(csv_files, image_files, headline, output_pdf):"""Merge the data from each CSV file into a single PDF file."""# 創(chuàng)建 PDF 文檔doc = SimpleDocTemplate(output_pdf, pagesize=letter)elements = []line1 = headlinestyles = 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] # 讀取數據行# 創(chuàng)建表格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 / 400img.drawHeight = img.imageHeight / ratioimg.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()