python - 如何将 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)))
解决方案
您可以使用以下方法将 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 部分
推荐阅读
- react-native - 在创建自定义组件时访问标准道具,而无需在组件文件中全部反刍它们
- node.js - 我如何使用社交媒体演示应用程序的续集在数据库中实现友谊功能
- html - 输入不适合 div
- javascript - react-redux 中的 onclick 事件触发
- python - Python脚本调用正确完成但仍作为正在运行的进程的外部程序?
- pandas - 如何在给定的数据框中仅添加索引列
- java - 你如何在 Java 中使用 PerspectiveAPI?
- python - VSCode Python 3+ Microsoft 扩展不会警告传入不同类型的参数
- python-3.x - “tensorflow.python.framework.errors_impl.FailedPreconditionError”同时运行“model_main_tf2.py”以在 tensorflow 中训练对象检测模型
- c - 代码运行没有错误或警告,但它崩溃