Описание проблемы и контекст
Я пытаюсь создать приложение, которое позволяет заполнять многочисленные номера форм, а затем анализировать заполненные данные и связывать их с базой данных. Чтобы использовать все уже созданные компанией PDF-формы, я хотел встроить Acrobat Reader в свое приложение PyQt, поскольку это привлекательное и полностью функциональное программное обеспечение для взаимодействия PDF-файлов. Но после того, как я установил свой QAxWidget на Adobe PDF Reader, фон становится серым (как если бы он загружал акробат), но любая команда, которую я посылаю в QAxWidget, похоже, не работает.
Минимальный рабочий пример
Я не могу найти какой-либо реальной документации для связывания Acrobat Reader с приложениями pyqt5. Я добавил QAxWidget, а затем добавил его в качестве centralWidget. Затем в функции OpenBlank () я использовал те же функции, что и на каждом веб-сайте, чтобы загрузить PDF с помощью acrobat. Важная часть на самом деле является 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()
Ожидания
Результат должен открыть файл и включить полосу прокрутки, но вместо этого я получаю пустой фон. Это похоже на Загрузка PDF в виджет ActiveX вопрос, но я решил продублировать его, так как на него не было ответа более года.