Qt讀取pdf檔案使用MuPdf庫
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位可用)