1. 程式人生 > >Qt顯示PDF之二 QAxWidget, QAxWidget

Qt顯示PDF之二 QAxWidget, QAxWidget



1. QAxWidget顯示pdf非常簡單:直接上程式碼

classSCPdfWidget:publicQAxWidget

{
public:
//SCPdfWidget(QWidget*parent=NULL);
SCPdfWidget(QWidget*parent=NULL);
voidopenPdf(constQString&pdfFilePath);
};

SCPdfWidget::SCPdfWidget(QWidget*parent):QAxWidget(parent)

{
}
voidSCPdfWidget::openPdf(constQString&pdfFilePath
)
{
if(!this->setControl("AdobePDFReader"))
{
QMessageBox::critical(this,"Error",QStringLiteral("沒有安裝pdf!"));
return;
}
this->dynamicCall(
"LoadFile(constQString&)",
pdfFilePath);
}

需要安裝

AdobePDF
或者其他pdf顯示的軟體。

2. poppler顯示PDF

下載該庫的windows版本,目前只有32位的版本poppler-0.39.0-win32

下載poppler原始碼,將qt5目錄下的include提出來

32位版本中的libpoppler.dll.a 和libpoppler.lib.a  直接將後面的.a去掉即可

將include 和庫都匯入到工程

新增如下程式碼:

QImage image;
Poppler::Document* document = Poppler::Document::load(filePath);
if (!document || document->isLocked()) {
        // ... error message ....
        delete document;
        return;
    }
    // Document starts at page 0
    Poppler::Page* pdfPage = document->page(pageNumber);

    // Generate a QImage of the rendered page
    image = pdfPage->renderToImage(72, 72, -1, -1, -1, -1);
    if (image.isNull()) {
        // ... error message ...
        return;
    }
    // after the usage, the page must be deleted
    delete pdfPage;
    delete document;

最後用一個Qt窗體顯示該image即可,本質就是一張圖片。