【问题标题】:How can I convert a Panda DataFrame or QTableWidget to a Pdf? [duplicate]如何将 Panda DataFrame 或 QTableWidget 转换为 Pdf? [复制]
【发布时间】:2020-02-16 00:42:18
【问题描述】:

如何将 Panda DataFrame 或 QTableWidget 转换为 Pdf?

我将我的 Sqlite3 数据库产品列在 QtableWidget (PyQt5) 中,并将它们也列在 panda 数据框中。如何将其中之一转换为 PDF?

我想生成一份产品报告,这些方法中的任何一种都适合我。我尝试了很多我在堆栈和谷歌上看到的东西,但没有任何效果。

数据帧函数

    def gerarRelatorio(self):
        self.banco = sqlite3.connect ( 'Vendas.db' )
        self.cursor = banco.cursor ( )
        engine = create_engine('sqlite:///Vendas.db')
        df = pd.read_sql_table("Produtos", engine)
        print(df)

QtableWidget 函数

    def LoadDatabase(self):
        self.banco = sqlite3.connect ( 'Vendas.db' )
        self.cursor = banco.cursor ( )
        query = "SELECT * FROM Produtos"
        result = self.banco.execute ( query )
        self.listaprodutos.setRowCount ( 0 )
        for row_number, row_data in enumerate ( result ):
            self.listaprodutos.insertRow ( row_number )
            for colum_number, data in enumerate ( row_data ):
                self.listaprodutos.setItem(row_number, colum_number, QtWidgets.QTableWidgetItem(str(data)))

【问题讨论】:

    标签: python python-3.x pandas sqlite pyqt5


    【解决方案1】:

    您可以使用以下方法将 pandas df 转换为 PDF:

    from PyQt5 import QtGui, QtWidgets
    from PyQt5.QtPrintSupport import QPrinter
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtGui import QTextDocument
    import sys
    import pandas as pd
    
    df = pd.DataFrame({'test1':[1],'test2':[2]}) #the dataframe
    html = df.to_html()
    
    app = QApplication(sys.argv)
    out = QTextDocument()
    out.setHtml(html)
    printer = QPrinter()
    printer.setOutputFileName("test.pdf")
    printer.setOutputFormat(QPrinter.PdfFormat)
    printer.setPageSize(QPrinter.A4)
    printer.setPageMargins(15, 15, 15, 15, QPrinter.Millimeter)
    out.print_(printer)
    

    当然,您必须尝试使用​​ pdf 格式以使其看起来像您想要的那样

    对 PyQt5 没有太多经验,但如果您已经将内容存储在 QtableWidget 中,您可能会以某种方式跳过 df/html 部分

    【讨论】:

    • 我试过但没用。进程以退出代码 -805306369 (0xCFFFFFFF) 结束
    • 上面的代码示例对你有用吗?它适用于我的机器?你的 df 是什么样子的......我不确定如果唯一的变量改变是 df,它为什么不起作用
    最近更新 更多