Reportlab 将报告合并为一个 PDF
Reportlab to consolidate reports to one PDF
我正在编写一个程序来自动生成报告。我发现以下 Script 可以将数据转换为 pdf 并且运行良好。我稍微修改了一下,但不是太多。我能够单独生成所有报告,但似乎无法将它们全部打印成一个 pdf。
这里是格式化来自数据库调用的一个数据集以及如何调用脚本的示例。
def datafilter(tuna):
data = []
for name, number, count in tuna:
data.append({'name': name,
'number': number,
'count': count})
fields = (
('name', 'Location'),
('number', 'Number'),
('count', 'Call Count'),
)
doc1 = DataToPdf(fields, data, sort_by=('name', 'DESC'),
title='Main Number Called')
doc2 = DataToPdf(fields1, data1, sort_by=('name', 'DESC'),
title='Main Number Called')
doc = doc1, doc2
doc.export('Main_Calls.pdf')
我试过以各种方式操纵 doc.export
调用,但无法使其正常工作。我怀疑我可能需要在某处创建一个循环。创建 doc 变量时,我尝试将我的数据作为元组填充到那里,但随后出错说“导出方法不能采用元组”
至少有人能给我指出正确的方向吗?我对此还比较陌生。
编辑**追溯
/usr/bin/python3.5 /root/PycharmProjects/ReportApp/FML/apendhelp.py
Traceback (most recent call last):
File "/root/PycharmProjects/ReportApp/FML/apendhelp.py", line 53, in <module>
masterin()
File "/root/PycharmProjects/ReportApp/FML/apendhelp.py", line 50, in masterin
datafilter1(main_bk, top_bk)
File "/root/PycharmProjects/ReportApp/FML/apendhelp.py", line 38, in datafilter1
poop.export('mater.pdf')
AttributeError: 'tuple' object has no attribute 'export'
所以我无法真正让它制作 1 个可靠的 pdf,但我确实找到了解决方法。我设置了一个主按钮来生成所有报告。然后是一个合并按钮,它将扫描目标文件夹,找到所有 pdf 并使用 PyPDF2 的 PdfFileMerger 将它们一起附加到一个主 pdf 中。这是代码,如果其他人需要的话。
def pdf_merger():
files_dir = '/root/PycharmProjects/ReportApp/FML/Pdf_Docs'
pdf_files = [f for f in os.listdir(files_dir) if f.endswith("pdf")]
merger = PdfFileMerger()
for filename in pdf_files:
merger.append(PdfFileReader(os.path.join(files_dir, filename), "rb"))
merger.write(os.path.join(files_dir, "merged_full.pdf"))
merger.close()
显然,您需要编辑 files_dir
变量以满足您的需要,但除此之外这应该可以正常工作。
我正在编写一个程序来自动生成报告。我发现以下 Script 可以将数据转换为 pdf 并且运行良好。我稍微修改了一下,但不是太多。我能够单独生成所有报告,但似乎无法将它们全部打印成一个 pdf。
这里是格式化来自数据库调用的一个数据集以及如何调用脚本的示例。
def datafilter(tuna):
data = []
for name, number, count in tuna:
data.append({'name': name,
'number': number,
'count': count})
fields = (
('name', 'Location'),
('number', 'Number'),
('count', 'Call Count'),
)
doc1 = DataToPdf(fields, data, sort_by=('name', 'DESC'),
title='Main Number Called')
doc2 = DataToPdf(fields1, data1, sort_by=('name', 'DESC'),
title='Main Number Called')
doc = doc1, doc2
doc.export('Main_Calls.pdf')
我试过以各种方式操纵 doc.export
调用,但无法使其正常工作。我怀疑我可能需要在某处创建一个循环。创建 doc 变量时,我尝试将我的数据作为元组填充到那里,但随后出错说“导出方法不能采用元组”
至少有人能给我指出正确的方向吗?我对此还比较陌生。
编辑**追溯
/usr/bin/python3.5 /root/PycharmProjects/ReportApp/FML/apendhelp.py
Traceback (most recent call last):
File "/root/PycharmProjects/ReportApp/FML/apendhelp.py", line 53, in <module>
masterin()
File "/root/PycharmProjects/ReportApp/FML/apendhelp.py", line 50, in masterin
datafilter1(main_bk, top_bk)
File "/root/PycharmProjects/ReportApp/FML/apendhelp.py", line 38, in datafilter1
poop.export('mater.pdf')
AttributeError: 'tuple' object has no attribute 'export'
所以我无法真正让它制作 1 个可靠的 pdf,但我确实找到了解决方法。我设置了一个主按钮来生成所有报告。然后是一个合并按钮,它将扫描目标文件夹,找到所有 pdf 并使用 PyPDF2 的 PdfFileMerger 将它们一起附加到一个主 pdf 中。这是代码,如果其他人需要的话。
def pdf_merger():
files_dir = '/root/PycharmProjects/ReportApp/FML/Pdf_Docs'
pdf_files = [f for f in os.listdir(files_dir) if f.endswith("pdf")]
merger = PdfFileMerger()
for filename in pdf_files:
merger.append(PdfFileReader(os.path.join(files_dir, filename), "rb"))
merger.write(os.path.join(files_dir, "merged_full.pdf"))
merger.close()
显然,您需要编辑 files_dir
变量以满足您的需要,但除此之外这应该可以正常工作。