Poppler  — библиотека для работы с PDF файлами для Linux, Windows, Mac.

[tip]

Готовая к употреблению сборка здесь: http://sourceforge.net/projects/poppler-win32/

[/tip]

HOW-TO по компиляции.

Для начала, скачаем всё необходимое

Распаковываем архивы.

Для удобства, основной путь у меня такой: C:\Qt\Projects\poppler  и в дальнейшем я отталкиваюсь именно от этой папки.

Архивы распаковываем в папку tools, каждый в отдельную папочку.

Так же для компиляции нам понадобится CMake, MinGW  устанавливать «по умолчанию»

MinGW можно использовать тот, что идёт вместе с QT либо ту же версию, что и при ручной сборке QT.

Так же потребуются исходники QT (Отмечать галку при установке)

Возьмём с Гита сам poppler:

Открываем консольку и переходим в директорию для загрузки.

[cce lang=»bash»] cd C:\Qt\Projects\poppler
git clone git://anongit.freedesktop.org/poppler/poppler
[/cce]

Ждём окончания загрузки.

Добавим необходимые пути в PATH

[cce lang=»bash»] set PATH=C:\MinGw\bin\;%PATH%
set PATH=C:\Qt\Qt5.1.0\qt5\qtbase\bin;%PATH%
[/cce]

Cкомпилируем сначала OpenJpeg     Если Вы качали по ссылке выше, то в архиве уже скомпилированная версия.

[cce lang=»bash»] cd  C:\Qt\Projects\poppler\tools\openjpeg
cmake -G «MinGW Makefiles»  C:\Qt\Projects\poppler\tools\openjpeg
mingw32-make
[/cce]

Дальше создадим файлик c переменными, чтобы cmake знал где искать библиотеки.

Файл c:\Qt\projects\poppler\init.txt

[cce lang=»bash»]

##############################################################################
SET(FREETYPE_LIBRARY «C:\Qt\Projects\poppler\tools\freetype\lib\freetype.lib» CACHE PATH «» FORCE)
SET(FREETYPE_INCLUDE_DIR_ft2build «C:\Qt\Projects\poppler\tools\freetype\include» CACHE PATH «» FORCE)
SET(FREETYPE_INCLUDE_DIR_freetype2 «C:\Qt\Projects\poppler\tools\freetype\include\freetype2» CACHE PATH «» FORCE)
SET(FREETYPE_INCLUDE_DIRS «C:\Qt\Projects\poppler\tools\freetype\include» CACHE PATH «» FORCE)

SET(CAIRO_INCLUDE_DIRS «C:\Qt\Projects\poppler\tools\cairo\include\cairo» CACHE PATH «» FORCE)
SET(CAIRO_LIBRARIES «C:\Qt\Projects\poppler\tools\cairo\lib\cairo.lib» CACHE PATH «» FORCE)

SET(LIBOPENJPEG_INCLUDE_DIR «C:\Qt\Projects\poppler\tools\openjpeg\include\openjpeg-1.5» CACHE PATH «» FORCE)
SET(LIBOPENJPEG_LIBRARIES «C:\Qt\Projects\poppler\tools\openjpeg\lib\openjpeg.lib» CACHE PATH «» FORCE)
SET(ZLIB_INCLUDE_DIR «C:\Qt\Projects\poppler\tools\zlib\include» CACHE PATH «» FORCE)
SET(ZLIB_LIBRARY «C:\Qt\Projects\poppler\tools\zlib\lib\zdll.lib» CACHE PATH «» FORCE)

SET(WITH_Iconv OFF CACHE BOOl «» FORCE)
SET(WITH_PNG OFF CACHE BOOl «» FORCE)
SET(WITH_GLIB OFF CACHE BOOl «» FORCE)

[/cce]

Ну и скомпилируем сам Poppler

[cce lang=»bash»] cd  C:\Qt\Projects\poppler\poppler\
cmake  -C «C:\Qt\Projects\poppler\init.txt» -G «MinGW Makefiles»  c:\Qt\projects\poppler\poppler
mingw32-make
[/cce]

Должно всё пройти нормально…

Подключение: 

В файле .pro проекта прописать

[cce lang=»c++»] INCLUDEPATH += C:/Qt/Projects/poppler/poppler/qt5/src/
>LIBS += -LC:/Qt/Projects/poppler/poppler/qt5/src/ -llibpoppler-qt5
[/cce] Ну и в коде не забыть

[cce lang=»c++»] #include <poppler-qt5.h>
[/cce]

Кстати, библиотеку libpoppler.dll и libpoppler-qt5.dll надо кинуть к экзешнику проги.

Примеры будут позже отдельным топиком.

[tip]

Может ругаться на файл  gfile.cc,  строку 603 и еще парочку (LARGE_INTEGER), надо просто обернуть значение в {фигурные скобки}

Так же ругнётся на «Нет декларации GetFileSizeEx«, в верху файла, после комментов вписать:

#define _WIN32_WINNT 0x0501
#include <windows.h>

[/tip] [tip]

Не может найти fontconfig.h ?

Качаем Fontconfig открываем архив и копируем папку include/fontconfig   в   C:\Qt\Projects\poppler\tools\cairo\include\cairo\

[/tip] [tip]

Будет ругаться «нет декларации в этой области видимости <sleep>» заменить на MyThread::msleep и выше функции прописать struct MyThread : public QThread { using QThread::msleep;};

[/tip]

24 комментария

Khusrav 28 сентября 2017 - 16:37

Спасибо, сейчас попробую ну если бы был с картинками или видео урок ещё хорошо будет

Reply
Evgeniy 9 января 2015 - 1:08

Доброго времени суток. Спасибо за инструкцию, всё получилось. На выходе получил файлы libpoppler.dll и libpoppler.dll.a. Но я всё не могу подключить в проект библиотеку. Без lib файла никак не получается… Если Вас не затруднит, не могли бы тестовый проект выложить с скомпилированными библиотеками, которые на sourceforge выложены. Или может быть есть инструкция как с помощью visual studio собрать можно? Заранее большое спасибо!

Reply
Pavelk 11 января 2015 - 2:35

Доброго.

К сожалению, тестового не осталось. 

А что именно не получается? Я так понимаю Вы подключаете в Visual Studio ?

Reply
Evgeniy 11 января 2015 - 23:04

В идеале конечно хочется в студии подключить, но пока пробую в QtCreator.
Пробовал по разному, далее конкретно по пунктикам:
 
1. При подключении библиотеки с прямым указанием файла (LIBS += C:/Qt/Projects/poppler/bin/libpoppler-qt5.dll) в LIBS компилятор выдаёт ошибку: C:\Qt\Projects\poppler\bin\libpoppler-qt5.dll:-1: ошибка: LNK1107: invalid or corrupt file: cannot read at 0x448.
2. При указании через -l(LIBS += -LC:/Qt/Projects/poppler/lib/-llibpoppler-qt5) ругается линковщик: mainwindow.obj:-1: ошибка: LNK2019: unresolved external symbol «__declspec(dllimport) public: static class Poppler::Document * __cdecl Poppler::Document::load(class QString const &,class QByteArray const &,class QByteArray const &)» (__imp_?load@Document@Poppler@@SAPAV12@ABVQString@@ABVQByteArray@@1@Z) referenced in function «public: __thiscall MainWindow::MainWindow(class QWidget *)» (??0MainWindow@@QAE@PAVQWidget@@@Z)
Ругается на строчку: Poppler::Document*doc=Poppler::Document::load(«1.pdf»);
 
Работаю под Win8.1, Qt5.2.0 win32, компилятор от 12 студии. Может проблема в том, что Poppler собран с помощью MinGW, а я подключаю её в проект, который собирается студийным компилятором? 
Если честно уже и не знаю что делать. Все праздники пробовал. 
P.S. С наступившими всех праздниками!!!

Reply
Evgeniy 11 января 2015 - 23:06

Что-то я накосячил с форматированием…

Reply
Pavelk 12 января 2015 - 0:10

Поэтому и спрашивал =) Да, дело в разных компиляторах.

 

Reply
Evgeniy 12 января 2015 - 13:07

А не подскажите, возможно ли poppler собрать студийным компилятором?

Evgeniy 13 января 2015 - 22:59

Как оказалось всё довольно просто, нужно было только почитать help по cmake/
CMake позволяет создавать файлы для различных компиляторов, в том числе и для visual studio. 
Необходимо было на последнем этапе выполнить команду:
cmake  -C «C:\Qt\Projects\poppler\init.txt» -G «Visual Studio 11 2012»  c:\Qt\projects\poppler\poppler
После этого создаются файлы проектов и solution для 12 студии. Открываем solution и делаем rebuild. На выходе получаем dll и lib файлы.

Feel 27 октября 2014 - 16:56

Решил подключить опять Poppler и при компиляции на 99 % после Building CXX 0bject test/CMAkeFiles/perf-test.dir/perf-test.cc.obj     Далее вот такого рода ошибка :   c:\Qt\Projects\poppler\poppler\test\perf-test.cc:329:58: error new declaration ‘void strcpy_s<char*,size_t,const char*)’    void strcpy_s<char* dst,size_t dst_size, const char* src).   Раньше  компилилось нормально.

Reply
Денис 28 июля 2014 - 19:21

Здравствуйте!) эт снова я ) хотел спросить, вроде все собрал до 100 % дошло, подключил к проекту как у вас написано, добавил #include<poppler-qt5.h> , в конструкторе набрасал одну строку Poppler::Document*doc=Poppler::Document::load(«path.pdf»);   но при сборке ругается на эту строку , такие ошибки:     undefined reference to’_imp_ZN7Poppler8Document4loadERK7QStringRK10QByteArrayS6_’   и  error: id returned 1 exit status              , изменял в gfile.cc  , но без результатно, в чем еще может заключаться ошибка ?    при прописке в файле gfile.cc  строк: #define_WIN32_WINNT 0x0501 и #include <windows.h>, он не пытается собрать библиотеку, прописывал вверху файла как вы и написали, после коментов.

 

Reply
Pavelk 16 августа 2014 - 18:15

‘_imp_ZN7Poppler8Document4loadERK7QStringRK10QByteArrayS6  

Вы скоре всего не подключили саму библиотеку. 

Попробуйте в LIBS +=  прямо указать на файл, напрмере LIBS += C:/libs/popler.dll

Естественно замените путь и имя библиотеки на своё.

Reply
Денис 28 июля 2014 - 10:48

спасибо) пойду разбираться)

Reply
Денис 27 июля 2014 - 18:18

и еще если уже mingW есть с qt можно же его не ставить ? 

Reply
Pavelk 28 июля 2014 - 1:49

Впринципе да.

Reply
Денис 27 июля 2014 - 18:16

Скажите путь set PATH=C:\Qt\Qt5.1.0\qt5\qtbase\bin;%PATH% у меня не существует, хотя версию такую же поставил , что вообще вот этот путь значит ?

Reply
Pavelk 28 июля 2014 - 1:48

Это значит Вы при установке QT не отметили установку исходников. Придётся переставлять. Там в процессе увидите.

Reply
Ivan 30 ноября 2013 - 19:57

Здравствуйте, а вы пробовали скомпилировать на Visual Studio 2010?

Reply
Pavelk 3 декабря 2013 - 8:24

Неа.

Reply
Diiimka 16 октября 2013 - 10:40

Для windows 7 и qt 5.1.1
У меня он лежит:
C:\Qt\Qt5.1.1\Tools\mingw48_32\bin\mingw32-make
1. Добавить в начало файла (не 0x0501 !!!):
#define _WIN32_WINNT 0x0502
#include <windows.h>
2. Строка 608:
LARGE_INTEGER largeInteger = {{0}};
3. Строка 619:
LARGE_INTEGER size = {{(DWORD)-1,-1}};
4. далее все как в мануале

Reply
Pavelk 16 октября 2013 - 12:14

Спасибо.

Reply
Anonymous 30 сентября 2013 - 23:46

А это нормально, что там только .dll и .dll.a файлы, а .lib файлов нет? Я сделал как написано
 
LIBS += -LC:/Qt/Projects/poppler/poppler/qt5/src/ -llibpoppler-qt5
но он пишет error: LNK1181: cannot open input file ‘libpoppler-qt5.lib’
 
а если писать так:
LIBS += C:/Qt/Projects/poppler/poppler/qt5/src/libpoppler-qt5.dll.a
то возникают ошибки
unresolved external symbol

Reply
Pavelk 1 октября 2013 - 1:12

Да, нормально. Только что создал тестовый проект, всё нормально. 

Возможно, ошиблись в путях?

Reply
Maksim 1 сентября 2013 - 14:40

Исправте определение определение Linuw -> Linux

Reply
Pavelk 1 сентября 2013 - 18:30

Спасибо.

Reply

Leave a Comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.