我正在尝试制作一个应用程序,该应用程序可以填充大量表格,然后解析填充的数据并将其链接到数据库。为了使用公司所有已制成的PDF表单,我希望将acrobat阅读器嵌入我的PyQt应用程序中,因为它是一种有吸引力且功能齐全的PDF交互软件。但是,将QAxWidget设置为Adobe PDF Reader之后,背景变成灰色(好像已经加载了acrobat),但是我发送给QAxWidget的任何命令似乎都无效。
我找不到用于将acrobat Reader与pyqt5应用程序链接的任何真实文档。我添加了一个QAxWidget,然后将其添加为我的centralWidget。然后,在名为OpenBlank()的函数中,我使用了在每个网站上找到的相同函数,以使用acrobat加载PDF。 重要部分 实际上是 openBlank()函数。所有其他的东西只是为了使MWE工作。只需添加任何PDF文件,然后将路径名更改为您的路径即可。您会看到它保持为空。
import sys
from PyQt5.QtWidgets import QMainWindow, QMessageBox, QApplication
from PyQt5.QAxContainer import QAxWidget
from PyQt5.QtCore import Qt
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setupUi(self)
self.AxViewer = QAxWidget(self)
self.setCentralWidget(self.AxViewer)
self.openBlank()
def openBlank(self):
FormPath = "a.pdf"
self.AxViewer.clear()
if not self.AxViewer.setControl('Adobe PDF Reader'):
return QMessageBox.critical(self, 'Error',
'Adobe PDF Reader is not installed on your computer.')
self.AxViewer.dynamicCall("LoadFile(const QString&)", FormPath)
self.AxViewer.dynamicCall("setShowScrollbars(bool)", "True")
def main():
app = QApplication(sys.argv)
app.setAttribute(Qt.AA_EnableHighDpiScaling)
app.setStyle("Fusion")
form = MainWindow()
form.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
结果应该打开文件并打开滚动条,但是我得到的背景是空的。它类似于Load a PDF in a ActiveX widget的问题,但是由于一年多没有得到回答,因此我决定重复该问题。
答案 0 :(得分:0)
我认为您的问题与self.AxViewer.dynamicCall()
有关。我设法找到一些使用C ++的示例
AxViewer = new QAxWidget(this);
----------------
void MainWindow::on_actionOpen_triggered()
{
//AxViewer->dynamicCall("LoadFile(\"D:\\OneDrive\\Documents\\sample.pdf\")");
AxViewer->dynamicCall("LoadFile(QString)",
QDir::toNativeSeparators(QFileDialog::getOpenFileName(this,
"Open PDF File",
QDir::currentPath(),
"PDF Documents (*.pdf)")));
}.
有人可以将其转换为Python。我对C ++不熟悉。