gpt4 book ai didi

python - Django View 使用 PyQt 将 URL 转换为 PDF

转载 作者:行者123 更新时间:2023-12-01 05:21:16 27 4
gpt4 key购买 nike

我正在尝试编写一个 Django View ,它将返回 URL 的 PDF。

我正在使用 PyQt webview.print 创建 PDF,但我不确定如何将 pdf 传递给 Django 响应,我尝试过 QBuffer 但我似乎无法正确执行。

到目前为止,这是我的观点:

def pdf(request):
app = QApplication(sys.argv)

bufferPdf = QBuffer()
bufferPdf.open(QBuffer.ReadWrite)

web = QWebView()
web.load(QUrl("http://www.google.com")) #the desired url.

printer = QPrinter()
printer.setPageSize(QPrinter.Letter)
printer.setOrientation(QPrinter.Landscape);
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setOutputFileName("file.pdf")

def convertIt():
web.print_(printer)
print "Pdf generated"
QApplication.exit()

QObject.connect(web, SIGNAL("loadFinished(bool)"), convertIt)

bufferPdf.seek(0)
result = bufferPdf.readData(0)
bufferPdf.close()

sys.exit(app.exec_())

response = HttpResponse(result, mimetype='application/pdf')
response['Content-Disposition'] = 'attachment; filename=coupon.pdf'
return response

提前致谢。

最佳答案

ekhumoro 接受的解决方案不正确。他为您提供了可以从命令行运行的代码,但永远无法在 Django View 中运行。

许多人已经注意到,将 Django 与 QT 线程应用程序结合起来并不容易,甚至可能完全不可能。您看到的错误是您尝试执行此操作时将看到的典型示例。

在我自己的项目中,我尝试了许多不同的组织和分组代码的排列,但从未找到解决方案。问题似乎是(我不是 QT 专家,所以如果有人有更多信息,请纠正我)事件驱动的 QT 应用程序(任何 WebKit 使用 QT 事件模型的应用程序)都是围绕有效的单例“QApplication”构建的。您无法控制该子应用程序何时退出以及何时收获其各种资源。因此,任何使用该库的多线程应用程序都需要非常仔细地管理其资源 - 在处理各种 Web 应用程序的过程中,您对这些资源的控制权为零。

一种可能的(困惑且不专业的)解决方案是创建一个接受命令行参数的脚本,然后从 Django 中作为官方子进程调用该脚本。您将使用临时文件进行输出,然后将其加载到您的应用程序中。无论发生什么读取事件,您只需清除磁盘上的文件即可。凌乱,但有效。

我个人很乐意听到任何人明确知道为什么这如此困难,或者知道正确的解决方案 - Stackoverflow 上实际上有几十个线程,其中关于如何解决这个问题的解释不正确或不完整......

关于python - Django View 使用 PyQt 将 URL 转换为 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22273033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com