return (osStr = GDALPDFGetUTF8StringFromBytes(reinterpret_cast<const GByte*>(gooString->getCString()),
static_cast<int>(gooString->getLength())));
}
+From 69e07012533b8393edd8b9ec4da6d239d204858a Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+Date: Fri, 12 Oct 2018 19:02:40 +0200
+Subject: [PATCH] Add support for Poppler 0.69 (fixes #1004)
+
+---
+ gdal/GDALmake.opt.in | 1 +
+ gdal/configure | 61 ++++++++++++++++++++++++++---------
+ gdal/configure.ac | 56 +++++++++++++++++++++++---------
+ gdal/frmts/pdf/GNUmakefile | 4 +++
+ gdal/frmts/pdf/makefile.vc | 6 +++-
+ gdal/frmts/pdf/pdfdataset.cpp | 12 +++++++
+ gdal/nmake.opt | 2 ++
+ 7 files changed, 111 insertions(+), 31 deletions(-)
+
+diff --git a/gdal/GDALmake.opt.in b/gdal/GDALmake.opt.in
+index c3b5b34f92b..eaf005e5a14 100644
+--- a/gdal/GDALmake.opt.in
++++ b/gdal/GDALmake.opt.in
+@@ -473,6 +473,7 @@ POPPLER_BASE_STREAM_HAS_TWO_ARGS = @POPPLER_BASE_STREAM_HAS_TWO_ARGS@
+ POPPLER_0_20_OR_LATER = @POPPLER_0_20_OR_LATER@
+ POPPLER_0_23_OR_LATER = @POPPLER_0_23_OR_LATER@
+ POPPLER_0_58_OR_LATER = @POPPLER_0_58_OR_LATER@
++POPPLER_0_69_OR_LATER = @POPPLER_0_69_OR_LATER@
+ POPPLER_INC = @POPPLER_INC@
+ POPPLER_PLUGIN_LIB = @POPPLER_PLUGIN_LIB@
+
+index 857f7fdb445..b6e59020c5b 100644
+--- a/gdal/configure.ac
++++ b/gdal/configure.ac
+@@ -4446,6 +4446,7 @@ POPPLER_BASE_STREAM_HAS_TWO_ARGS=no
+ POPPLER_0_20_OR_LATER=no
+ POPPLER_0_23_OR_LATER=no
+ POPPLER_0_58_OR_LATER=no
++POPPLER_0_69_OR_LATER=no
+
+ AC_MSG_CHECKING([for poppler])
+
+@@ -4486,21 +4487,45 @@ if test "$with_poppler" != "no" -a "$with_poppler" != ""; then
+
+ CHECK_OTHER_POPPLER_VERSION=yes
+
+- # And now we check if we have Poppler >= 0.58.0
+- AC_MSG_CHECKING([if Object does have new API (>= 0.58.0)])
+- rm -f testpoppler.*
+- echo '#include <poppler/Object.h>' > testpoppler.cpp
+- echo 'int main(int argc, char** argv) { Object o(objNull); return 0; }' >> testpoppler.cpp
+- if test -z "`${CXX} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then
+- POPPLER_0_58_OR_LATER=yes
+- POPPLER_0_23_OR_LATER=yes
+- POPPLER_0_20_OR_LATER=yes
+- POPPLER_BASE_STREAM_HAS_TWO_ARGS=yes
+- POPPLER_HAS_OPTCONTENT=yes
+- CHECK_OTHER_POPPLER_VERSION=no
+- AC_MSG_RESULT([yes])
+- else
+- AC_MSG_RESULT([no])
++ if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then
++ AC_MSG_CHECKING([if OptionalContent has API >= 0.69.0])
++ rm -f testpoppler.*
++ echo '#include <poppler/OptionalContent.h>' > testpoppler.cpp
++ echo 'int main(int argc, char** argv) {' >> testpoppler.cpp
++ echo 'OCGs ocg(nullptr, nullptr);' >> testpoppler.cpp
++ echo 'ocg.getOCGs().size();' >> testpoppler.cpp
++ echo 'return 0; }' >> testpoppler.cpp
++ if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then
++ POPPLER_0_69_OR_LATER=yes
++ POPPLER_0_58_OR_LATER=yes
++ POPPLER_0_23_OR_LATER=yes
++ POPPLER_0_20_OR_LATER=yes
++ POPPLER_BASE_STREAM_HAS_TWO_ARGS=yes
++ POPPLER_HAS_OPTCONTENT=yes
++ CHECK_OTHER_POPPLER_VERSION=no
++ AC_MSG_RESULT([yes])
++ else
++ AC_MSG_RESULT([no])
++ fi
++ fi
++
++ if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then
++ # And now we check if we have Poppler >= 0.58.0
++ AC_MSG_CHECKING([if Object does have new API (>= 0.58.0)])
++ rm -f testpoppler.*
++ echo '#include <poppler/Object.h>' > testpoppler.cpp
++ echo 'int main(int argc, char** argv) { Object o(objNull); return 0; }' >> testpoppler.cpp
++ if test -z "`${CXX} ${CXXFLAGS} ${CPPFLAGS} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then
++ POPPLER_0_58_OR_LATER=yes
++ POPPLER_0_23_OR_LATER=yes
++ POPPLER_0_20_OR_LATER=yes
++ POPPLER_BASE_STREAM_HAS_TWO_ARGS=yes
++ POPPLER_HAS_OPTCONTENT=yes
++ CHECK_OTHER_POPPLER_VERSION=no
++ AC_MSG_RESULT([yes])
++ else
++ AC_MSG_RESULT([no])
++ fi
+ fi
+
+ if test "$CHECK_OTHER_POPPLER_VERSION" = "yes"; then
+@@ -4585,6 +4610,7 @@ AC_SUBST(POPPLER_BASE_STREAM_HAS_TWO_ARGS, $POPPLER_BASE_STREAM_HAS_TWO_ARGS)
+ AC_SUBST(POPPLER_0_20_OR_LATER, $POPPLER_0_20_OR_LATER)
+ AC_SUBST(POPPLER_0_23_OR_LATER, $POPPLER_0_23_OR_LATER)
+ AC_SUBST(POPPLER_0_58_OR_LATER, $POPPLER_0_58_OR_LATER)
++AC_SUBST(POPPLER_0_69_OR_LATER, $POPPLER_0_69_OR_LATER)
+ AC_SUBST(POPPLER_INC, $POPPLER_INC)
+ AC_SUBST(POPPLER_PLUGIN_LIB, $POPPLER_PLUGIN_LIB)
+
+diff --git a/gdal/frmts/pdf/GNUmakefile b/gdal/frmts/pdf/GNUmakefile
+index 2014070eac7..618072f05d3 100644
+--- a/gdal/frmts/pdf/GNUmakefile
++++ b/gdal/frmts/pdf/GNUmakefile
+@@ -35,6 +35,10 @@ ifeq ($(POPPLER_0_58_OR_LATER),yes)
+ CPPFLAGS += -DPOPPLER_0_58_OR_LATER
+ endif
+
++ifeq ($(POPPLER_0_69_OR_LATER),yes)
++CPPFLAGS += -DPOPPLER_0_69_OR_LATER
++endif
++
+ ifeq ($(HAVE_PODOFO),yes)
+ CPPFLAGS += -DHAVE_PODOFO
+ endif
+diff --git a/gdal/frmts/pdf/makefile.vc b/gdal/frmts/pdf/makefile.vc
+index b4fa14d0a18..ad76d3de70c 100644
+--- a/gdal/frmts/pdf/makefile.vc
++++ b/gdal/frmts/pdf/makefile.vc
+@@ -14,7 +14,7 @@ OBJ = $(OBJ) ..\..\ogr\ogrsf_frmts\mem\ogrmemdatasource.obj ..\..\ogr\ogrsf_frmt
+ EXTRAFLAGS = -I..\vrt -I..\mem -I..\..\ogr\ogrsf_frmts\mem $(POPPLER_EXTRAFLAGS) $(PODOFO_EXTRAFLAGS) $(PDFIUM_EXTRAFLAGS)
+
+ !IFDEF POPPLER_ENABLED
+-POPPLER_EXTRAFLAGS = $(POPPLER_CFLAGS) $(POPPLER_HAS_OPTCONTENT_FLAGS) $(POPPLER_BASE_STREAM_HAS_TWO_ARGS_FLAGS) $(POPPLER_0_20_OR_LATER_FLAGS) $(POPPLER_0_23_OR_LATER_FLAGS) $(POPPLER_0_58_OR_LATER_FLAGS) -DHAVE_POPPLER
++POPPLER_EXTRAFLAGS = $(POPPLER_CFLAGS) $(POPPLER_HAS_OPTCONTENT_FLAGS) $(POPPLER_BASE_STREAM_HAS_TWO_ARGS_FLAGS) $(POPPLER_0_20_OR_LATER_FLAGS) $(POPPLER_0_23_OR_LATER_FLAGS) $(POPPLER_0_58_OR_LATER_FLAGS) $(POPPLER_0_69_OR_LATER_FLAGS) -DHAVE_POPPLER
+
+ !IFDEF POPPLER_HAS_OPTCONTENT
+ POPPLER_HAS_OPTCONTENT_FLAGS = -DPOPPLER_HAS_OPTCONTENT
+@@ -36,6 +36,10 @@ POPPLER_0_23_OR_LATER_FLAGS = -DPOPPLER_0_23_OR_LATER
+ POPPLER_0_58_OR_LATER_FLAGS = -DPOPPLER_0_58_OR_LATER
+ !ENDIF
+
++!IFDEF POPPLER_0_69_OR_LATER
++POPPLER_0_69_OR_LATER_FLAGS = -DPOPPLER_0_69_OR_LATER
++!ENDIF
++
+ !ENDIF
+
+ !IFDEF PODOFO_ENABLED
+diff --git a/gdal/frmts/pdf/pdfdataset.cpp b/gdal/frmts/pdf/pdfdataset.cpp
+index ee89fd07564..1a56f57ee06 100644
+--- a/gdal/frmts/pdf/pdfdataset.cpp
++++ b/gdal/frmts/pdf/pdfdataset.cpp
+@@ -3440,10 +3440,16 @@ void PDFDataset::FindLayersPoppler()
+ }
+ else
+ {
++#ifdef POPPLER_0_69_OR_LATER
++ for( const auto& refOCGPair: optContentConfig->getOCGs() )
++ {
++ auto ocg = refOCGPair.second.get();
++#else
+ GooList* ocgList = optContentConfig->getOCGs();
+ for(int i=0;i<ocgList->getLength();i++)
+ {
+ OptionalContentGroup* ocg = (OptionalContentGroup*) ocgList->get(i);
++#endif
+ if( ocg != NULL && ocg->getName() != NULL )
+ {
+ const char* pszLayerName = (const char*)ocg->getName()->getCString();
+@@ -3472,10 +3478,16 @@ void PDFDataset::TurnLayersOnOffPoppler()
+ {
+ int i;
+ int bAll = EQUAL(pszLayers, "ALL");
++#ifdef POPPLER_0_69_OR_LATER
++ for( const auto& refOCGPair: optContentConfig->getOCGs() )
++ {
++ auto ocg = refOCGPair.second.get();
++#else
+ GooList* ocgList = optContentConfig->getOCGs();
+ for(i=0;i<ocgList->getLength();i++)
+ {
+ OptionalContentGroup* ocg = (OptionalContentGroup*) ocgList->get(i);
++#endif
+ ocg->setState( (bAll) ? OptionalContentGroup::On : OptionalContentGroup::Off );
+ }
+
+diff --git a/gdal/nmake.opt b/gdal/nmake.opt
+index a3b88583425..c9ca28d3cd9 100644
+--- a/gdal/nmake.opt
++++ b/gdal/nmake.opt
+@@ -632,6 +632,7 @@ OCI_INCLUDE = -I$(ORACLE_HOME)\oci\include
+ # Uncomment POPPLER_0_20_OR_LATER = YES for Poppler >= 0.20.0
+ # Uncomment POPPLER_0_23_OR_LATER = YES for Poppler >= 0.23.0
+ # Uncomment POPPLER_0_58_OR_LATER = YES for Poppler >= 0.58.0
++# Uncomment POPPLER_0_69_OR_LATER = YES for Poppler >= 0.69.0
+ #POPPLER_ENABLED = YES
+ #POPPLER_CFLAGS = -Ie:/kde/include -Ie:/kde/include/poppler
+ #POPPLER_HAS_OPTCONTENT = YES
+@@ -639,6 +640,7 @@ OCI_INCLUDE = -I$(ORACLE_HOME)\oci\include
+ #POPPLER_0_20_OR_LATER = YES
+ #POPPLER_0_23_OR_LATER = YES
+ #POPPLER_0_58_OR_LATER = YES
++#POPPLER_0_69_OR_LATER = YES
+ #POPPLER_LIBS = e:/kde/lib/poppler.lib e:/kde/lib/freetype.lib e:/kde/lib/liblcms-1.lib advapi32.lib gdi32.lib
+
+ # Uncomment for PDF support