Qt使用波普尔实现pdf阅读器的示例代码

  

<强>开发环境Qt5.5.1, Qt Creator 3.5.1

  

Qt实现pdf阅读器和MFC实现pdf阅读器,其实原理都是差不多的。

  

需要用到荡漾开源库,下载地址如下https://poppler.freedesktop.org/

  

如果只是要在窗口的gcc下运行的话,可以下载已经编译好的库https://sourceforge.net/projects/poppler-win32/

  

 Qt使用波普尔实现pdf阅读器的示例代码”>,</p>
  <p>这个是MinGW版本的Qt,也就是运行在GCC环境下的库,里面只包含*。dll和*。一。如果是Vistual工作室版本的Qt,那么很不幸里面没有* . lib文件。</p>
  <p> 1,新建项目,在项目的根目录新建一个“荡漾”文件夹,将汹涌中qt5目录下的文件都丢进去(* . h头文件,另外再将编译好的2个*。文件和2个* . dll丢进的去,我这里多丢了实现的* .cc文件,因为* .cc已经被编译成动态库了,所以可以不用包含在代码中)</p>
  <p> <img src=   INCLUDEPATH +=$ $ PWD/荡漾   win32:填词+=- l $ $ PWD/波普尔-llibpoppler   win32:填词+=- l $ $ PWD/波普尔-llibpoppler-qt5      

3,创建pdf工具类(该类负责与波普尔库做对接,主要负责获取pdf的总页数,和每页的图像)

  

<强> (1)pdfutils.h

        的ifndef PDFUTILS_H   #定义PDFUTILS_H   # include & lt; QObject>   # include & lt; QImage>   # include & lt; QSize>   # include & lt; QDebug>   # include“poppler-qt5.h”   类PdfUtils   {   公众:   显式PdfUtils (QString filePath);   ~ PdfUtils ();//获取指定页pdf图像(页码从0开始)   打印大师getPdfImage (int pageNumber);//获取pdf总页码   int getNumPages ();//获取pdf页面大小   QSize getPageSize ();   私人:   QString filePath;   int numPages;   QSize页大小;   空白getPdfInfo ();   };   # endif//PDFUTILS_H      

<强> (2)pdfutils.cpp

        # include“pdfutils.h”   PdfUtils:: PdfUtils (QString filePath) {   这→filePath=filePath;   getPdfInfo ();   }   PdfUtils:: ~ PdfUtils () {   }   打印大师PdfUtils:: getPdfImage (int pageNumber) {   打印大师形象;   波普尔::文档*文档=波普尔:文档::负载(filePath);   如果(!文档| |文档→isLocked ()) {//砦笙?...   删除文档;   返回图像;   }//文档开始页面0   波普尔:页面* pdfPage=文件→页面(pageNumber);   如果(pdfPage==0) {//砦笙ⅰ?   返回图像;   }//生成一个呈现页面的打印大师   形象=pdfPage→renderToImage (72、72、1, 1, 1, 1);   如果(image.isNull ()) {//砦笙ⅰ?   返回图像;   }//使用后,必须删除的页面   删除pdfPage;   删除文档;   返回图像;   }   int PdfUtils: getNumPages () {   返回numPages;   }   QSize PdfUtils: getPageSize () {   返回页大小;   }   空白PdfUtils: getPdfInfo () {   numPages=0;   波普尔::文档*文档=波普尔:文档::负载(filePath);   如果(!文档| |文档→isLocked ()) {//砦笙?...   删除文档;   返回;   }   numPages=文档→numPages ();   波普尔:页面* pdfPage=文件→页面(0);   页大?pdfPage→页大小();   qDebug () & lt; & lt;页大小;   删除pdfPage;   删除文档;   }      

4, pdf显示类(pdf的右侧显示滚动条,①拖动滚动条翻页②鼠标拖动pdf到最上或最底时翻页)

  

<强>

  

(1) mypdfcanvas。h(继承父类的resizeEvent是为了①当pdf只有1页时不显示滚动条②当用户拖动缩放窗口时动态改变pdf显示尺寸)

        的ifndef MYPDFCANVAS_H   #定义MYPDFCANVAS_H   # include & lt; QWidget>   # include & lt; QVector>   # include & lt; QMouseEvent>   # include & lt; QPaintEvent>   # include & lt; QPainter>   # include & lt; QPaintEvent>   # include & lt; QMap>   # include & lt; QPalette>   # include & lt; QResizeEvent>   # include“pdfutils.h”   类MyPdfCanvas:公共QWidget   {   Q_OBJECT   公众:   明确MyPdfCanvas (QWidget *父=0);   ~ MyPdfCanvas ();   空白resizeEvent (QResizeEvent * e);   空白paintEvent (QPaintEvent * e);   空白mousePressEvent (QMouseEvent * e);   空白mouseReleaseEvent (QMouseEvent * e);   空摇干(QMouseEvent * e);   空白setMaxCachedNum (int maxCachedNum);//如果不能解析pdf返回错误的   bool setPath (QString pdfPath);//页码从0开始   bool setPage (int pageNumber);//获取页数   int getNumPages ();   浮动getScaledRatio ();//显示裁剪后的图片   bool showClipImage (int pageNumber, int x, int y, int, int h);//取消显示裁剪图片,恢复正常显示   空白cancelClip ();//实际获取的pdf宽高度   QSize pdfActualSize;   信号:   空白pageChanged (int currentPage);   私人:   PdfUtils * PdfUtils;   QString pdfPath;//最大缓存图片数量   int maxCachedNum;//用来缓存pdf的每一个页面的图像(从0开始)   QMap

Qt使用波普尔实现pdf阅读器的示例代码