--- /dev/null
+From 17e98757e78969a199d1d6318f53d088da192191 Mon Sep 17 00:00:00 2001
+From: Even Rouault <even.rouault@spatialys.com>
+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<GooString> osUserPwd;
++ if (pszUserPwd)
++ osUserPwd = std::optional<GooString>(pszUserPwd);
++ poDocPoppler = new PDFDoc(poStream, std::optional<GooString>(), 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<GooString> 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<char**>(apszMDList), "xml:XMP");
+ }
++#if POPPLER_MAJOR_VERSION < 22 || (POPPLER_MAJOR_VERSION == 22 && POPPLER_MINOR_VERSION < 4)
+ delete poMetadata;
++#endif
+ }
+
+ /* Read Info object */