我已经下载并安装了python-poppler-qt4,我现在正在尝试一个简单的Qt应用程序来显示PDF页面。我已经遵循了我从网络上获得的内容,即将PDF转换为QImage,然后转换为QPixMap,但它不起作用(我得到的只是一个没有可见内容的小窗口)。
我可能在某个时候失败了(QImage.width()
返回我输入的宽度,QPixMap.width()
返回 0)。
这是代码:
#!/usr/bin/env python
import sys
from PyQt4 import QtGui, QtCore
import popplerqt4
class Application(QtGui.QApplication):
def __init__(self):
QtGui.QApplication.__init__(self, sys.argv)
self.main = MainWindow()
self.main.show()
class MainWindow(QtGui.QFrame):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.layout = QtGui.QVBoxLayout()
self.doc = popplerqt4.Poppler.Document.load('/home/benjamin/test.pdf')
self.page = self.doc.page(1)
# here below i entered almost random dpi, position and size, just to test really
self.image = self.page.renderToImage(150, 150, 0, 0, 210, 297)
self.pixmap = QtGui.QPixmap()
self.pixmap.fromImage(self.image)
self.label = QtGui.QLabel(self)
self.label.setPixmap(self.pixmap)
self.layout.addWidget(self.label)
self.setLayout(self.layout)
if __name__ == "__main__":
application = Application()
sys.exit(application.exec_())
这里哪里出了问题?谢谢。
我不熟悉python,所以这可能不直接适用,但QPixmap::fromImage
是一个返回QPixmap
的静态函数。因此,您的代码应如下所示:
self.pixmap = QtGui.QPixmap.fromImage(self.image)
换句话说,self.pixmap.fromImage
不会更改self.pixmap
,它会返回从您作为参数提供的图像生成的新像素图。
是的,我知道这个问题有答案。
但是当我在 PyQt5 中执行相同操作以将 PDF 文件显示为图像时,我遇到了错误。
我找到了我问题的解决方案。
我发布了这个答案来帮助那些面临同样问题的人。
<小时 />如果您想在 PyQt5 程序中显示 pdf 文件,您有 2 种选择
1 - 第一个是使用 Web 引擎(但它需要 RAM 的大量资源)2 - 第二个它将 pdf 转换为图像并将其显示在标签上
我选择了第二个选择
这是我将PDF文件显示为图像并解决问题的代码:
from PyQt5 import QtWidgets,QtCore,QtGui
import pypdfium2 as pdfium
the_file = "My_PDF_File.pdf"
application = QtWidgets.QApplication([])
window = QtWidgets.QWidget()
window.resize(700,600)
window_layout = QtWidgets.QGridLayout()
label_to_display_the_page = QtWidgets.QLabel()
label_to_display_the_page.setAlignment(QtCore.Qt.AlignCenter)
label_to_display_the_page_geometry = label_to_display_the_page.geometry()
pdf = pdfium.PdfDocument(the_file)
page = pdf.get_page(1)
pil_image = page.render_topil(scale=1,rotation=0,crop=(0, 0, 0, 0),greyscale=False,optimise_mode=pdfium.OptimiseMode.NONE)
image = pil_image.toqimage()
label_pixmap = QtGui.QPixmap.fromImage(image)
size = QtCore.QSize(label_to_display_the_page_geometry.width()-50,label_to_display_the_page_geometry.height()-50)
label_to_display_the_page.setPixmap(label_pixmap.scaled(size,QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation))
window_layout.addWidget(label_to_display_the_page)
window.setLayout(window_layout)
window.show()
application.exec()