Qt打开pdf文件,效果如下:
打开pdf文件
加载进程序
运行时,别忘了把dll文件放入Release目录下,不然会crash的,运行不了。
Qt读取pdf文件采用的是mupdf库。将编译好的库文件放入工程目录下include和lib
在该工程中的.pro文件加入外部库,我使用的是64位的库文件,mingGw32位的请使用x86的库文件,添加include库文件。
LIBS += D:\Program\muPdfDemo\lib\x64\libmupdf.lib
MainWindow.h文件内容如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_actionOpenPdf_triggered();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
MainWindow.cpp文件内容如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "include/mupdf-qt.h"
#include <QFileDialog>
#include <QPixmap>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle(tr("灏夏星辰 -打开pdf文件"));
this->setWindowIcon(QIcon(":/new/prefix1/image.png"));
ui->scrollArea->setFrameShape(QFrame::NoFrame); //设置滑动区域无边框
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_actionOpenPdf_triggered()
{
/*********************************************************************************
* 思路:
* 将打开的pdf每页提取成图片,将每张图片放入一个label控件中,
* 设置一个垂直布局,将多个label控件垂直起来放入widget
* 然后将widget放入scrollArea控件中
* *******************************************************************************/
QString fileName = QFileDialog::getOpenFileName(this, tr("选择文件"), tr(""), tr("pdf文件(*.pdf)"));
if(fileName.isNull() || !fileName.contains(".pdf")) return;
MuPDF::Document * document = MuPDF::loadDocument(fileName); //将pdf文件加载进Document
QWidget * widget = new QWidget(this);
QVBoxLayout *vboxLayout=new QVBoxLayout();
for(int i = 0; i < document->numPages(); i ++) //根据获取到的pdf页数循环
{
QLabel * label = new QLabel(this);
QImage image = document->page(i)->renderImage(2.0, 2.0); //截取pdf文件中的相应图片
label->setPixmap(QPixmap::fromImage(image)); //将该图片放进label中
vboxLayout->addWidget(label);
vboxLayout->setAlignment(widget,Qt::AlignCenter);
}
widget->setLayout(vboxLayout); //设置布局
ui->scrollArea->setWidget(widget); //设置widget
}
代码路径:http://download.csdn.net/detail/yinyuchen1/9899850 (64位可用)
poppler读取pdf代码路径:http://download.csdn.net/download/yinyuchen1/9977532(minGw32位可用)