【问题标题】:Reportlab to consolidate reports to one PDFReportlab 将报告合并为一个 PDF
【发布时间】:2017-06-08 20:43:34
【问题描述】:

我正在编写一个程序来自动化我们的报告。我发现以下Script 将数据转换为pdf 并且运行良好。我稍微修改了一下,但并不过分。我能够单独生成所有报告,但似乎无法将它们全部打印到一个 pdf 中。

以下是从 db 调用格式化一个数据集以及如何调用脚本的示例。

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'

【问题讨论】:

  • 您在错误中的pooptuple(这正是错误消息所说的),而不是应该是的DataToPdf 对象。我相当确定您的小示例不会在该行产生相同的错误。请确保您发布的虚拟示例仍然导致相同的错误(这是“MCVE”中的“C”)
  • 你对,抱歉刚刚发现我会稍微编辑一下,但我已经将“doc”变量转换为元组
  • 如果你“把它转换成一个元组”,你为什么期望它有一个.export 方法呢?您链接到的页面以及从其中获取代码的页面是否将其转换为元组?看到问题了吗?
  • 我链接的页面也定义了导出方法。不,我想我只理解了这个问题的一半。我有点菜鸟。我知道它不想要一个元组,我已经尝试了很多解决方法,但我还不够好:(
  • doc.exportDataToPdf 类的方法。 (doc1,doc2).export 将是类tuple 的方法,因为(doc1,doc2) 是一个元组,不管里面是什么。元组没有export 方法,就这么简单。您只能在 DataToPdf 对象上调用 .export。如果您想将两件事放入同一个 pdf 文件中:嗯,您有一个问题需要解决,但您可能必须使用.export 的单个调用,以及DataToPdf 的对象.

标签: python python-3.x pdf reportlab


【解决方案1】:

所以我实际上无法制作 1 个可靠的 pdf,但我确实找到了解决方法。我设置了一个主按钮来生成所有报告。然后是一个合并按钮,它将扫描目标文件夹,找到所有 pdf 并将它们一起附加到一个主 pdf 中,使用 PyPDF2 的 PdfFileMerger。如果其他人需要,这里是代码。

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 变量以满足您的需要,否则这应该可以正常工作。

【讨论】:

    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多