Qt 调用 poppler库加载pdf文件

这篇博客介绍了如何在Windows环境下利用Qt结合Poppler库来实现PDF文件的加载、显示功能。通过创建PdfUtils类,实现了打开、关闭PDF文件,获取页面数量、页面大小以及将PDF页面渲染为QImage的方法。示例代码展示了如何调用这些功能,便于开发者理解和应用。
摘要由CSDN通过智能技术生成

winodws下使用qt 调用poppler库,实现pdf文件加载,显示的功能。

INCLUDEPATH += $$PWD/include/poppler
DEPENDPATH += $$PWD/include/poppler
win32: LIBS += -L$$PWD/lib/poppler/ -lpoppler -lpoppler-qt5

头文件

class PdfUtils
{
public:
    explicit PdfUtils();
    ~PdfUtils();

    //打开pdf文件
    bool OpenPdf(QString filePath);
    //是否已经打开文件
    bool isOpen();
    //获取当前文件路径
    QString getFilePath();
    //获取pdf总页码
    int getNumPages();
    //获取pdf页面大小
    QSize getPageSize();
    //获取指定页pdf图像(页码从0开始)
    QImage getPdfImage(int pageNumber);
    //渲染pdf页面到qwidget
    bool loadPage2Widget(int pageNumber);
    //关闭pdf文件
    bool ClosePdf();

private:
    Poppler::Document* document;
    bool opened = false;
    int numPages;
    QSize pageSize;
    QString filePath;

};

#endif // PDFUTILS_H

cpp文件

#include "pdfutils.h"

#include <QDebug>
#include <QPaintEngine>
#include <QPixmap>
#include <QThread>


PdfUtils::PdfUtils(){

}

PdfUtils::~PdfUtils(){
}


bool PdfUtils::OpenPdf(QString filePath)
{
    this->filePath = filePath;
    document = Poppler::Document::load(filePath);
    if (!document || document->isLocked()) {
        // ... error message ....
        delete document;

        this->opened = false;
        return this->opened;
    }

    //设置文字抗锯齿
    document->setRenderHint(Poppler::Document::TextAntialiasing);

    numPages = document->numPages();

    Poppler::Page* pdfPage = document->page(0);
    if(pdfPage != 0){
        pageSize = pdfPage->pageSize();
    }

    this->opened = true;
    return this->opened;
}

bool PdfUtils::isOpen()
{
    return this->opened;
}

QString PdfUtils::getFilePath()
{
    return this->filePath;
}

int PdfUtils::getNumPages() {
    return numPages;
}
QSize PdfUtils::getPageSize() {
    return pageSize;
}


bool PdfUtils::ClosePdf()
{
    if(this->opened){
        delete document;
    }
    this->opened = false;
    this->numPages = 0;
    return true;
}

QImage PdfUtils::getPdfImage(int pageNumber){
    QImage image;

    if(!isOpen()){
        return image;
    }

    // Document starts at page 0
    Poppler::Page* pdfPage = document->page(pageNumber);

    if (pdfPage == 0) {
        // ... error message ...
        return image;
    }

    // Generate a QImage of the rendered page
    image = pdfPage->renderToImage(200, 200, -1, -1, -1, -1);
    if (image.isNull()) {
        // ... error message ...
        return image;
    }

    // after the usage, the page must be deleted
    delete pdfPage;
    return image;
}

使用方法:

bool isSuccess = pdfUtils.OpenPdf("./temp.pdf");
QImage pdfImage = pdfUtils.getPdfImage(0);

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值