Index | Thread | Search

From:
Matthias Kilian <kili@outback.escape.de>
Subject:
print/scribus: fix build with new poppler
To:
ports@openbsd.org
Date:
Wed, 18 Feb 2026 21:36:57 +0100

Download raw body.

Thread
  • Matthias Kilian:

    print/scribus: fix build with new poppler

Hi,

this fixes print/scribus with poppler-26.02.0.

To be committed together with poppler, because I'm not sure wether
I properly kept all the #if's from the upstream commit (there were
some conflicts).

Ciao,
	Kili

ps: update for poppler will follow in a few minutes.

Index: patches/patch-scribus_plugins_import_pdf_importpdf_cpp
===================================================================
RCS file: /cvs/ports/print/scribus/patches/patch-scribus_plugins_import_pdf_importpdf_cpp,v
diff -u -p -r1.8 patch-scribus_plugins_import_pdf_importpdf_cpp
--- patches/patch-scribus_plugins_import_pdf_importpdf_cpp	30 Oct 2025 20:57:55 -0000	1.8
+++ patches/patch-scribus_plugins_import_pdf_importpdf_cpp	18 Feb 2026 20:34:37 -0000
@@ -1,9 +1,48 @@
 https://github.com/scribusproject/scribus/commit/188d030acd0cb71e89dbb57695fe52158b6a0959
+https://github.com/scribusproject/scribus/commit/28bd3be104c06b9d4532affe150f7b74fe5b3e59
 
 Index: scribus/plugins/import/pdf/importpdf.cpp
 --- scribus/plugins/import/pdf/importpdf.cpp.orig
 +++ scribus/plugins/import/pdf/importpdf.cpp
-@@ -416,11 +416,11 @@ bool PdfPlug::convert(const QString& fn)
+@@ -79,7 +79,11 @@ QImage PdfPlug::readThumbnail(const QString& fName)
+ 	bgColor[0] = 255;
+ 	bgColor[1] = 255;
+ 	bgColor[2] = 255;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++	SplashOutputDev dev(splashModeXBGR8, 4, bgColor, true);
++#else
+ 	SplashOutputDev dev(splashModeXBGR8, 4, false, bgColor, true);
++#endif
+ 	dev.setVectorAntialias(true);
+ 	dev.setFreeTypeHinting(true, false);
+ 	dev.startDoc(&pdfDoc);
+@@ -154,20 +158,17 @@ bool PdfPlug::import(const QString& fNameIn, const Tra
+ 	}
+ 	double docWidth = PrefsManager::instance().appPrefs.docSetupPrefs.pageWidth;
+ 	double docHeight = PrefsManager::instance().appPrefs.docSetupPrefs.pageHeight;
+-	if (!m_interactive || (flags & LoadSavePlugin::lfInsertPage))
++	if (m_Doc && (!m_interactive || (flags & LoadSavePlugin::lfInsertPage)))
+ 	{
+ 		m_Doc->setPage(docWidth, docHeight, 0, 0, 0, 0, 0, 0, false, false);
+ 		m_Doc->addPage(0);
+ 		m_Doc->view()->addPage(0, true);
+ 	}
+-	else
++	else if (!m_Doc || (flags & LoadSavePlugin::lfCreateDoc))
+ 	{
+-		if (!m_Doc || (flags & LoadSavePlugin::lfCreateDoc))
+-		{
+-			m_Doc = ScCore->primaryMainWindow()->doFileNew(docWidth, docHeight, 0, 0, 0, 0, 0, 0, false, 0, 0, 0, 0, 1, "Custom", true);
+-			ScCore->primaryMainWindow()->HaveNewDoc();
+-			ret = true;
+-		}
++		m_Doc = ScCore->primaryMainWindow()->doFileNew(docWidth, docHeight, 0, 0, 0, 0, 0, 0, false, 0, 0, 0, 0, 1, "Custom", true);
++		ScCore->primaryMainWindow()->HaveNewDoc();
++		ret = true;
+ 	}
+ 
+ 	if ((ret) || (!m_interactive))
+@@ -416,11 +417,11 @@ bool PdfPlug::convert(const QString& fn)
  
  			if (dev->isOk())
  			{
@@ -17,7 +56,33 @@ Index: scribus/plugins/import/pdf/import
  					if (order)
  					{
  						for (int i = 0; i < order->getLength (); ++i)
-@@ -874,25 +874,25 @@ QRectF PdfPlug::getCBox(int box, int pgNum)
+@@ -809,11 +810,15 @@ QImage PdfPlug::readPreview(int pgNum, int width, int 
+ 	bgColor[0] = 255;
+ 	bgColor[1] = 255;
+ 	bgColor[2] = 255;
+-	SplashOutputDev *dev = new SplashOutputDev(splashModeXBGR8, 4, false, bgColor, true);
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++	auto dev = std::make_unique<SplashOutputDev>(splashModeXBGR8, 4, bgColor, true);
++#else
++	auto dev = std::make_unique<SplashOutputDev>(splashModeXBGR8, 4, false, bgColor, true);
++#endif
+ 	dev->setVectorAntialias(true);
+ 	dev->setFreeTypeHinting(true, false);
+ 	dev->startDoc(m_pdfDoc);
+-	m_pdfDoc->displayPage(dev, pgNum, hDPI, vDPI, 0, true, false, false);
++	m_pdfDoc->displayPage(dev.get(), pgNum, hDPI, vDPI, 0, true, false, false);
+ 	SplashBitmap *bitmap = dev->getBitmap();
+ 	int bw = bitmap->getWidth();
+ 	int bh = bitmap->getHeight();
+@@ -851,7 +856,6 @@ QImage PdfPlug::readPreview(int pgNum, int width, int 
+ 		pp.drawRect(cRect);
+ 		pp.end();
+ 	}
+-	delete dev;
+ 	return image;
+ }
+ 
+@@ -874,25 +878,25 @@ QRectF PdfPlug::getCBox(int box, int pgNum)
  
  QString PdfPlug::UnicodeParsedString(const GooString *s1)
  {
Index: patches/patch-scribus_plugins_import_pdf_pdftextrecognition_cpp
===================================================================
RCS file: patches/patch-scribus_plugins_import_pdf_pdftextrecognition_cpp
diff -N patches/patch-scribus_plugins_import_pdf_pdftextrecognition_cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-scribus_plugins_import_pdf_pdftextrecognition_cpp	18 Feb 2026 20:34:37 -0000
@@ -0,0 +1,43 @@
+Fixes for poppler-26.02.0.
+
+https://github.com/scribusproject/scribus/commit/28bd3be104c06b9d4532affe150f7b74fe5b3e59
+
+Index: scribus/plugins/import/pdf/pdftextrecognition.cpp
+--- scribus/plugins/import/pdf/pdftextrecognition.cpp.orig
++++ scribus/plugins/import/pdf/pdftextrecognition.cpp
+@@ -81,7 +81,7 @@ bool PdfTextRecognition::isNewLineOrRegion(QPointF new
+ */
+ PdfGlyph PdfTextRecognition::AddCharCommon(GfxState* state, double x, double y, double dx, double dy, Unicode const* u, int uLen)
+ {
+-	const double * ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	QTransform trans(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 	QPointF charDelta1 = trans.map(QPointF(0.0, 0.0));
+ 	QPointF charDelta2 = trans.map(QPointF(dx, dy));
+@@ -121,7 +121,7 @@ PdfGlyph PdfTextRecognition::AddFirstChar(GfxState* st
+ 	setCharMode(AddCharMode::ADDBASICCHAR);
+ 
+ 	//only need to be called for the very first point
+-	const double * ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	QTransform trans(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 	QPointF glyphPos = trans.map(QPointF(x, y));
+ 
+@@ -136,7 +136,7 @@ PdfGlyph PdfTextRecognition::AddFirstChar(GfxState* st
+ */
+ PdfGlyph PdfTextRecognition::AddBasicChar(GfxState* state, double x, double y, double dx, double dy, double originX, double originY, CharCode code, int nBytes, Unicode const* u, int uLen)
+ {
+-	const double * ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	QTransform trans(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 
+ 	PdfGlyph newGlyph = AddCharCommon(state, x, y, dx, dy, u, uLen);
+@@ -461,7 +461,7 @@ PdfTextOutputDev::~PdfTextOutputDev()
+  */
+ void PdfTextOutputDev::updateTextPos(GfxState* state)
+ {
+-	const double * ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	QTransform trans(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 
+ 	QPointF newPosition = trans.map(QPointF(state->getCurX(), state->getCurY()));
Index: patches/patch-scribus_plugins_import_pdf_slaoutput_cpp
===================================================================
RCS file: /cvs/ports/print/scribus/patches/patch-scribus_plugins_import_pdf_slaoutput_cpp,v
diff -u -p -r1.21 patch-scribus_plugins_import_pdf_slaoutput_cpp
--- patches/patch-scribus_plugins_import_pdf_slaoutput_cpp	9 Jan 2026 19:54:16 -0000	1.21
+++ patches/patch-scribus_plugins_import_pdf_slaoutput_cpp	18 Feb 2026 20:34:37 -0000
@@ -1,7 +1,8 @@
 https://github.com/scribusproject/scribus/commit/188d030acd0cb71e89dbb57695fe52158b6a0959
 (and local changes for FoFiTrueType::make())
+https://github.com/scribusproject/scribus/commit/28bd3be104c06b9d4532affe150f7b74fe5b3e59
 
-Add fixes for poppler-25.09.1, 25.10.0 and 26.01.0.
+Add fixes for poppler-25.09.1, 25.10.0, 26.01.0 and 26.02.0.
 
 Index: scribus/plugins/import/pdf/slaoutput.cpp
 --- scribus/plugins/import/pdf/slaoutput.cpp.orig
@@ -41,7 +42,71 @@ Index: scribus/plugins/import/pdf/slaout
  {
  	if (m_groupStack.count() <= 0)
  		return;
-@@ -2215,11 +2215,11 @@ bool SlaOutputDev::patchMeshShadedFill(GfxState *state
+@@ -1519,7 +1519,7 @@ void SlaOutputDev::eoClip(GfxState *state)
+ 
+ void SlaOutputDev::adjustClip(GfxState *state, Qt::FillRule fillRule)
+ {
+-	const double *ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	m_ctm = QTransform(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 	QString output = convertPath(state->getPath());
+ 	if (output.isEmpty())
+@@ -1546,7 +1546,7 @@ void SlaOutputDev::adjustClip(GfxState *state, Qt::Fil
+ void SlaOutputDev::stroke(GfxState *state)
+ {
+ //	qDebug() << "Stroke";
+-	const double *ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	double xCoor = m_doc->currentPage()->xOffset();
+ 	double yCoor = m_doc->currentPage()->yOffset();
+ 	getPenState(state);
+@@ -1650,8 +1650,7 @@ void SlaOutputDev::eoFill(GfxState *state)
+ 
+ void SlaOutputDev::createFillItem(GfxState *state, Qt::FillRule fillRule)
+ {
+-	const double *ctm;
+-	ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	m_ctm = QTransform(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 	double xCoor = m_doc->currentPage()->xOffset();
+ 	double yCoor = m_doc->currentPage()->yOffset();
+@@ -1778,7 +1777,7 @@ bool SlaOutputDev::axialShadedFill(GfxState *state, Gf
+ 		out = intersection(m_graphicStack.top().clipPath, out);
+ 		crect = out.boundingRect();
+ 	}
+-	const double *ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	m_ctm = QTransform(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 	FPointArray gr;
+ 	gr.addPoint(GrStartX, GrStartY);
+@@ -1917,7 +1916,7 @@ bool SlaOutputDev::radialShadedFill(GfxState *state, G
+ 	double GrFocalY = y1;
+ 	GrEndX = GrFocalX + r1;
+ 	GrEndY = GrFocalY;
+-	const double *ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	m_ctm = QTransform(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 	FPointArray gr;
+ 	gr.addPoint(GrStartX, GrStartY);
+@@ -2002,7 +2001,7 @@ bool SlaOutputDev::gouraudTriangleShadedFill(GfxState 
+ 	output += QString("Z");
+ 	m_pathIsClosed = true;
+ 	m_coords = output;
+-	const double *ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	m_ctm = QTransform(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 	const auto& graphicState = m_graphicStack.top();
+ 	int z = m_doc->itemAdd(PageItem::Polygon, PageItem::Rectangle, xCoor + crect.x(), yCoor + crect.y(), crect.width(), crect.height(), 0, graphicState.fillColor, CommonStrings::None);
+@@ -2083,7 +2082,7 @@ bool SlaOutputDev::patchMeshShadedFill(GfxState *state
+ 	output += QString("Z");
+ 	m_pathIsClosed = true;
+ 	m_coords = output;
+-	const double *ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	m_ctm = QTransform(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 	const auto& graphicState = m_graphicStack.top();
+ 	int z = m_doc->itemAdd(PageItem::Polygon, PageItem::Rectangle, xCoor + crect.x(), yCoor + crect.y(), crect.width(), crect.height(), 0, graphicState.fillColor, CommonStrings::None);
+@@ -2215,11 +2214,11 @@ bool SlaOutputDev::patchMeshShadedFill(GfxState *state
  	return true;
  }
  
@@ -56,7 +121,16 @@ Index: scribus/plugins/import/pdf/slaout
  	Dict *resDict = tPat->getResDict();
  
  	PDFRectangle box;
-@@ -2347,7 +2347,7 @@ void SlaOutputDev::drawImageMask(GfxState *state, Obje
+@@ -2238,7 +2237,7 @@ bool SlaOutputDev::tilingPatternFill(GfxState *state, 
+ 	box.x2 = bbox[2];
+ 	box.y2 = bbox[3];
+ 
+-	const double *ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	m_ctm = QTransform(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 	QTransform mm(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5]);
+ 	QTransform mmx = mm * m_ctm;
+@@ -2347,7 +2346,7 @@ void SlaOutputDev::drawImageMask(GfxState *state, Obje
  {
  //	qDebug() << "Draw Image Mask";
  	auto imgStr = std::make_unique<ImageStream>(str, width, 1, 1);
@@ -65,7 +139,7 @@ Index: scribus/plugins/import/pdf/slaout
  #ifdef WORDS_BIGENDIAN
  	QImage image(width, height, QImage::Format_Mono);
  #else
-@@ -2421,7 +2421,7 @@ void SlaOutputDev::drawSoftMaskedImage(GfxState *state
+@@ -2421,7 +2420,7 @@ void SlaOutputDev::drawSoftMaskedImage(GfxState *state
  {
  //	qDebug() << "SlaOutputDev::drawSoftMaskedImage Masked Image Components" << colorMap->getNumPixelComps();
  	auto imgStr = std::make_unique<ImageStream>(str, width, colorMap->getNumPixelComps(), colorMap->getBits());
@@ -74,7 +148,7 @@ Index: scribus/plugins/import/pdf/slaout
  	unsigned int *dest = nullptr;
  	unsigned char * buffer = new unsigned char[width * height * 4];
  	for (int y = 0; y < height; y++)
-@@ -2439,7 +2439,7 @@ void SlaOutputDev::drawSoftMaskedImage(GfxState *state
+@@ -2439,7 +2438,7 @@ void SlaOutputDev::drawSoftMaskedImage(GfxState *state
  	}
  
  	auto mskStr = std::make_unique<ImageStream>(maskStr, maskWidth, maskColorMap->getNumPixelComps(), maskColorMap->getBits());
@@ -83,7 +157,7 @@ Index: scribus/plugins/import/pdf/slaout
  	unsigned char *mdest = nullptr;
  	unsigned char * mbuffer = new unsigned char[maskWidth * maskHeight];
  	memset(mbuffer, 0, maskWidth * maskHeight);
-@@ -2497,7 +2497,7 @@ void SlaOutputDev::drawMaskedImage(GfxState *state, Ob
+@@ -2497,7 +2496,7 @@ void SlaOutputDev::drawMaskedImage(GfxState *state, Ob
  {
  //	qDebug() << "SlaOutputDev::drawMaskedImage";
  	auto imgStr = std::make_unique<ImageStream>(str, width, colorMap->getNumPixelComps(), colorMap->getBits());
@@ -92,7 +166,7 @@ Index: scribus/plugins/import/pdf/slaout
  	unsigned int *dest = nullptr;
  	unsigned char * buffer = new unsigned char[width * height * 4];
  	for (int y = 0; y < height; y++)
-@@ -2515,7 +2515,7 @@ void SlaOutputDev::drawMaskedImage(GfxState *state, Ob
+@@ -2515,7 +2514,7 @@ void SlaOutputDev::drawMaskedImage(GfxState *state, Ob
  	}
  
  	auto mskStr = std::make_unique<ImageStream>(maskStr, maskWidth, 1, 1);
@@ -101,7 +175,7 @@ Index: scribus/plugins/import/pdf/slaout
  	unsigned char *mdest = nullptr;
  	int invert_bit = maskInvert ? 1 : 0;
  	unsigned char * mbuffer = new unsigned char[maskWidth * maskHeight];
-@@ -2561,7 +2561,7 @@ void SlaOutputDev::drawMaskedImage(GfxState *state, Ob
+@@ -2561,7 +2560,7 @@ void SlaOutputDev::drawMaskedImage(GfxState *state, Ob
  void SlaOutputDev::drawImage(GfxState *state, Object *ref, Stream *str, int width, int height, GfxImageColorMap *colorMap, bool interpolate, const int* maskColors, bool inlineImg)
  {
  	auto imgStr = std::make_unique<ImageStream>(str, width, colorMap->getNumPixelComps(), colorMap->getBits());
@@ -110,7 +184,16 @@ Index: scribus/plugins/import/pdf/slaout
  
  	QImage image(width, height, QImage::Format_ARGB32);
  	if (image.isNull())
-@@ -2791,7 +2791,7 @@ void SlaOutputDev::beginMarkedContent(const char *name
+@@ -2633,7 +2632,7 @@ void SlaOutputDev::drawImage(GfxState *state, Object *
+ void SlaOutputDev::createImageFrame(QImage& image, GfxState *state, int numColorComponents)
+ {
+ //	qDebug() << "SlaOutputDev::createImageFrame";
+-	const double *ctm = state->getCTM();
++	const auto ctm = state->getCTM();
+ 	double xCoor = m_doc->currentPage()->xOffset();
+ 	double yCoor = m_doc->currentPage()->yOffset();
+ 
+@@ -2791,7 +2790,7 @@ void SlaOutputDev::beginMarkedContent(const char *name
  	{
  		if (dictRef->isNull())
  			return;
@@ -119,16 +202,32 @@ Index: scribus/plugins/import/pdf/slaout
  		OptionalContentGroup *oc;
  		if (dictRef->isRef())
  		{
-@@ -2928,13 +2928,17 @@ void SlaOutputDev::updateFont(GfxState *state)
- 	SplashFontFile *fontFile;
+@@ -2925,16 +2924,32 @@ void SlaOutputDev::updateFont(GfxState *state)
+ #else
+ 	SlaOutFontFileID *id;
+ #endif
+-	SplashFontFile *fontFile;
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++	std::shared_ptr<SplashFontFile> fontFile;
++#else
++	SplashFontFile *fontFile = nullptr;
++#endif
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++	std::unique_ptr<SplashFontSrc> fontsrc;
++#else
  	SplashFontSrc *fontsrc = nullptr;
++#endif
  	Object refObj, strObj;
 +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0)
 +	std::vector<int> codeToGID;
 +#else
  	int *codeToGID = nullptr;
 +#endif
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++	std::array<double, 6> textMat;
++#else
  	const double *textMat = nullptr;
++#endif
  	double m11, m12, m21, m22, fontSize;
 -	SplashCoord mat[4] = { 1.0, 0.0, 0.0, 1.0 };
 +	std::array<SplashCoord, 4> mat = { 1.0, 0.0, 0.0, 1.0 };
@@ -139,12 +238,78 @@ Index: scribus/plugins/import/pdf/slaout
  
  	m_font = nullptr;
  
-@@ -3040,12 +3044,12 @@ void SlaOutputDev::updateFont(GfxState *state)
+@@ -2981,16 +2996,29 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 			fontType = fontLoc->fontType;
+ 		}
+ 
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++		if (!fileName.empty())
++			fontsrc = std::make_unique<SplashFontSrc>(fileName);
++		else
++			fontsrc = std::make_unique<SplashFontSrc>(std::move(tmpBuf.value()));
++#else
+ 		fontsrc = new SplashFontSrc;
+ 		if (!fileName.empty())
+ 			fontsrc->setFile(fileName);
+ 		else
+ 			fontsrc->setBuf(std::move(tmpBuf.value()));
++#endif
+ 
+ 		// load the font file
+ 		switch (fontType) {
+ 		case fontType1:
+-#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++			if (!(fontFile = m_fontEngine->loadType1Font(std::move(id), std::move(fontsrc), (const char**) ((Gfx8BitFont*) gfxFont)->getEncoding(), fontLoc->fontNum)))
++			{
++				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
++				goto err2;
++			}
++#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
+ 			if (!(fontFile = m_fontEngine->loadType1Font(std::move(id), fontsrc, (const char**) ((Gfx8BitFont*) gfxFont)->getEncoding(), fontLoc->fontNum)))
+ 			{
+ 				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
+@@ -3005,7 +3033,13 @@ void SlaOutputDev::updateFont(GfxState *state)
+ #endif
+ 			break;
+ 		case fontType1C:
+-#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++			if (!(fontFile = m_fontEngine->loadType1CFont(std::move(id), std::move(fontsrc), (const char**) ((Gfx8BitFont*) gfxFont)->getEncoding(), fontLoc->fontNum)))
++			{
++				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
++				goto err2;
++			}
++#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
+ 			if (!(fontFile = m_fontEngine->loadType1CFont(std::move(id), fontsrc, (const char**) ((Gfx8BitFont*) gfxFont)->getEncoding(), fontLoc->fontNum)))
+ 			{
+ 				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
+@@ -3020,7 +3054,13 @@ void SlaOutputDev::updateFont(GfxState *state)
+ #endif
+ 			break;
+ 		case fontType1COT:
+-#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++			if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont(std::move(id), std::move(fontsrc), (const char**) ((Gfx8BitFont*) gfxFont)->getEncoding(), fontLoc->fontNum)))
++			{
++				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
++				goto err2;
++			}
++#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
+ 			if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont(std::move(id), fontsrc, (const char **)((Gfx8BitFont *) gfxFont)->getEncoding(), fontLoc->fontNum)))
+ 			{
+ 				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
+@@ -3036,16 +3076,16 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 			break;
+ 		case fontTrueType:
+ 		case fontTrueTypeOT:
+-#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
  			if (!fileName.empty())
  				ff = FoFiTrueType::load(fileName.c_str(), fontLoc->fontNum);
  			else
 -				ff = FoFiTrueType::make(fontsrc->buf.data(), fontsrc->buf.size(), fontLoc->fontNum);
-+				ff = FoFiTrueType::make(std::span(fontsrc->buf), fontLoc->fontNum);
++				ff = FoFiTrueType::make(fontsrc->buf(), fontLoc->fontNum);
  #else
  			if (!fileName.empty())
  				ff = FoFiTrueType::load(fileName.c_str());
@@ -154,7 +319,7 @@ Index: scribus/plugins/import/pdf/slaout
  #endif
  			if (ff)
  			{
-@@ -3055,10 +3059,20 @@ void SlaOutputDev::updateFont(GfxState *state)
+@@ -3055,10 +3095,26 @@ void SlaOutputDev::updateFont(GfxState *state)
  			}
  			else
  			{
@@ -166,7 +331,13 @@ Index: scribus/plugins/import/pdf/slaout
  				n = 0;
  			}
 -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0)
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++			if (!(fontFile = m_fontEngine->loadTrueTypeFont(std::move(id), std::move(fontsrc), std::move(codeToGID), fontLoc->fontNum)))
++			{
++				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
++				goto err2;
++			}
++#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0)
 +			if (!(fontFile = m_fontEngine->loadTrueTypeFont(std::move(id), fontsrc, std::move(codeToGID), fontLoc->fontNum)))
 +			{
 +				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
@@ -176,7 +347,22 @@ Index: scribus/plugins/import/pdf/slaout
  			if (!(fontFile = m_fontEngine->loadTrueTypeFont(std::move(id), fontsrc, codeToGID, n, fontLoc->fontNum)))
  			{
  				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
-@@ -3089,6 +3103,18 @@ void SlaOutputDev::updateFont(GfxState *state)
+@@ -3074,7 +3130,13 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 			break;
+ 		case fontCIDType0:
+ 		case fontCIDType0C:
+-#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++			if (!(fontFile = m_fontEngine->loadCIDFont(std::move(id), std::move(fontsrc), fontLoc->fontNum)))
++			{
++				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
++				goto err2;
++			}
++#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
+ 			if (!(fontFile = m_fontEngine->loadCIDFont(std::move(id), fontsrc, fontLoc->fontNum)))
+ 			{
+ 				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
+@@ -3089,6 +3151,18 @@ void SlaOutputDev::updateFont(GfxState *state)
  #endif
  			break;
  		case fontCIDType0COT:
@@ -195,13 +381,20 @@ Index: scribus/plugins/import/pdf/slaout
  			if (((GfxCIDFont *) gfxFont)->getCIDToGID())
  			{
  				n = ((GfxCIDFont *) gfxFont)->getCIDToGIDLen();
-@@ -3100,7 +3126,15 @@ void SlaOutputDev::updateFont(GfxState *state)
+@@ -3100,7 +3174,22 @@ void SlaOutputDev::updateFont(GfxState *state)
  				codeToGID = nullptr;
  				n = 0;
  			}
 -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
 +#endif
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0)
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++			if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont(std::move(id), std::move(fontsrc), std::move(codeToGID), fontLoc->fontNum)))
++			{
++				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
++					gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
++				goto err2;
++			}
++#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0)
 +			if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont(std::move(id), fontsrc, std::move(codeToGID), fontLoc->fontNum)))
 +			{
 +				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
@@ -212,7 +405,7 @@ Index: scribus/plugins/import/pdf/slaout
  			if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont(std::move(id), fontsrc, codeToGID, n, fontLoc->fontNum)))
  			{
  				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'",
-@@ -3118,6 +3152,15 @@ void SlaOutputDev::updateFont(GfxState *state)
+@@ -3118,6 +3207,15 @@ void SlaOutputDev::updateFont(GfxState *state)
  			break;
  		case fontCIDType2:
  		case fontCIDType2OT:
@@ -228,19 +421,20 @@ Index: scribus/plugins/import/pdf/slaout
  			codeToGID = nullptr;
  			n = 0;
  			if (((GfxCIDFont *) gfxFont)->getCIDToGID())
-@@ -3129,25 +3172,36 @@ void SlaOutputDev::updateFont(GfxState *state)
+@@ -3129,25 +3227,42 @@ void SlaOutputDev::updateFont(GfxState *state)
  					memcpy(codeToGID, ((GfxCIDFont *)gfxFont)->getCIDToGID(), n * sizeof(*codeToGID));
  				}
  			}
 +#endif
  			else
  			{
- #if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
+-#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
  				if (!fileName.empty())
  					ff = FoFiTrueType::load(fileName.c_str(), fontLoc->fontNum);
  				else
 -					ff = FoFiTrueType::make(fontsrc->buf.data(), fontsrc->buf.size(), fontLoc->fontNum);
-+					ff = FoFiTrueType::make(std::span(fontsrc->buf), fontLoc->fontNum);
++					ff = FoFiTrueType::make(fontsrc->buf(), fontLoc->fontNum);
  #else
  				if (!fileName.empty())
  					ff = FoFiTrueType::load(fileName.c_str());
@@ -258,7 +452,13 @@ Index: scribus/plugins/import/pdf/slaout
  				ff.reset();
  			}
 -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0)
-+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0)
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++			if (!(fontFile = m_fontEngine->loadTrueTypeFont(std::move(id), std::move(fontsrc), std::move(codeToGID), fontLoc->fontNum)))
++			{
++				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
++				goto err2;
++			}
++#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0)
 +			if (!(fontFile = m_fontEngine->loadTrueTypeFont(std::move(id), fontsrc, std::move(codeToGID), fontLoc->fontNum)))
 +			{
 +				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
@@ -268,7 +468,40 @@ Index: scribus/plugins/import/pdf/slaout
  			if (!(fontFile = m_fontEngine->loadTrueTypeFont(std::move(id), fontsrc, codeToGID, n, fontLoc->fontNum)))
  			{
  				error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->c_str() : "(unnamed)");
-@@ -3526,7 +3580,7 @@ QString SlaOutputDev::getAnnotationColor(const AnnotCo
+@@ -3186,8 +3301,10 @@ void SlaOutputDev::updateFont(GfxState *state)
+ 	mat[3] = -m22;
+ 	m_font = m_fontEngine->getFont(fontFile, mat, matrix);
+ 
++#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(26, 2, 0)
+ 	if (fontsrc && !fontsrc->isFile)
+ 		fontsrc->unref();
++#endif
+ 	return;
+ 
+ err2:
+@@ -3198,8 +3315,12 @@ err2:
+ #endif
+ 
+ err1:
++#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(26, 2, 0)
++	fontsrc.reset();
++#else
+ 	if (fontsrc && !fontsrc->isFile)
+ 		fontsrc->unref();
++#endif
+ }
+ 
+ void SlaOutputDev::drawChar(GfxState* state, double x, double y, double dx, double dy, double originX, double originY, CharCode code, int nBytes, const Unicode* u, int uLen)
+@@ -3252,7 +3373,7 @@ void SlaOutputDev::drawChar(GfxState* state, double x,
+ 				if (f & splashPathLast)
+ 					qPath.closeSubpath();
+ 			}
+-			const double * ctm = state->getCTM();
++			const auto ctm = state->getCTM();
+ 			m_ctm = QTransform(ctm[0], ctm[1], ctm[2], ctm[3], ctm[4], ctm[5]);
+ 			double xCoor = m_doc->currentPage()->xOffset();
+ 			double yCoor = m_doc->currentPage()->yOffset();
+@@ -3526,7 +3647,7 @@ QString SlaOutputDev::getAnnotationColor(const AnnotCo
  		return CommonStrings::None;
  	if (color->getSpace() == AnnotColor::colorRGB)
  	{
@@ -277,7 +510,7 @@ Index: scribus/plugins/import/pdf/slaout
  		double Rc = color_data[0];
  		double Gc = color_data[1];
  		double Bc = color_data[2];
-@@ -3535,7 +3589,7 @@ QString SlaOutputDev::getAnnotationColor(const AnnotCo
+@@ -3535,7 +3656,7 @@ QString SlaOutputDev::getAnnotationColor(const AnnotCo
  	}
  	else if (color->getSpace() == AnnotColor::colorCMYK)
  	{
@@ -286,7 +519,7 @@ Index: scribus/plugins/import/pdf/slaout
  		double Cc = color_data[0];
  		double Mc = color_data[1];
  		double Yc = color_data[2];
-@@ -3545,7 +3599,7 @@ QString SlaOutputDev::getAnnotationColor(const AnnotCo
+@@ -3545,7 +3666,7 @@ QString SlaOutputDev::getAnnotationColor(const AnnotCo
  	}
  	else if (color->getSpace() == AnnotColor::colorGray)
  	{
@@ -295,7 +528,7 @@ Index: scribus/plugins/import/pdf/slaout
  		double Kc = 1.0 - color_data[0];
  		tmp.setCmykColorF(0, 0, 0, Kc);
  		fNam = m_doc->PageColors.tryAddColor(namPrefix+tmp.name(), tmp);
-@@ -3748,25 +3802,25 @@ void SlaOutputDev::pushGroup(const QString& maskName, 
+@@ -3748,25 +3869,25 @@ void SlaOutputDev::pushGroup(const QString& maskName, 
  
  QString SlaOutputDev::UnicodeParsedString(const GooString *s1) const
  {