淘先锋技术网

首页 1 2 3 4 5 6 7

嗨,我要完成的工作是,我有一个带有自定义QtWebKit.QWebView的QWidget,它可以显示特定的网站.我想使用python和PyQt将网页另存为pdf.

from PyQt4 import QtCore, QtGui

from PyQt4 import QtWebKit

from Save_Evidence import *

import sys

##### Custom WebView #############

class Browser(QtWebKit.QWebView):

def __init__(self,parent =None):

QtWebKit.QWebView.__init__(self,parent)

self.loadFinished.connect(self._result_available)

def _result_available(self, ok):

frame = self.page().mainFrame()

self.html = unicode(frame.toHtml()).encode('utf-8')

#################################

try:

_fromUtf8 = QtCore.QString.fromUtf8

except AttributeError:

_fromUtf8 = lambda s: s

class Ui_Form(QtGui.QWidget):

def setupUi(self, Form):

Form.setObjectName(_fromUtf8("Form"))

Form.resize(640, 480)

self.gridLayout = QtGui.QGridLayout(Form)

self.gridLayout.setObjectName(_fromUtf8("gridLayout"))

self.verticalLayout = QtGui.QVBoxLayout()

self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))

self.webView = Browser(Form)

self.webView.setUrl(QtCore.QUrl(_fromUtf8("https://malwr.com/submission/")))

self.webView.setObjectName(_fromUtf8("webView"))

self.verticalLayout.addWidget(self.webView)

self.horizontalLayout = QtGui.QHBoxLayout()

self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))

self.pushButton = QtGui.QPushButton(Form)

self.pushButton.setObjectName(_fromUtf8("pushButton"))

self.pushButton.setDisabled(True)

self.horizontalLayout.addWidget(self.pushButton)

self.buttonBox = QtGui.QDialogButtonBox(Form)

self.buttonBox.setLayoutDirection(QtCore.Qt.RightToLeft)

self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel)

self.buttonBox.setCenterButtons(False)

self.buttonBox.setObjectName(_fromUtf8("buttonBox"))

self.horizontalLayout.addWidget(self.buttonBox)

self.verticalLayout.addLayout(self.horizontalLayout)

self.gridLayout.addLayout(self.verticalLayout, 0, 0, 1, 1)

self.retranslateUi(Form)

QtCore.QObject.connect(self.pushButton , QtCore.SIGNAL("clicked()") , self.saveReport)

QtCore.QObject.connect(self.webView , QtCore.SIGNAL(" loadFinished (bool)") , self.printIt)

QtCore.QMetaObject.connectSlotsByName(Form)

def retranslateUi(self, Form):

Form.setWindowTitle(QtGui.QApplication.translate("Form", "Malwr.com", None, QtGui.QApplication.UnicodeUTF8))

self.pushButton.setText(QtGui.QApplication.translate("Form", "Save Report", None, QtGui.QApplication.UnicodeUTF8))

def printIt(self, val):

if str(self.webView.url().toString()).find("https://malwr.com/analysis/") == 0:

xpage = self.webView.page()

self.HTML = unicode(xpage. currentFrame().toHtml()).encode('utf-8')

f =xpage. currentFrame().contentsSize()

self.pushButton.setEnabled(True)

def saveReport(self):

self.webView.page().setViewportSize(xpage. currentFrame().contentsSize())

image = QtGui.QImage(self.webView.page().viewportSize(),QtGui.QImage.Format_ARGB32)

painter = QtGui.QPainter(image)

self.webView.page().mainFrame().render(painter)

painter.end()

image.save(QtCore.QString("output-report"),"png")

output = QtCore.QFile()

output.open(1, QtCore.QIODevice.WriteOnly)

image.save(output, 'PNG')

class MyForm(QtGui.QWidget):

def __init__(self, parent=None):

QtGui.QWidget.__init__(self, parent)

self.ui = Ui_Form()

self.ui.setupUi(self)

if __name__ == "__main__":

app = QtGui.QApplication(sys.argv)

myapp = MyForm()

myapp.show()

sys.exit(app.exec_())

这是我现有的代码,这使我可以将网页另存为图像.我需要以某种方式保存网页,以便可以将其打印到A4纸上.

目前,该网页的屏幕截图非常长(高度),因此必须在多个页面上显示.