一、安装poppler(0.86.1用到了c++11,需要升级支持c++11的编译器,编译时不要有中文路径)
1、下载poppler https://poppler.freedesktop.org/poppler-0.86.1.tar.xz 2020315 最新版本是0.86
2、下载poppler-data https://poppler.freedesktop.org/poppler-data-0.4.9.tar.gz 20200315 最新版本0.4.9
3、由于poppler-86.1 编译需要cmake 3.16以上版本,需要先编译cmake
(1)下载cmake https://cmake.org/download/; 最新版本 3.17;
(2)编译
#mkdir build
#../configure
#make
#make install
4、编译poppler
(1)解压poppler-0.86.1.tar.xz
(2)修改配置项
当前目录下CMakeList.txt
删除151~159,不同的版本的QT添加不同版本的路径
151 #find_package(Qt5Core)
152 #find_package(Qt5Gui)
153 #find_package(Qt5Xml)
154 #find_package(Qt5Widgets)
155 #find_package(Qt5Test)
156 #if (NOT (Qt5Core_FOUND AND Qt5Gui_FOUND AND Qt5Xml_FOUND AND Qt5Widgets_FOUND AND Qt5Test_FOUND))
157 # message("-- Package Qt5Core or Qt5Gui or Qt5Xml or Qt5Widgets or Qt5Test not found")
158 # set(ENABLE_QT5 OFF)
159 #endif()
以下是新增:
include_directories(/opt/Qt5.14.1/5.14.1/gcc_64/include)
include_directories(/opt/Qt5.14.1/5.14.1/gcc_64/include/QtGui)
include_directories(/opt/Qt5.14.1/5.14.1/gcc_64/include/QtCore)
include_directories(/opt/Qt5.14.1/5.14.1/gcc_64/include/QtXml)
include_directories(/opt/Qt5.14.1/5.14.1/gcc_64/include/QtWidgets)
include_directories(/opt/Qt5.14.1/5.14.1/gcc_64/include/QtTest)
qt目录下CMakeList.txt
删除4,5行
#- add_subdirectory(tests)
#- add_subdirectory(demos)
(3)安装依赖环境
#yum install freetype-devel fontconfig-devel libjpeg-devel libpng-devel libtiff-devel nss-devel cairo-devel openjpeg2-devel cairo-devel gobject-introspection-devel gtk3-devel lcms2-devel curl-devel -y
编译poppler-data
下载 https://poppler.freedesktop.org/poppler-data-0.4.9.tar.gz
解压
#mkdir build
#cd build
#cmake ..
#make
#make install
(4)编译
#mkdir build
#cd build
#cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=release
编译出错
In file included from /root/worksapce/poppler/poppler-0.67.0/poppler/SignatureInfo.cc:22:0:
/usr/include/nss3/hasht.h:48:29: 错误:‘PRBool’未声明
void (*destroy)(void *, PRBool);
解决如下:
在hasht.h包含
#include<prtypes.h>
//PRBool 是在 prtypes.h 中定义的
#make
#make install
poppler-qt5.pro 拷贝到 poppler-0.67.0/qt5目录下
编译工程release,生成poppler-qt5.so,poppler-qt5.so.1,poppler-qt5.so.1.0,poppler-qt5.so.1.0.0
拷贝到/usr/local/lib64目录下
二、使用库
包含库
LIBS += -L/usr/local/lib64 -lpoppler-qt5
#include <poppler/qt5/poppler-qt5.h>
eg.
QString fileUrl = "./1.pdf";
Poppler::Document* document = Poppler::Document::load(fileUrl);
Poppler::Page* pdfPage = document->page(0); //Document start at page 0
//QImage img = pdfPage->renderToImage(72,72,0,0,pdfPage->pageSize().width(),pdfPage->pageSize().height());
QImage img = pdfPage->renderToImage(72*20,72*20,-1,-1,-1,-1);
int iWidth = img.width();
int iHeight = img.height();
img.save("./1.png");