La librairie Poppler, et plus particulièrement poppler-qt5 permet d’afficher des pdf lorsqu’on utilise la bibliothèque graphique Qt5. Elle s’avère cependant un brin technique à compiler sous Mac (alors que sous linux, elle existe dans les packages de la plupart des distributions). Les opérations suivantes ont été effectuées sous Mac OSX 10.10 Yosemite MacOS 10.12 Sierra.
Préparation
- Installer pkg-config. Cela peut se faire en compilant les sources, ou en utilisant un binaire précompilé disponible par exemple ici.
- Mettre à jour le chemin de pkg-config et ajouter le binaire au PATH, en ajoutant ces lignes au fichier ~/.bash_profile :
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig export PATH=$PATH:/opt/pkgconfig/bin
- Compiler et installer Freetype2 :
./configure make sudo make install
- Compiler et installer Fontconfig
./configure make sudo make install
- Compiler et installer Openjpeg
C’est un peu pénible si on veut compiler des sources (utilisation de CMake…). Mais on trouve une archive contenant tout ce qu’il faut déjà compilé pour Mac OS X sur cette page.
Il faut récupérer l’archive contenant Darwin
: récemment il s’agissait de openjpeg-2.1.0-Darwin-i386.tar.gz. Il faut maintenant la décompresser et aller tout mettre dans les bons répertoires :
tar xvzf openjpeg-2.1.0-Darwin-i386.tar.gz cd openjpeg-2.1.0-Darwin-i386 sudo cp -R * /usr/local/
- Installer (si ce n’est pas déjà fait) Qt5. On suppose que l’installation (ici de la version
5.45.8) est faite dans : /Users/gwenael/Qt5.8.0 (à adapter à votre installation évidemment).
- Ajouter le chemin des exécutables au PATH en ajoutant ces lignes au fichier ~/.bash_profile :
export PATH=$PATH:/Users/gwenael/Qt5.8.0/5.8/clang_64/bin
- Quitter le Terminal et le relancer pour que les modifications soient prises en compte.
- Pour que Poppler trouve les headers de Qt5 (qui sont dans des répertoires .framework), après de nombreuses tentatives je n’ai pas trouvé d’autre moyen que de créer des liens symboliques dans le répertoire include de Qt :
cd /Users/gwenael/Qt5.8.0/5.8/clang_64/include ln -s ../lib/QtCore.framework/Versions/5/Headers/ QtCore ln -s ../lib/QtGui.framework/Versions/5/Headers/ QtGui ln -s ../lib/QtXml.framework/Versions/5/Headers/ QtXml ln -s ../lib/QtWidgets.framework/Versions/5/Headers/ QtWidgets ln -s ../lib/QtTest.framework/Versions/5/Headers/ QtTest
Installation
- Télécharger les sources de Poppler. Décompresser le fichier et se rendre dans le répertoire créé.
- Pour une raison inconnue, un fichier source posait problème, le compilateur ne réussissant pas trouver des fichiers d’en-tête. Il s’agit du fichier : qt5/tests/test-render-to-file.cpp dans lequel il faut remplacer au début :
#include <QtCore/QDebug> #include <QtCore/QFile> #include <QGuiApplication> #include <QImage>
par
#include <QtCore/QDebug> #include <QtCore/QFile> #include <QtGui/QGuiApplication> #include <QtGui/QImage>
- Lancer les commandes suivantes avant la configuration de poppler (ou mieux, copier ces lignes dans le fichier ~/.bash_profile pour ne pas avoir à recommencer une prochaine fois) :
export QTDIR="/Users/gwenael/Qt5.8.0/5.8/clang_64" export POPPLER_QT5_CFLAGS=-I$QTDIR/include export POPPLER_QT5_CXXFLAGS=-I$QTDIR/include export POPPLER_QT5_TEST_CFLAGS=-I$QTDIR/include export POPPLER_QT5_LIBS="-F$QTDIR/lib -framework QtCore -framework QtGui -framework QtXml -framework QtWidgets" export POPPLER_QT5_TEST_LIBS="-F$QTDIR/lib -framework QtCore -framework QtGui -framework QtXml -framework QtWidget
- Mise à jour février 2017 : avec la version 0.51 de Poppler et 5.8 de Qt5, j’ai été obligé de préciser avant la configuration de Poppler :
export CXXFLAGS=-std=c++11
- On peut alors lancer la configuration :
./configure --enable-poppler-qt5
Bien vérifier qu’à la fin de la configuration la ligne suivante soit présente :
qt5 wrapper : yes
Le lancement direct de make pose problème : le compilateur installé par XCode ne reconnaissant pas un des arguments de compilation du Makefile. Solution un peu violente : supprimer l’argument en question directement dans le Makefile :
find . -name "Makefile" | xargs -L 1 perl -pi -e 's/-fno-check-new//g'
Attention : à réitérer après chaque lancement de configure si vous faites plusieurs essais.
- On peut alors enfin lancer :
make sudo make install
Utilisation
La librairie poppler (avec poppler-qt5) est alors installée sur le système. Pour l’utiliser dans un programme C++ utilisant Qt5, ajouter dans le fichier .pro :
INCLUDEPATH += /usr/local/include/poppler/qt5 LIBS += -L/usr/local/lib/ -lpoppler-qt5
Et ajouter dans le fichier source utilisant la librairie :
include <poppler-qt5>
7 commentaires sur “Compiler Poppler pour Qt5.8 sous MacOS Sierra”
Bonjour et un immense merci pour votre tuto dont je me sers depuis maintenant 2 ans.
J’ai découvert qu’en utilisant homebrew, on peut simplement taper
brew install popper
pour installer en une seule fois freetype, fontconfig, openjpeg et poppler.
malheureusement l’instruction
brew install popper –with-qt
telle qu’elle est documentée dans homebrew ne fonctionne pas et il faut compiler la lib pour Qt par la suite pour avoir poppler fonctionnel dans Qt.
Mais votre tuto ne marche plus avec les versions de poppler postérieures à la 0.59 qui ne se compilent pas de la même façon.
Auriez-vous une idée du howto pour les dernières versions de poppler?
Encore un grand merci
Bonjour,
Votre tuto est top et toujours fonctionnel ! 🙂
Cependant, je me demandais si vous n’aviez jamais essayé de compiler poppler pour l’utiliser dans un projet à destination Android.
La lib n’est pas reconnue par le compilateur Android lorsqu’on souhaite compiler pour Android dans Qt Creator.
Je me demandais si le procédé de compilation pour Android était identique à celui-ci, à l’exception de quelques chemins à modifier.
Merci de votre réponse
Bonjour,
Merci pour les compliments.
Par contre je ne vais pas pouvoir vous aider sur Android, n’ayant jamais développé de projets Android/Qt5.
Il faudrait peut-être commencer par chercher plutôt sur le forum ou la liste de poppler pour savoir si cela peut se faire.
Désolé.
PS : par contre si vous finissez par trouver la solution, n’hésitez pas à me le dire que je puisse compléter le tuto !
Bon courage.
Je viens de mettre à jour le tuto avec la partie installation d’openjpeg.
Bonjour,
C’est enfin tombé en marche. En informatique nous ne sommes jamais à l’abri d’un bon fonctionnement…
J’ai fait un petit package contenant toutes les archives nécessaires, avec un petit script qui automatise toutes les opérations en une seule fois. Anisi lors du prochain crash du SSD je serai à l’abri (un SAMSUNG 840 PRO a une durée de vie d’environ deux ans chez moi. Usage très intensif avec de grandes et nombreuses sessions de compilation, cela brûle les cellules très rapidement. Mais quand on a goûté au SSD … on en remet un autre).
Si quelqu’un veux le fourbi, je suis à sa disposition.
Bonne journée à toutes et tous et encore merci pour la solution présentée ici.
Bonjour et vraiment un grand merci pour ce travail.
Lors d’un crash de mon HD, pour recopier mun de mes programmes, il me faut réinstaller poppler pour Qt5 sur une machine OSX yosemite tout neuf sur laquelle Xcode et Qt5 viennent d’être installés.
Après avoir scrupuleusement suivi les étapes décrites
le configure de poppler ne passe pas et me retourne l’erreur suivante :
configure:19482: result: no
configure:19482: checking openjpeg.h presence
configure:19482: g++ -E conftest.cpp
conftest.cpp:36:10: fatal error: ‘openjpeg.h’ file not found
#include
En attendant une de vos idées ou réponse, je googuelise pour trouver la solution.
Il semble que la lib openjpeg soit aussi nécessaire, mais pour la compiler il faut aussi installer CMake….
NB : j’ai fait un package qui contient toutes les archives :
fontconfig-2.11.92.tar
freetype-2.5.5.tar
poppler-0.31.0.tar.xz
PkgConfig-2.pkg
et le script qui va avec pour automatiser toutes les opérations.
Merci encore.
Merci pour vos commentaires.
Effectivement je me suis aperçu aussi après coup qu’il y avait besoin d’installer libopenjpeg. Je ne sais pas comment vous avez procédé finalement mais il n’y a pas besoin de compiler avec CMake car le site propose une archive précompilée pour Mac (version actuelle : openjpeg-2.1.0-Darwin-i386) il faut en revanche installer les différents fichiers aux bons emplacement sur la machine.
Je vais mettre à jour le tuto rapidement.