From cbad3ef7824dcad235e95581127dbc4df696d6d3 Mon Sep 17 00:00:00 2001
From: Even Rouault <even.rouault@spatialys.com>
Date: Sat, 16 May 2026 14:53:16 +0200
Subject: [PATCH] Poppler: add compatibility with future 26.06

---
 frmts/pdf/CMakeLists.txt |  8 +++++++-
 frmts/pdf/pdfdataset.cpp | 18 ++++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)

diff --git a/frmts/pdf/CMakeLists.txt b/frmts/pdf/CMakeLists.txt
index 34e8925db8be..b78591cc9959 100644
--- a/frmts/pdf/CMakeLists.txt
+++ b/frmts/pdf/CMakeLists.txt
@@ -67,12 +67,18 @@ if (GDAL_USE_POPPLER)
   if ("${Poppler_VERSION_MINOR}" MATCHES "0?[0-9]+")
     string(REGEX REPLACE "0?([0-9]+)" "\\1" Poppler_VERSION_MINOR ${Poppler_VERSION_MINOR})
   endif ()
+  string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" Poppler_VERSION_MICRO ${Poppler_VERSION_STRING})
+  # Strip leading zero
+  if ("${Poppler_VERSION_MICRO}" MATCHES "0?[0-9]+")
+    string(REGEX REPLACE "0?([0-9]+)" "\\1" Poppler_VERSION_MICRO ${Poppler_VERSION_MICRO})
+  endif ()
   if (Poppler_VERSION_STRING VERSION_GREATER_EQUAL "24.05")
     target_compile_features(gdal_PDF PRIVATE cxx_std_20)
   endif ()
   target_compile_definitions(gdal_PDF PRIVATE -DHAVE_POPPLER
                                               -DPOPPLER_MAJOR_VERSION=${Poppler_VERSION_MAJOR}
-                                              -DPOPPLER_MINOR_VERSION=${Poppler_VERSION_MINOR})
+                                              -DPOPPLER_MINOR_VERSION=${Poppler_VERSION_MINOR}
+                                              -DPOPPLER_MICRO_VERSION=${Poppler_VERSION_MICRO})
 endif ()
 if (GDAL_USE_PODOFO)
   if( "${PODOFO_VERSION_STRING}" VERSION_GREATER "0.10")
diff --git a/frmts/pdf/pdfdataset.cpp b/frmts/pdf/pdfdataset.cpp
index cd280bdb0178..a29371f6ca62 100644
--- a/frmts/pdf/pdfdataset.cpp
+++ b/frmts/pdf/pdfdataset.cpp
@@ -182,6 +182,23 @@ class GDALPDFOutputDev final : public SplashOutputDev
         }
     }
 
+#if POPPLER_MAJOR_VERSION > 26 ||                                              \
+    (POPPLER_MAJOR_VERSION == 26 && POPPLER_MINOR_VERSION > 5) ||              \
+    (POPPLER_MAJOR_VERSION == 26 && POPPLER_MINOR_VERSION == 5 &&              \
+     POPPLER_MICRO_VERSION > 0)
+    bool setSoftMaskFromImageMask(GfxState *state, Object *ref, Stream *str,
+                                  int width, int height, bool invert,
+                                  bool inlineImg,
+                                  std::array<double, 6> &baseMatrix) override
+    {
+        if (bEnableBitmap)
+            return SplashOutputDev::setSoftMaskFromImageMask(
+                state, ref, str, width, height, invert, inlineImg, baseMatrix);
+        else
+            str->close();
+        return true;
+    }
+#else
 #if POPPLER_MAJOR_VERSION > 26 ||                                              \
     (POPPLER_MAJOR_VERSION == 26 && POPPLER_MINOR_VERSION >= 2)
     void setSoftMaskFromImageMask(GfxState *state, Object *ref, Stream *str,
@@ -200,6 +217,7 @@ class GDALPDFOutputDev final : public SplashOutputDev
         else
             str->close();
     }
+#endif
 
 #if POPPLER_MAJOR_VERSION > 26 ||                                              \
     (POPPLER_MAJOR_VERSION == 26 && POPPLER_MINOR_VERSION >= 2)
From 581a86960d68e426b50384ed6e45ecb935f0f2a1 Mon Sep 17 00:00:00 2001
From: Even Rouault <even.rouault@spatialys.com>
Date: Mon, 25 May 2026 04:06:20 +0200
Subject: [PATCH] PDF: fix build against latest poppler

---
 frmts/pdf/pdfsdk_headers_poppler.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/frmts/pdf/pdfsdk_headers_poppler.h b/frmts/pdf/pdfsdk_headers_poppler.h
index b54a4407eb..a8284f5e76 100644
--- a/frmts/pdf/pdfsdk_headers_poppler.h
+++ b/frmts/pdf/pdfsdk_headers_poppler.h
@@ -75,6 +75,7 @@
 #include <SplashOutputDev.h>
 #include <GlobalParams.h>
 #include <ErrorCodes.h>
+#include <OptionalContent.h>
 
 /* end of poppler xpdf includes */
 
-- 
2.51.0

From b3f839f2515b023e4a7cf099b7ce1626ccb24eac Mon Sep 17 00:00:00 2001
From: Even Rouault <even.rouault@spatialys.com>
Date: Sun, 17 May 2026 15:34:50 +0200
Subject: [PATCH] Poppler: add compatibility with future 26.06 (continuation)

---
 frmts/pdf/pdfobject.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/frmts/pdf/pdfobject.cpp b/frmts/pdf/pdfobject.cpp
index ae0e2b974b..224f3653bb 100644
--- a/frmts/pdf/pdfobject.cpp
+++ b/frmts/pdf/pdfobject.cpp
@@ -1343,8 +1343,15 @@ std::map<CPLString, GDALPDFObject *> &GDALPDFDictionaryPoppler::GetValues()
     int nLength = m_poDict->getLength();
     for (i = 0; i < nLength; i++)
     {
+#if POPPLER_MAJOR_VERSION > 26 ||                                              \
+    (POPPLER_MAJOR_VERSION == 26 && POPPLER_MINOR_VERSION > 5) ||              \
+    (POPPLER_MAJOR_VERSION == 26 && POPPLER_MINOR_VERSION == 5 &&              \
+     POPPLER_MICRO_VERSION > 0)
+        Get(m_poDict->getKey(i).c_str());
+#else
         const char *pszKey = m_poDict->getKey(i);
         Get(pszKey);
+#endif
     }
     return m_map;
 }
-- 
2.51.0

From 7b8b8de28bbd200b0fd3b09147fdc68b5bf5ce20 Mon Sep 17 00:00:00 2001
From: Even Rouault <even.rouault@spatialys.com>
Date: Tue, 26 May 2026 16:50:22 +0200
Subject: [PATCH] PDF: fix build against latest poppler 26.05.99dev (again)

---
 frmts/pdf/pdfdataset.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/frmts/pdf/pdfdataset.cpp b/frmts/pdf/pdfdataset.cpp
index a29371f6ca..04c6232198 100644
--- a/frmts/pdf/pdfdataset.cpp
+++ b/frmts/pdf/pdfdataset.cpp
@@ -5211,7 +5211,14 @@ PDFDataset *PDFDataset::Open(GDALOpenInfo *poOpenInfo)
 #ifdef HAVE_POPPLER
     if (bUseLib.test(PDFLIB_POPPLER))
     {
+#if POPPLER_MAJOR_VERSION > 26 ||                                              \
+    (POPPLER_MAJOR_VERSION == 26 && POPPLER_MINOR_VERSION > 5) ||              \
+    (POPPLER_MAJOR_VERSION == 26 && POPPLER_MINOR_VERSION == 5 &&              \
+     POPPLER_MICRO_VERSION > 0)
+        const auto *psMediaBox = &(poPagePoppler->getMediaBox());
+#else
         const auto *psMediaBox = poPagePoppler->getMediaBox();
+#endif
         dfX1 = psMediaBox->x1;
         dfY1 = psMediaBox->y1;
         dfX2 = psMediaBox->x2;
-- 
2.51.0

