From 1a22e78bc589ea0bdabf5ff2c4dea4d7d6f31402 Mon Sep 17 00:00:00 2001 From: Jean Ghali Date: Tue, 4 Feb 2025 21:41:03 +0000 Subject: [PATCH] #17405: Fix build error with poppler 25.02.0 git-svn-id: svn://scribus.net/branches/Version16x/Scribus@26668 11d20701-8431-0410-a711-e3c959e3b870 --- scribus/plugins/import/pdf/importpdf.cpp | 4 +- scribus/plugins/import/pdf/importpdfconfig.h | 6 ++ scribus/plugins/import/pdf/slaoutput.cpp | 67 ++++++++++++++++++-- 3 files changed, 68 insertions(+), 9 deletions(-) diff --git a/scribus/plugins/import/pdf/importpdf.cpp b/scribus/plugins/import/pdf/importpdf.cpp index f87275c..a0a5cdf 100644 --- a/scribus/plugins/import/pdf/importpdf.cpp +++ b/scribus/plugins/import/pdf/importpdf.cpp @@ -462,11 +462,11 @@ bool PdfPlug::convert(const QString& fn) if (dev->isOk()) { - OCGs* ocg = pdfDoc->getOptContentConfig(); + POPPLER_CONST_25_02 OCGs* ocg = pdfDoc->getOptContentConfig(); if (ocg && ocg->hasOCGs()) { QStringList ocgNames; - Array *order = ocg->getOrderArray(); + POPPLER_CONST_25_02 Array *order = ocg->getOrderArray(); if (order) { for (int i = 0; i < order->getLength (); ++i) diff --git a/scribus/plugins/import/pdf/importpdfconfig.h b/scribus/plugins/import/pdf/importpdfconfig.h index fd57f25..46ecc58 100644 --- a/scribus/plugins/import/pdf/importpdfconfig.h +++ b/scribus/plugins/import/pdf/importpdfconfig.h @@ -27,4 +27,10 @@ for which a new license (GPL+exception) is in place. #define POPPLER_CONST_083 #endif +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0) +#define POPPLER_CONST_25_02 const +#else +#define POPPLER_CONST_25_02 +#endif + #endif diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp index 2b8cf94..6f6bf5f 100644 --- a/scribus/plugins/import/pdf/slaoutput.cpp +++ b/scribus/plugins/import/pdf/slaoutput.cpp @@ -1685,7 +1685,7 @@ void SlaOutputDev::stroke(GfxState *state) auto& graphicState = m_graphicStack.top(); graphicState.strokeColor = getColor(state->getStrokeColorSpace(), state->getStrokeColor(), &graphicState.strokeShade); - + QString output = convertPath(state->getPath()); if ((m_Elements->count() != 0) && (output == m_coords)) // Path is the same as in last fill { @@ -2393,8 +2393,9 @@ bool SlaOutputDev::tilingPatternFill(GfxState *state, Gfx * /*gfx*/, Catalog *ca #endif m_graphicStack.top().clipPath = savedClip; m_inPattern--; - gElements = m_groupStack.pop(); m_doc->m_Selection->clear(); + + gElements = m_groupStack.pop(); if (gElements.Items.count() > 0) { for (int dre = 0; dre < gElements.Items.count(); ++dre) @@ -2932,7 +2933,7 @@ void SlaOutputDev::beginMarkedContent(const char *name, Object *dictRef) { if (dictRef->isNull()) return; - OCGs *contentConfig = m_catalog->getOptContentConfig(); + POPPLER_CONST_25_02 OCGs *contentConfig = m_catalog->getOptContentConfig(); OptionalContentGroup *oc; if (dictRef->isRef()) { @@ -3084,7 +3085,11 @@ void SlaOutputDev::updateFont(GfxState *state) #if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(22, 4, 0) int tmpBufLen = 0; #endif +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0) + std::vector codeToGID; +#else int *codeToGID = nullptr; +#endif const double *textMat = nullptr; double m11, m12, m21, m22, fontSize; SplashCoord mat[4] = { 1.0, 0.0, 0.0, 1.0 }; @@ -3244,10 +3249,20 @@ void SlaOutputDev::updateFont(GfxState *state) } else { +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0) + codeToGID.clear(); +#else codeToGID = nullptr; +#endif n = 0; } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0) +#if 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)"); + goto err2; + } +#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0) 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)"); @@ -3278,6 +3293,18 @@ void SlaOutputDev::updateFont(GfxState *state) #endif break; case fontCIDType0COT: +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0) + if (((GfxCIDFont*) gfxFont)->getCIDToGIDLen() > 0) + { + codeToGID = ((GfxCIDFont*) gfxFont)->getCIDToGID(); + n = codeToGID.size(); + } + else + { + codeToGID.clear(); + n = 0; + } +#else if (((GfxCIDFont *) gfxFont)->getCIDToGID()) { n = ((GfxCIDFont *) gfxFont)->getCIDToGIDLen(); @@ -3289,7 +3316,15 @@ 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 (!(fontFile = m_fontEngine->loadOpenTypeCFFFont(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)"); + goto err2; + } +#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0) if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont(std::move(id), fontsrc, codeToGID, n, fontLoc->fontNum))) { error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", @@ -3307,6 +3342,15 @@ void SlaOutputDev::updateFont(GfxState *state) break; case fontCIDType2: case fontCIDType2OT: +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0) + codeToGID.clear(); + n = 0; + if (((GfxCIDFont*) gfxFont)->getCIDToGIDLen() > 0) + { + codeToGID = ((GfxCIDFont*) gfxFont)->getCIDToGID(); + n = codeToGID.size(); + } +#else codeToGID = nullptr; n = 0; if (((GfxCIDFont *) gfxFont)->getCIDToGID()) @@ -3318,6 +3362,7 @@ 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) @@ -3338,7 +3383,9 @@ void SlaOutputDev::updateFont(GfxState *state) #endif if (! ff) goto err2; -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(25, 2, 0) + codeToGID = ((GfxCIDFont*) gfxFont)->getCodeToGIDMap(ff.get()); +#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) codeToGID = ((GfxCIDFont*) gfxFont)->getCodeToGIDMap(ff.get(), &n); ff.reset(); #else @@ -3346,7 +3393,13 @@ void SlaOutputDev::updateFont(GfxState *state) delete ff; #endif } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0) +#if 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)"); + goto err2; + } +#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(24, 11, 0) 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)"); -- 2.48.1