Название: [РЕШЕНО] Просмотр PDF в приложении Отправлено: alexorleon от Январь 31, 2018, 15:27 День добрый. Реализовал просмотр pdf документов в приложении на основе Poppler. Но сейчас появилась необходимость сбилдить проект под андроид. С poppler это показалось по меньшей мере крайне сложным процессом. WebView не рассматриваю поэтому решил попробовать другие библиотеки.
QtPDF http://blog.qt.io/blog/2017/01/30/new-qtpdf-qtlabs-module/ и qtpdfium https://github.com/paulovap/qtpdfium mupdf-qt собирал, но уже в самом проекте валились ошибки. Так и не разобрался. Начал с QtPDF под linux. Ubuntu 14.04 x64, Qt 5.9.3, gcc 4.8.4 Добавил в PATH qmake. Проделал шаги. git clone git://code.qt.io/qt-labs/qtpdf cd qtpdf git submodule update --init --recursive qmake Но на шаге с make ошибка: ... cd src/ && ( test -e Makefile || /home/alexorleon/Qt/5.9.3/gcc_64/bin/qmake -o Makefile /home/alexorleon/Development/Projects/pdf/linux/qtpdf/src/src.pro ) && make -f Makefile make[1]: Вход в каталог `/home/alexorleon/Development/Projects/pdf/linux/qtpdf/src' cd lib/ && ( test -e Makefile || /home/alexorleon/Qt/5.9.3/gcc_64/bin/qmake -o Makefile /home/alexorleon/Development/Projects/pdf/linux/qtpdf/src/lib/lib.pro ) && make -f Makefile make[2]: Вход в каталог `/home/alexorleon/Development/Projects/pdf/linux/qtpdf/src/lib' g++ -c -pipe -O2 -fPIC -std=c++1z -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -w -DNOMINMAX -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DOPJ_STATIC -DPNG_PREFIX -DPNG_USE_READ_MACROS -DV8_DEPRECATION_WARNINGS -DFT2_BUILD_LIBRARY -DOPJ_STATIC -DPNG_PREFIX -DPNG_USE_READ_MACROS -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I. -I../3rdparty/pdfium -I../3rdparty/pdfium -I../3rdparty/pdfium/third_party/freetype/include -I../3rdparty/pdfium/third_party/freetype/include/freetype -I../3rdparty/pdfium/third_party -I../3rdparty/pdfium -I/home/alexorleon/Qt/5.9.3/gcc_64/mkspecs/linux-g++ -o .obj/cfx_systemhandler.o ../3rdparty/pdfium/fpdfsdk/cfx_systemhandler.cpp g++: error: unrecognized command line option ‘-std=c++1z’ make[2]: * [.obj/cfx_systemhandler.o] Ошибка 1 make[2]: Выход из каталога `/home/alexorleon/Development/Projects/pdf/linux/qtpdf/src/lib' make[1]: * [sub-lib-make_first-ordered] Ошибка 2 make[1]: Выход из каталога `/home/alexorleon/Development/Projects/pdf/linux/qtpdf/src' make: *** [sub-src-make_first] Ошибка 2 Странно, ведь в этой версии g++ есть поддержка C++11. Под андроид на make уже другая ошибка: android_armv7 и в PATH добавил SDK, NDK. ... /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): перемещение 0 имеет недопустимый индекс символа 2 /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' .obj/fpdfview.o: In function `FPDF_InitLibraryWithConfig': /home/alexorleon/Development/Projects/pdf/android/qtpdf/src/lib/../3rdparty/pdfium/fpdfsdk/fpdfview.cpp:282: undefined reference to `IJS_Runtime::Initialize(unsigned int, void*)' .obj/fpdfview.o: In function `FPDF_DestroyLibrary': /home/alexorleon/Development/Projects/pdf/android/qtpdf/src/lib/../3rdparty/pdfium/fpdfsdk/fpdfview.cpp:295: undefined reference to `IJS_Runtime::Destroy()' .obj/fsdk_mgr.o: In function `CPDFDoc_Environment::GetJSRuntime()': /home/alexorleon/Development/Projects/pdf/android/qtpdf/src/lib/../3rdparty/pdfium/fpdfsdk/fsdk_mgr.cpp:216: undefined reference to `IJS_Runtime::Create(CPDFDoc_Environment*)' collect2: error: ld returned 1 exit status make[2]: * [qtpdfium] Ошибка 1 make[2]: Выход из каталога `/home/alexorleon/Development/Projects/pdf/android/qtpdf/src/lib' make[1]: * [sub-lib-make_first-ordered] Ошибка 2 make[1]: Выход из каталога `/home/alexorleon/Development/Projects/pdf/android/qtpdf/src' make: *** [sub-src-make_first] Ошибка 2 // ------------------------------ С qtpdfium тоже беда на make: cd src/ && ( test -e Makefile || /home/alexorleon/Qt/5.9.3/gcc_64/bin/qmake -o Makefile /home/alexorleon/Development/Projects/pdf/linux/qtpdfium/src/src.pro ) && make -f Makefile make[1]: Вход в каталог `/home/alexorleon/Development/Projects/pdf/linux/qtpdfium/src' cd pdfium/ && ( test -e Makefile || /home/alexorleon/Qt/5.9.3/gcc_64/bin/qmake -o Makefile /home/alexorleon/Development/Projects/pdf/linux/qtpdfium/src/pdfium/pdfium.pro ) && make -f Makefile Project MESSAGE: perl -w /home/alexorleon/Qt/5.9.3/gcc_64/bin/syncqt.pl -module QtPdfium -version 5.5.0 -outdir /home/alexorleon/Development/Projects/pdf/linux/qtpdfium /home/alexorleon/Development/Projects/pdf/linux/qtpdfium <srcbase> = /home/alexorleon/Development/Projects/pdf/linux/qtpdfium <outbase> = /home/alexorleon/Development/Projects/pdf/linux/qtpdfium QtPdfium: created fwd-include header(s) for <srcbase>/src/pdfium/ { qpdfium.h (2), qpdfiumglobal.h (1), qpdfiumpage.h (2) } QtPdfium: created version header QtPdfium: created master header QtPdfium: created headers.pri file make[2]: Вход в каталог `/home/alexorleon/Development/Projects/pdf/linux/qtpdfium/src/pdfium' perl /home/alexorleon/Qt/5.9.3/gcc_64/mkspecs/features/data/unix/findclasslist.pl < QtPdfium.version.in > QtPdfium.version g++ -c -pipe -O2 -std=c++1z -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -Wvla -Wdate-time -Wshift-overflow=2 -Wduplicated-cond -fno-exceptions -D_REENTRANT -fPIC -D__QT__ -DOPJ_STATIC -DPNG_PREFIX -DPNG_USE_READ_MACROS -DQT_NO_VERSION_TAGGING -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_BUILD_PDFIUM_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DFT2_BUILD_LIBRARY -DQT_NO_EXCEPTIONS -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I. -I../../include -I../../include/QtPdfium -I/home/alexorleon/Development/Projects/pdf/linux/qtpdfium/include/QtPdfium/5.5.0 -I/home/alexorleon/Development/Projects/pdf/linux/qtpdfium/include/QtPdfium/5.5.0/QtPdfium -I../3rdparty/pdfium -I../3rdparty/pdfium/third_party/freetype/include -I../3rdparty/pdfium/third_party/freetype/include/freetype -I/home/alexorleon/Qt/5.9.3/gcc_64/include/QtCore/5.9.3 -I/home/alexorleon/Qt/5.9.3/gcc_64/include/QtCore/5.9.3/QtCore -I/home/alexorleon/Qt/5.9.3/gcc_64/include -I/home/alexorleon/Qt/5.9.3/gcc_64/include/QtGui -I/home/alexorleon/Qt/5.9.3/gcc_64/include/QtCore -I.moc -isystem /usr/include/libdrm -I/home/alexorleon/Qt/5.9.3/gcc_64/mkspecs/linux-g++ -o .obj/cba_annotiterator.o ../3rdparty/pdfium/fpdfsdk/cba_annotiterator.cpp g++: error: unrecognized command line option ‘-std=c++1z’ g++: error: unrecognized command line option ‘-Wdate-time’ g++: error: unrecognized command line option ‘-Wshift-overflow=2’ g++: error: unrecognized command line option ‘-Wduplicated-cond’ make[2]: *** [.obj/cba_annotiterator.o] Ошибка 1 make[2]: Выход из каталога `/home/alexorleon/Development/Projects/pdf/linux/qtpdfium/src/pdfium' make[1]: *** [sub-pdfium-make_first] Ошибка 2 make[1]: Выход из каталога `/home/alexorleon/Development/Projects/pdf/linux/qtpdfium/src' make: *** [sub-src-make_first] Ошибка 2 Третий день уже бьюсь. Подскажите если кто такое делал. Название: Re: Просмотр PDF в приложении Отправлено: ViTech от Январь 31, 2018, 15:45 Цитировать ... Ubuntu 14.04 x64, Qt 5.9.3, gcc 4.8.4 ... g++: error: unrecognized command line option ‘-std=c++1z’ ... Странно, ведь в этой версии g++ есть поддержка C++11. ... ‘-std=c++1z’ - это С++17, так что нужен компилятор поновее. Название: Re: Просмотр PDF в приложении Отправлено: alexorleon от Январь 31, 2018, 15:53 ‘-std=c++1z’ - это С++17, так что нужен компилятор поновее. Вот блин, а вроде только что гуглил. Спасибо, буду пробовать. Название: Re: Просмотр PDF в приложении Отправлено: alexorleon от Февраль 01, 2018, 10:15 Итак. Под линукс действия такие.
Добавляем С++17 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt install gcc-7 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7 Теперь make отрабатывает стабильно. Пример pdfviewer можно запустить через Qt Creator. Все собирается, pdf открывается. Добавил код из примера к себе, изображение страницы создается. Теперь под android. Тут пока не так все гладко. На этапе make снова та же ошибка: ... /usr/bin/ld: /usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o(.debug_line): перемещение 0 имеет недопустимый индекс символа 2 /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/crt1.o: In function `_start': (.text+0x20): undefined reference to `main' .obj/fpdfview.o: In function `FPDF_InitLibraryWithConfig': /home/alexorleon/Development/Projects/pdf/android/qtpdf/src/lib/../3rdparty/pdfium/fpdfsdk/fpdfview.cpp:282: undefined reference to `IJS_Runtime::Initialize(unsigned int, void*)' .obj/fpdfview.o: In function `FPDF_DestroyLibrary': /home/alexorleon/Development/Projects/pdf/android/qtpdf/src/lib/../3rdparty/pdfium/fpdfsdk/fpdfview.cpp:295: undefined reference to `IJS_Runtime::Destroy()' .obj/fsdk_mgr.o: In function `CPDFDoc_Environment::GetJSRuntime()': /home/alexorleon/Development/Projects/pdf/android/qtpdf/src/lib/../3rdparty/pdfium/fpdfsdk/fsdk_mgr.cpp:216: undefined reference to `IJS_Runtime::Create(CPDFDoc_Environment*)' collect2: error: ld returned 1 exit status make[2]: *** [qtpdfium] Ошибка 1 make[2]: Выход из каталога `/home/alexorleon/Development/Projects/pdf/android/qtpdf/src/lib' make[1]: *** [sub-lib-make_first-ordered] Ошибка 2 make[1]: Выход из каталога `/home/alexorleon/Development/Projects/pdf/android/qtpdf/src' make: *** [sub-src-make_first] Ошибка 2 Такое ощущение, что QtPdf под андроид можно собрать только на винде используя компилятор VS. Есть мысли по поводу IJS_Runtime, что за зверь и в чем может быть причина ошибки? Название: [РЕШЕНО] Просмотр PDF в приложении Отправлено: alexorleon от Февраль 06, 2018, 07:55 Собрал непосредственно в Qt Creator. Видимо через терминал чего-то не хватает.
Еще нужно добавить манифест и явно указать библиотеку в .pro файле с помощью ANDROID_EXTRA_LIBS Всем спасибо! |