--- /branches/1.9/gdal/configure (revision 24333) +++ /branches/1.9/gdal/configure (revision 24437) @@ -639,4 +639,5 @@ HAVE_PODOFO POPPLER_INC +POPPLER_0_20_OR_LATER POPPLER_BASE_STREAM_HAS_TWO_ARGS POPPLER_HAS_OPTCONTENT @@ -26470,4 +26471,5 @@ POPPLER_HAS_OPTCONTENT=no POPPLER_BASE_STREAM_HAS_TWO_ARGS=no +POPPLER_0_20_OR_LATER=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for poppler" >&5 @@ -26536,4 +26538,20 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } + + # And now we check if we have Poppler >= 0.20.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have Poppler >= 0.20.0" >&5 +$as_echo_n "checking if we have Poppler >= 0.20.0... " >&6; } + rm -f testpoppler.* + echo '#include ' > testpoppler.cpp + echo 'int main(int argc, char** argv) { setErrorCallback(0,0); return 0; }' >> testpoppler.cpp + if test -z "`${CXX} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then + POPPLER_0_20_OR_LATER=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 @@ -26556,4 +26574,6 @@ POPPLER_BASE_STREAM_HAS_TWO_ARGS=$POPPLER_BASE_STREAM_HAS_TWO_ARGS + +POPPLER_0_20_OR_LATER=$POPPLER_0_20_OR_LATER POPPLER_INC=$POPPLER_INC --- /branches/1.9/gdal/nmake.opt (revision 23610) +++ /branches/1.9/gdal/nmake.opt (revision 24437) @@ -469,8 +469,10 @@ # Uncomment for PDF support # Uncomment POPPLER_BASE_STREAM_HAS_TWO_ARGS = YES for Poppler >= 0.16.0 +# Uncomment POPPLER_0_20_OR_LATER = YES for Poppler >= 0.20.0 #POPPLER_ENABLED = YES #POPPLER_CFLAGS = -Ie:/kde/include -Ie:/kde/include/poppler #POPPLER_HAS_OPTCONTENT = YES #POPPLER_BASE_STREAM_HAS_TWO_ARGS = YES +#POPPLER_0_20_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 --- /branches/1.9/gdal/configure.in (revision 24333) +++ /branches/1.9/gdal/configure.in (revision 24437) @@ -2941,4 +2941,5 @@ POPPLER_HAS_OPTCONTENT=no POPPLER_BASE_STREAM_HAS_TWO_ARGS=no +POPPLER_0_20_OR_LATER=no AC_MSG_CHECKING([for poppler]) @@ -3000,4 +3001,17 @@ POPPLER_BASE_STREAM_HAS_TWO_ARGS=yes AC_MSG_RESULT([yes]) + + # And now we check if we have Poppler >= 0.20.0 + AC_MSG_CHECKING([if we have Poppler >= 0.20.0]) + rm -f testpoppler.* + echo '#include ' > testpoppler.cpp + echo 'int main(int argc, char** argv) { setErrorCallback(0,0); return 0; }' >> testpoppler.cpp + if test -z "`${CXX} testpoppler.cpp -c ${POPPLER_INC} 2>&1`" ; then + POPPLER_0_20_OR_LATER=yes + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + else AC_MSG_RESULT([no]) @@ -3015,4 +3029,5 @@ AC_SUBST(POPPLER_HAS_OPTCONTENT, $POPPLER_HAS_OPTCONTENT) 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_INC, $POPPLER_INC) --- /branches/1.9/gdal/frmts/pdf/pdfdataset.cpp (revision 23986) +++ /branches/1.9/gdal/frmts/pdf/pdfdataset.cpp (revision 24437) @@ -327,5 +327,9 @@ poSplashOut = new SplashOutputDev(splashModeRGB8, 4, gFalse, sColor); PDFDoc* poDoc = poGDS->poDoc; +#ifdef POPPLER_0_20_OR_LATER + poSplashOut->startDoc(poDoc); +#else poSplashOut->startDoc(poDoc->getXRef()); +#endif double dfDPI = poGDS->dfDPI; @@ -518,4 +522,19 @@ #ifdef USE_POPPLER +#ifdef POPPLER_0_20_OR_LATER +static void PDFDatasetErrorFunction(void* userData, ErrorCategory eErrCatagory, int nPos, char *pszMsg) +{ + CPLString osError; + + if (nPos >= 0) + osError.Printf("Pos = %d, ", nPos); + osError += pszMsg; + + if (strcmp(osError.c_str(), "Incorrect password") == 0) + return; + + CPLError(CE_Failure, CPLE_AppDefined, "%s", osError.c_str()); +} +#else static void PDFDatasetErrorFunction(int nPos, char *pszMsg, va_list args) { @@ -531,4 +550,5 @@ CPLError(CE_Failure, CPLE_AppDefined, "%s", osError.c_str()); } +#endif #endif @@ -567,5 +587,9 @@ /* Set custom error handler for poppler errors */ +#ifdef POPPLER_0_20_OR_LATER + setErrorCallback(PDFDatasetErrorFunction, NULL); +#else setErrorFunction(PDFDatasetErrorFunction); +#endif /* poppler global variable */ --- /branches/1.9/gdal/frmts/pdf/makefile.vc (revision 22493) +++ /branches/1.9/gdal/frmts/pdf/makefile.vc (revision 24437) @@ -7,5 +7,5 @@ !IFDEF POPPLER_ENABLED -EXTRAFLAGS = $(POPPLER_CFLAGS) $(POPPLER_HAS_OPTCONTENT_FLAGS) $(POPPLER_BASE_STREAM_HAS_TWO_ARGS_FLAGS) -DUSE_POPPLER +EXTRAFLAGS = $(POPPLER_CFLAGS) $(POPPLER_HAS_OPTCONTENT_FLAGS) $(POPPLER_BASE_STREAM_HAS_TWO_ARGS_FLAGS) $(POPPLER_0_20_OR_LATER_FLAGS) -DUSE_POPPLER !IFDEF POPPLER_HAS_OPTCONTENT @@ -15,4 +15,8 @@ !IFDEF POPPLER_BASE_STREAM_HAS_TWO_ARGS POPPLER_BASE_STREAM_HAS_TWO_ARGS_FLAGS = -DPOPPLER_BASE_STREAM_HAS_TWO_ARGS +!ENDIF + +!IFDEF POPPLER_0_20_OR_LATER +POPPLER_0_20_OR_LATER_FLAGS = -DPOPPLER_0_20_OR_LATER !ENDIF --- /branches/1.9/gdal/frmts/pdf/GNUmakefile (revision 22491) +++ /branches/1.9/gdal/frmts/pdf/GNUmakefile (revision 24437) @@ -16,4 +16,9 @@ endif +ifeq ($(POPPLER_0_20_OR_LATER),yes) +CPPFLAGS += -DPOPPLER_0_20_OR_LATER +endif + + CPPFLAGS := $(GDAL_INCLUDE) $(CPPFLAGS) $(POPPLER_INC) $(PODOFO_INC) --- /branches/1.9/gdal/GDALmake.opt.in (revision 24419) +++ /branches/1.9/gdal/GDALmake.opt.in (revision 24437) @@ -386,4 +386,5 @@ POPPLER_HAS_OPTCONTENT = @POPPLER_HAS_OPTCONTENT@ POPPLER_BASE_STREAM_HAS_TWO_ARGS = @POPPLER_BASE_STREAM_HAS_TWO_ARGS@ +POPPLER_0_20_OR_LATER = @POPPLER_0_20_OR_LATER@ POPPLER_INC = @POPPLER_INC@