Python Reportlab将报告合并为一个PDF
我正在写一个程序来自动化我们的报告。我发现下面的方法可以将数据转换为pdf格式,效果很好。我稍微修改了一下,但没有修改太多。我能够单独生成所有报告,但似乎无法将它们全部打印到一个pdf 下面是一个从db调用格式化一个数据集以及如何调用脚本的示例Python Reportlab将报告合并为一个PDF,python,python-3.x,pdf,reportlab,Python,Python 3.x,Pdf,Reportlab,我正在写一个程序来自动化我们的报告。我发现下面的方法可以将数据转换为pdf格式,效果很好。我稍微修改了一下,但没有修改太多。我能够单独生成所有报告,但似乎无法将它们全部打印到一个pdf 下面是一个从db调用格式化一个数据集以及如何调用脚本的示例 def datafilter(tuna): data = [] for name, number, count in tuna: data.append({'name': name,
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变量时,我尝试将数据作为元组填充到其中,但出现错误,说“export method can't take tuple”
至少有人能给我指出正确的方向吗。我对这个还是比较新的
编辑**回溯
/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'
/usr/bin/python3.5/root/PycharmProjects/ReportApp/FML/apendhelp.py
回溯(最近一次呼叫最后一次):
文件“/root/PycharmProjects/ReportApp/FML/apendhelp.py”,第53行,在
masterin()
masterin中的文件“/root/PycharmProjects/ReportApp/FML/apendhelp.py”,第50行
数据过滤器1(主过滤器、顶部过滤器)
datafilter1中的第38行文件“/root/PycharmProjects/ReportApp/FML/apendhelp.py”
poop.export('mater.pdf')
AttributeError:“元组”对象没有属性“导出”
所以我没能把它制作成一个完整的pdf,但我确实找到了解决办法。我设置了一个主按钮来生成所有报告。然后是一个合并按钮,它将扫描目标文件夹,找到所有pdf,并使用PyPDF2的PdfileMerger将它们附加到一个主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\u dir
变量以满足您的需要,否则这应该可以正常工作。错误中的poop
是一个元组(这正是错误消息所说的),而不是它应该是的DataToPdf
对象。我相当肯定你的小例子不会在那一行产生同样的错误。请确保您发布的虚拟示例仍然会导致相同的错误(这是“MCVE”中的“C”)。您的权利对不起,我刚刚发现我将对其进行一些编辑,但我已将“doc”变量转换为一个元组如果您“将其转换为一个元组”,为什么您希望它具有.export
方法?您链接到的页面以及从中获取代码的页面是否将其转换为元组?看到问题了吗?我链接的页面也定义了导出方法。不,我想我只懂一半。我有点像个傻瓜。我知道它不需要一个元组,我已经尝试了一系列的解决方法,但我还不够好,无法得到它:(doc.export
是类DataToPdf
(doc1,doc2)的方法。export
将是类元组的方法,因为(doc1,doc2)
是一个元组,不管里面是什么。元组没有一个导出
方法,就这么简单。你只能调用。导出对象上的数据topdf
对象。如果你想在同一个pdf文件中放两样东西:嗯,你有一个问题需要解决,但你可能需要使用一个调用.export
,以及DataToPdf
对象上的rt。