From 17e98757e78969a199d1d6318f53d088da192191 Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Fri, 18 Feb 2022 22:47:01 +0100 Subject: [PATCH] PDF: fix build against Poppler > 22.2 --- frmts/pdf/pdfdataset.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/frmts/pdf/pdfdataset.cpp b/frmts/pdf/pdfdataset.cpp index 22238bd74822..08f8e31c86a7 100644 --- a/frmts/pdf/pdfdataset.cpp +++ b/frmts/pdf/pdfdataset.cpp @@ -4101,8 +4101,6 @@ PDFDataset *PDFDataset::Open( GDALOpenIn #ifdef HAVE_POPPLER if(bUseLib.test(PDFLIB_POPPLER)) { - GooString* poUserPwd = nullptr; - /* Set custom error handler for poppler errors */ #if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 85 setErrorCallback(PDFDatasetErrorFunction); @@ -4136,8 +4134,6 @@ PDFDataset *PDFDataset::Open( GDALOpenIn while( true ) { VSIFSeekL(fp, 0, SEEK_SET); - if (pszUserPwd) - poUserPwd = new GooString(pszUserPwd); #if POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 58 auto poStream = new VSIPDFFileStream(fp, pszFilename, std::move(oObj)); @@ -4145,8 +4141,18 @@ PDFDataset *PDFDataset::Open( GDALOpenIn oObj.getObj()->initNull(); auto poStream = new VSIPDFFileStream(fp, pszFilename, oObj.getObj()); #endif +#if POPPLER_MAJOR_VERSION > 22 || (POPPLER_MAJOR_VERSION == 22 && POPPLER_MINOR_VERSION > 2) + std::optional osUserPwd; + if (pszUserPwd) + osUserPwd = std::optional(pszUserPwd); + poDocPoppler = new PDFDoc(poStream, std::optional(), osUserPwd); +#else + GooString* poUserPwd = nullptr; + if (pszUserPwd) + poUserPwd = new GooString(pszUserPwd); poDocPoppler = new PDFDoc(poStream, nullptr, poUserPwd); delete poUserPwd; +#endif if ( !poDocPoppler->isOk() || poDocPoppler->getNumPages() == 0 ) { --- gdal-3.0.4/frmts/pdf/pdfdataset.cpp.orig 2022-04-15 17:08:03.072819386 +0200 +++ gdal-3.0.4/frmts/pdf/pdfdataset.cpp 2022-04-15 17:43:26.613241927 +0200 @@ -4837,7 +4837,11 @@ PDFDataset *PDFDataset::Open( GDALOpenIn #ifdef HAVE_POPPLER if (bUseLib.test(PDFLIB_POPPLER)) { +#if POPPLER_MAJOR_VERSION > 22 || (POPPLER_MAJOR_VERSION == 22 && POPPLER_MINOR_VERSION > 3) + std::unique_ptr poMetadata = poCatalogPoppler->readMetadata(); +#else GooString* poMetadata = poCatalogPoppler->readMetadata(); +#endif if (poMetadata) { #if (POPPLER_MAJOR_VERSION >= 1 || POPPLER_MINOR_VERSION >= 72) @@ -4851,7 +4855,9 @@ PDFDataset *PDFDataset::Open( GDALOpenIn const char * const apszMDList[2] = { pszContent, nullptr }; poDS->SetMetadata(const_cast(apszMDList), "xml:XMP"); } +#if POPPLER_MAJOR_VERSION < 22 || (POPPLER_MAJOR_VERSION == 22 && POPPLER_MINOR_VERSION < 4) delete poMetadata; +#endif } /* Read Info object */