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\popplergit 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 Если Вы качали по ссылке выше, то в архиве уже скомпилированная версия.
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)
Ну и скомпилируем сам 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>
Не может найти 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 комментария
Спасибо, сейчас попробую ну если бы был с картинками или видео урок ещё хорошо будет
Доброго времени суток. Спасибо за инструкцию, всё получилось. На выходе получил файлы libpoppler.dll и libpoppler.dll.a. Но я всё не могу подключить в проект библиотеку. Без lib файла никак не получается… Если Вас не затруднит, не могли бы тестовый проект выложить с скомпилированными библиотеками, которые на sourceforge выложены. Или может быть есть инструкция как с помощью visual studio собрать можно? Заранее большое спасибо!
Доброго.
К сожалению, тестового не осталось.
А что именно не получается? Я так понимаю Вы подключаете в Visual Studio ?
В идеале конечно хочется в студии подключить, но пока пробую в 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. С наступившими всех праздниками!!!
Что-то я накосячил с форматированием…
Поэтому и спрашивал =) Да, дело в разных компиляторах.
А не подскажите, возможно ли poppler собрать студийным компилятором?
Как оказалось всё довольно просто, нужно было только почитать 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 файлы.
Решил подключить опять 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). Раньше компилилось нормально.
Здравствуйте!) эт снова я ) хотел спросить, вроде все собрал до 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>, он не пытается собрать библиотеку, прописывал вверху файла как вы и написали, после коментов.
‘_imp_ZN7Poppler8Document4loadERK7QStringRK10QByteArrayS6
Вы скоре всего не подключили саму библиотеку.
Попробуйте в LIBS += прямо указать на файл, напрмере LIBS += C:/libs/popler.dll
Естественно замените путь и имя библиотеки на своё.
спасибо) пойду разбираться)
и еще если уже mingW есть с qt можно же его не ставить ?
Впринципе да.
Скажите путь set PATH=C:\Qt\Qt5.1.0\qt5\qtbase\bin;%PATH% у меня не существует, хотя версию такую же поставил , что вообще вот этот путь значит ?
Это значит Вы при установке QT не отметили установку исходников. Придётся переставлять. Там в процессе увидите.
Здравствуйте, а вы пробовали скомпилировать на Visual Studio 2010?
Неа.
Для 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. далее все как в мануале
Спасибо.
А это нормально, что там только .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
Да, нормально. Только что создал тестовый проект, всё нормально.
Возможно, ошиблись в путях?
Исправте определение определение Linuw -> Linux
Спасибо.