首页 > 解决方案 > 如何将 Panda DataFrame 或 QTableWidget 转换为 Pdf?

问题描述

如何将 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)))

标签: pythonpython-3.xpandassqlitepyqt5

解决方案


您可以使用以下方法将 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 部分


推荐阅读