From 85c0dff3422fa3c26fbc2e8d8561f597ec24bd92 Mon Sep 17 00:00:00 2001 From: Jean Ghali Date: Wed, 2 Feb 2022 23:12:52 +0000 Subject: [PATCH] #16734: Build break with poppler 22.2.0 git-svn-id: svn://scribus.net/trunk/Scribus@24884 11d20701-8431-0410-a711-e3c959e3b870 --- scribus/plugins/import/pdf/slaoutput.cpp | 47 +++++++++++++++++++----- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp index 5894bf2ad6..3650c96f52 100644 --- a/scribus/plugins/import/pdf/slaoutput.cpp +++ b/scribus/plugins/import/pdf/slaoutput.cpp @@ -7,6 +7,11 @@ for which a new license (GPL+exception) is in place. #include "slaoutput.h" +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) +#include +#include +#endif + #include #include #include @@ -3027,18 +3032,24 @@ void SlaOutputDev::markPoint(POPPLER_CONST char *name, Dict *properties) void SlaOutputDev::updateFont(GfxState *state) { GfxFont *gfxFont; - GfxFontLoc *fontLoc; +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) + std::optional fontLoc; + const GooString * fileName = nullptr; + std::unique_ptr ff; +#else + GfxFontLoc * fontLoc = nullptr; + GooString * fileName = nullptr; + FoFiTrueType * ff = nullptr; +#endif GfxFontType fontType; SlaOutFontFileID *id; SplashFontFile *fontFile; SplashFontSrc *fontsrc = nullptr; - FoFiTrueType *ff; Object refObj, strObj; - GooString *fileName; - char *tmpBuf; + char *tmpBuf = nullptr; int tmpBufLen = 0; - int *codeToGID; - const double *textMat; + int *codeToGID = nullptr; + const double *textMat = nullptr; double m11, m12, m21, m22, fontSize; SplashCoord mat[4]; int n = 0; @@ -3046,9 +3057,6 @@ void SlaOutputDev::updateFont(GfxState *state) SplashCoord matrix[6]; m_font = nullptr; - fileName = nullptr; - tmpBuf = nullptr; - fontLoc = nullptr; gfxFont = state->getFont(); if (!gfxFont) @@ -3083,7 +3091,11 @@ void SlaOutputDev::updateFont(GfxState *state) } else { // gfxFontLocExternal +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) + fileName = fontLoc->pathAsGooString(); +#else fileName = fontLoc->path; +#endif fontType = fontLoc->fontType; } @@ -3136,9 +3148,14 @@ void SlaOutputDev::updateFont(GfxState *state) ff = FoFiTrueType::make(tmpBuf, tmpBufLen); if (ff) { +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) + codeToGID = ((Gfx8BitFont*) gfxFont)->getCodeToGIDMap(ff.get()); + ff.reset(); +#else codeToGID = ((Gfx8BitFont *)gfxFont)->getCodeToGIDMap(ff); - n = 256; delete ff; +#endif + n = 256; } else { @@ -3209,8 +3226,13 @@ void SlaOutputDev::updateFont(GfxState *state) ff = FoFiTrueType::make(tmpBuf, tmpBufLen); if (! ff) goto err2; +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) + codeToGID = ((GfxCIDFont*) gfxFont)->getCodeToGIDMap(ff.get(), &n); + ff.reset(); +#else codeToGID = ((GfxCIDFont *)gfxFont)->getCodeToGIDMap(ff, &n); delete ff; +#endif } if (!(fontFile = m_fontEngine->loadTrueTypeFont( id, @@ -3247,14 +3269,19 @@ void SlaOutputDev::updateFont(GfxState *state) mat[3] = -m22; m_font = m_fontEngine->getFont(fontFile, mat, matrix); +#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(22, 2, 0) delete fontLoc; +#endif if (fontsrc && !fontsrc->isFile) fontsrc->unref(); return; err2: delete id; +#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(22, 2, 0) delete fontLoc; +#endif + err1: if (fontsrc && !fontsrc->isFile) fontsrc->unref(); From f75c1613db67f4067643d0218a2db3235e42ec9f Mon Sep 17 00:00:00 2001 From: Jean Ghali Date: Thu, 3 Feb 2022 19:46:13 +0000 Subject: [PATCH] Small update vs latest code in poppler git-svn-id: svn://scribus.net/trunk/Scribus@24885 11d20701-8431-0410-a711-e3c959e3b870 --- scribus/plugins/import/pdf/slaoutput.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp index 3650c96f52..a6f4e00fa9 100644 --- a/scribus/plugins/import/pdf/slaoutput.cpp +++ b/scribus/plugins/import/pdf/slaoutput.cpp @@ -3072,10 +3072,10 @@ void SlaOutputDev::updateFont(GfxState *state) delete id; else { - if (!(fontLoc = gfxFont->locateFont(xref, nullptr))) + fontLoc = gfxFont->locateFont((xref) ? xref : pdfDoc->getXRef(), nullptr); + if (!fontLoc) { - error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); + error(errSyntaxError, -1, "Couldn't find a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); goto err2; } From f19410ac3b27e33dd62105746784e61e85b90a1d Mon Sep 17 00:00:00 2001 From: Jean Ghali Date: Wed, 2 Mar 2022 22:22:53 +0000 Subject: [PATCH] #16764: Build break with poppler 22.03.0 git-svn-id: svn://scribus.net/trunk/Scribus@24982 11d20701-8431-0410-a711-e3c959e3b870 --- scribus/plugins/import/pdf/importpdf.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/scribus/plugins/import/pdf/importpdf.cpp b/scribus/plugins/import/pdf/importpdf.cpp index 154e58a3f0..392dcd9e64 100644 --- a/scribus/plugins/import/pdf/importpdf.cpp +++ b/scribus/plugins/import/pdf/importpdf.cpp @@ -89,7 +89,11 @@ QImage PdfPlug::readThumbnail(const QString& fName) #endif globalParams->setErrQuiet(gTrue); +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0) + PDFDoc pdfDoc{ std::make_unique(fname) }; +#else PDFDoc pdfDoc{fname, nullptr, nullptr, nullptr}; +#endif if (!pdfDoc.isOk() || pdfDoc.getErrorCode() == errEncrypted) return QImage(); @@ -342,7 +346,11 @@ bool PdfPlug::convert(const QString& fn) globalParams->setErrQuiet(gTrue); // globalParams->setPrintCommands(gTrue); QList ocgGroups; +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0) + auto pdfDoc = std::make_unique(std::make_unique(fname)); +#else auto pdfDoc = std::unique_ptr(new PDFDoc(fname, nullptr, nullptr, nullptr)); +#endif if (pdfDoc) { if (pdfDoc->getErrorCode() == errEncrypted) @@ -361,8 +369,13 @@ bool PdfPlug::convert(const QString& fn) #else auto fname = new GooString(QFile::encodeName(fn).data()); #endif +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0) + std::optional userPW(std::in_place, text.toLocal8Bit().data()); + pdfDoc.reset(new PDFDoc(std::make_unique(fname), userPW, userPW, nullptr)); +#else auto userPW = new GooString(text.toLocal8Bit().data()); pdfDoc.reset(new PDFDoc(fname, userPW, userPW, nullptr)); +#endif qApp->changeOverrideCursor(QCursor(Qt::WaitCursor)); } if ((!pdfDoc) || (pdfDoc->getErrorCode() != errNone)) From f2237b8f0b5cf7690e864a22ef7a63a6d769fa36 Mon Sep 17 00:00:00 2001 From: Jean Ghali Date: Fri, 1 Apr 2022 23:52:32 +0000 Subject: [PATCH] Fix build with poppler 22.04.0 git-svn-id: svn://scribus.net/trunk/Scribus@25074 11d20701-8431-0410-a711-e3c959e3b870 --- scribus/plugins/import/pdf/slaoutput.cpp | 123 ++++++++++++++--------- 1 file changed, 78 insertions(+), 45 deletions(-) From e013e8126d2100e8e56dea5b836ad43275429389 Mon Sep 17 00:00:00 2001 From: Jean Ghali Date: Wed, 2 Mar 2022 22:48:29 +0000 Subject: [PATCH] Enforce poppler version >= 0.86.0 git-svn-id: svn://scribus.net/trunk/Scribus@24985 11d20701-8431-0410-a711-e3c959e3b870 --- cmake/modules/Findpoppler.cmake | 4 +- scribus/plugins/import/pdf/importpdf.cpp | 65 ++----------- scribus/plugins/import/pdf/slaoutput.cpp | 114 ----------------------- scribus/plugins/import/pdf/slaoutput.h | 7 -- 4 files changed, 10 insertions(+), 180 deletions(-) diff --git a/cmake/modules/Findpoppler.cmake b/cmake/modules/Findpoppler.cmake index 56ce613ae9..9cab5532ab 100644 --- a/cmake/modules/Findpoppler.cmake +++ b/cmake/modules/Findpoppler.cmake @@ -1,8 +1,8 @@ #include(FindPkgConfig) find_package(PkgConfig QUIET) -pkg_search_module(poppler libpoppler>=0.62.0 poppler>=0.62.0) +pkg_search_module(poppler libpoppler>=0.86.0 poppler>=0.86.0) if (poppler_FOUND) - pkg_search_module(poppler_cpp REQUIRED libpoppler-cpp>=0.62.0 poppler-cpp>=0.62.0) + pkg_search_module(poppler_cpp REQUIRED libpoppler-cpp>=0.86.0 poppler-cpp>=0.86.0) endif(poppler_FOUND) find_path(poppler_INCLUDE_DIR diff --git a/scribus/plugins/import/pdf/importpdf.cpp b/scribus/plugins/import/pdf/importpdf.cpp index 392dcd9e64..970a1a37ca 100644 --- a/scribus/plugins/import/pdf/importpdf.cpp +++ b/scribus/plugins/import/pdf/importpdf.cpp @@ -74,20 +74,15 @@ PdfPlug::PdfPlug(ScribusDoc* doc, int flags) QImage PdfPlug::readThumbnail(const QString& fName) { - QString pdfFile = QDir::toNativeSeparators(fName); -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 83, 0) globalParams.reset(new GlobalParams()); -#else - std::unique_ptr globalParamsPtr(new GlobalParams()); - globalParams = globalParamsPtr.get(); -#endif + globalParams->setErrQuiet(gTrue); -#if defined(Q_OS_WIN32) && POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 62, 0) + QString pdfFile = QDir::toNativeSeparators(fName); +#if defined(Q_OS_WIN32) auto fname = new GooString(pdfFile.toUtf8().data()); #else auto fname = new GooString(QFile::encodeName(pdfFile).data()); #endif - globalParams->setErrQuiet(gTrue); #if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0) PDFDoc pdfDoc{ std::make_unique(fname) }; @@ -332,19 +327,15 @@ bool PdfPlug::convert(const QString& fn) qApp->processEvents(); } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 83, 0) globalParams.reset(new GlobalParams()); -#else - std::unique_ptr globalParamsPtr(new GlobalParams()); - globalParams = globalParamsPtr.get(); -#endif -#if defined(Q_OS_WIN32) && POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 62, 0) + globalParams->setErrQuiet(gTrue); + +#if defined(Q_OS_WIN32) auto fname = new GooString(fn.toUtf8().data()); #else auto fname = new GooString(QFile::encodeName(fn).data()); #endif - globalParams->setErrQuiet(gTrue); -// globalParams->setPrintCommands(gTrue); + QList ocgGroups; #if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 3, 0) auto pdfDoc = std::make_unique(std::make_unique(fname)); @@ -364,7 +355,7 @@ bool PdfPlug::convert(const QString& fn) QString text = QInputDialog::getText(mw, tr("Open PDF-File"), tr("Password"), QLineEdit::Normal, "", &ok); if (ok && !text.isEmpty()) { -#if defined(Q_OS_WIN32) && POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 62, 0) +#if defined(Q_OS_WIN32) auto fname = new GooString(fn.toUtf8().data()); #else auto fname = new GooString(QFile::encodeName(fn).data()); @@ -382,9 +373,6 @@ bool PdfPlug::convert(const QString& fn) { if (m_progressDialog) m_progressDialog->close(); -#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 83, 0) - delete globalParams; -#endif return false; } if (m_progressDialog) @@ -494,7 +482,6 @@ bool PdfPlug::convert(const QString& fn) } else { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 69, 0) const auto& ocgs = ocg->getOCGs (); for (const auto& ocg : ocgs) { @@ -506,25 +493,11 @@ bool PdfPlug::convert(const QString& fn) ocgNames.append(ocgName); } } -#else - GooList *ocgs = ocg->getOCGs (); - for (int i = 0; i < ocgs->getLength (); ++i) - { - OptionalContentGroup *oc = (OptionalContentGroup *)ocgs->get(i); - QString ocgName = UnicodeParsedString(oc->getName()); - if (!ocgNames.contains(ocgName)) - { - ocgGroups.prepend(oc); - ocgNames.append(ocgName); - } - } -#endif } } } else { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 69, 0) const auto& ocgs = ocg->getOCGs (); for (const auto& ocg : ocgs) { @@ -536,19 +509,6 @@ bool PdfPlug::convert(const QString& fn) ocgNames.append(ocgName); } } -#else - GooList *ocgs = ocg->getOCGs (); - for (int i = 0; i < ocgs->getLength (); ++i) - { - OptionalContentGroup *oc = (OptionalContentGroup *)ocgs->get(i); - QString ocgName = UnicodeParsedString(oc->getName()); - if (!ocgNames.contains(ocgName)) - { - ocgGroups.prepend(oc); - ocgNames.append(ocgName); - } - } -#endif } } @@ -787,13 +747,8 @@ bool PdfPlug::convert(const QString& fn) names = catDict.dictLookup("OpenAction"); if (names.isDict()) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) std::unique_ptr linkActionUPtr = LinkAction::parseAction(&names, pdfDoc->getCatalog()->getBaseURI()); LinkAction *linkAction = linkActionUPtr.get(); -#else - LinkAction *linkAction = nullptr; - linkAction = LinkAction::parseAction(&names, pdfDoc->getCatalog()->getBaseURI()); -#endif if (linkAction && (linkAction->getKind() == actionJavaScript)) { LinkJavaScript *jsa = (LinkJavaScript*) linkAction; @@ -861,11 +816,7 @@ bool PdfPlug::convert(const QString& fn) } pdfDoc.reset(); } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 83, 0) globalParams.reset(); -#else - globalParams = nullptr; -#endif // qDebug() << "converting finished"; // qDebug() << "Imported" << m_elements.count() << "Elements"; diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp index a6f4e00fa9..b6f2b8c219 100644 --- a/scribus/plugins/import/pdf/slaoutput.cpp +++ b/scribus/plugins/import/pdf/slaoutput.cpp @@ -332,15 +332,9 @@ LinkAction* SlaOutputDev::SC_getAction(AnnotWidget *ano) } /* Replacement for the crippled Poppler function LinkAction* AnnotWidget::getAdditionalAction(AdditionalActionsType type) */ -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) std::unique_ptr SlaOutputDev::SC_getAdditionalAction(const char *key, AnnotWidget *ano) { std::unique_ptr linkAction; -#else -LinkAction* SlaOutputDev::SC_getAdditionalAction(const char *key, AnnotWidget *ano) -{ - LinkAction *linkAction = nullptr; -#endif Object obj; Ref refa = ano->getRef(); @@ -467,11 +461,7 @@ bool SlaOutputDev::handleLinkAnnot(Annot* annota, double xCoor, double yCoor, do if (dst->isPageRef()) { Ref dstr = dst->getPageRef(); -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 76, 0) pagNum = pdfDoc->findPage(dstr); -#else - pagNum = pdfDoc->findPage(dstr.num, dstr.gen); -#endif } else pagNum = dst->getPageNum(); @@ -485,11 +475,7 @@ bool SlaOutputDev::handleLinkAnnot(Annot* annota, double xCoor, double yCoor, do POPPLER_CONST GooString *ndst = gto->getNamedDest(); if (ndst) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) std::unique_ptr dstn = pdfDoc->findDest(ndst); -#else - LinkDest *dstn = pdfDoc->findDest(ndst); -#endif if (dstn) { if (dstn->getKind() == destXYZ) @@ -497,11 +483,7 @@ bool SlaOutputDev::handleLinkAnnot(Annot* annota, double xCoor, double yCoor, do if (dstn->isPageRef()) { Ref dstr = dstn->getPageRef(); -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 76, 0) pagNum = pdfDoc->findPage(dstr); -#else - pagNum = pdfDoc->findPage(dstr.num, dstr.gen); -#endif } else pagNum = dstn->getPageNum(); @@ -533,11 +515,7 @@ bool SlaOutputDev::handleLinkAnnot(Annot* annota, double xCoor, double yCoor, do POPPLER_CONST GooString *ndst = gto->getNamedDest(); if (ndst) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) std::unique_ptr dstn = pdfDoc->findDest(ndst); -#else - LinkDest *dstn = pdfDoc->findDest(ndst); -#endif if (dstn) { if (dstn->getKind() == destXYZ) @@ -985,11 +963,7 @@ void SlaOutputDev::handleActions(PageItem* ite, AnnotWidget *ano) if (dst->isPageRef()) { Ref dstr = dst->getPageRef(); -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 76, 0) pagNum = pdfDoc->findPage(dstr); -#else - pagNum = pdfDoc->findPage(dstr.num, dstr.gen); -#endif } else pagNum = dst->getPageNum(); @@ -1005,11 +979,7 @@ void SlaOutputDev::handleActions(PageItem* ite, AnnotWidget *ano) POPPLER_CONST GooString *ndst = gto->getNamedDest(); if (ndst) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) std::unique_ptr dstn = pdfDoc->findDest(ndst); -#else - LinkDest *dstn = pdfDoc->findDest(ndst); -#endif if (dstn) { if (dstn->getKind() == destXYZ) @@ -1017,11 +987,7 @@ void SlaOutputDev::handleActions(PageItem* ite, AnnotWidget *ano) if (dstn->isPageRef()) { Ref dstr = dstn->getPageRef(); -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 76, 0) pagNum = pdfDoc->findPage(dstr); -#else - pagNum = pdfDoc->findPage(dstr.num, dstr.gen); -#endif } else pagNum = dstn->getPageNum(); @@ -1061,11 +1027,7 @@ void SlaOutputDev::handleActions(PageItem* ite, AnnotWidget *ano) POPPLER_CONST GooString *ndst = gto->getNamedDest(); if (ndst) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) std::unique_ptr dstn = pdfDoc->findDest(ndst); -#else - LinkDest *dstn = pdfDoc->findDest(ndst); -#endif if (dstn) { if (dstn->getKind() == destXYZ) @@ -1139,143 +1101,91 @@ void SlaOutputDev::handleActions(PageItem* ite, AnnotWidget *ano) { if (Aact->getKind() == actionJavaScript) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) LinkJavaScript *jsa = (LinkJavaScript*) Aact.get(); -#else - LinkJavaScript *jsa = (LinkJavaScript*) Aact; -#endif if (jsa->isOk()) { ite->annotation().setD_act(UnicodeParsedString(jsa->getScript())); ite->annotation().setAAact(true); } } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) Aact.reset(); -#else - Aact = nullptr; -#endif } Aact = SC_getAdditionalAction("E", ano); if (Aact) { if (Aact->getKind() == actionJavaScript) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) LinkJavaScript *jsa = (LinkJavaScript*) Aact.get(); -#else - LinkJavaScript *jsa = (LinkJavaScript*) Aact; -#endif if (jsa->isOk()) { ite->annotation().setE_act(UnicodeParsedString(jsa->getScript())); ite->annotation().setAAact(true); } } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) Aact.reset(); -#else - Aact = nullptr; -#endif } Aact = SC_getAdditionalAction("X", ano); if (Aact) { if (Aact->getKind() == actionJavaScript) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) LinkJavaScript *jsa = (LinkJavaScript*) Aact.get(); -#else - LinkJavaScript *jsa = (LinkJavaScript*) Aact; -#endif if (jsa->isOk()) { ite->annotation().setX_act(UnicodeParsedString(jsa->getScript())); ite->annotation().setAAact(true); } } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) Aact.reset(); -#else - Aact = nullptr; -#endif } Aact = SC_getAdditionalAction("Fo", ano); if (Aact) { if (Aact->getKind() == actionJavaScript) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) LinkJavaScript *jsa = (LinkJavaScript*) Aact.get(); -#else - LinkJavaScript *jsa = (LinkJavaScript*) Aact; -#endif if (jsa->isOk()) { ite->annotation().setFo_act(UnicodeParsedString(jsa->getScript())); ite->annotation().setAAact(true); } } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) Aact.reset(); -#else - Aact = nullptr; -#endif } Aact = SC_getAdditionalAction("Bl", ano); if (Aact) { if (Aact->getKind() == actionJavaScript) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) LinkJavaScript *jsa = (LinkJavaScript*) Aact.get(); -#else - LinkJavaScript *jsa = (LinkJavaScript*) Aact; -#endif if (jsa->isOk()) { ite->annotation().setBl_act(UnicodeParsedString(jsa->getScript())); ite->annotation().setAAact(true); } } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) Aact.reset(); -#else - Aact = nullptr; -#endif } Aact = SC_getAdditionalAction("C", ano); if (Aact) { if (Aact->getKind() == actionJavaScript) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) LinkJavaScript *jsa = (LinkJavaScript*) Aact.get(); -#else - LinkJavaScript *jsa = (LinkJavaScript*) Aact; -#endif if (jsa->isOk()) { ite->annotation().setC_act(UnicodeParsedString(jsa->getScript())); ite->annotation().setAAact(true); } } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) Aact.reset(); -#else - Aact = nullptr; -#endif } Aact = SC_getAdditionalAction("F", ano); if (Aact) { if (Aact->getKind() == actionJavaScript) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) LinkJavaScript *jsa = (LinkJavaScript*) Aact.get(); -#else - LinkJavaScript *jsa = (LinkJavaScript*) Aact; -#endif if (jsa->isOk()) { ite->annotation().setF_act(UnicodeParsedString(jsa->getScript())); @@ -1283,22 +1193,14 @@ void SlaOutputDev::handleActions(PageItem* ite, AnnotWidget *ano) ite->annotation().setFormat(5); } } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) Aact.reset(); -#else - Aact = nullptr; -#endif } Aact = SC_getAdditionalAction("K", ano); if (Aact) { if (Aact->getKind() == actionJavaScript) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) LinkJavaScript *jsa = (LinkJavaScript*) Aact.get(); -#else - LinkJavaScript *jsa = (LinkJavaScript*) Aact; -#endif if (jsa->isOk()) { ite->annotation().setK_act(UnicodeParsedString(jsa->getScript())); @@ -1306,33 +1208,21 @@ void SlaOutputDev::handleActions(PageItem* ite, AnnotWidget *ano) ite->annotation().setFormat(5); } } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) Aact.reset(); -#else - Aact = nullptr; -#endif } Aact = SC_getAdditionalAction("V", ano); if (Aact) { if (Aact->getKind() == actionJavaScript) { -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) LinkJavaScript *jsa = (LinkJavaScript*) Aact.get(); -#else - LinkJavaScript *jsa = (LinkJavaScript*) Aact; -#endif if (jsa->isOk()) { ite->annotation().setV_act(UnicodeParsedString(jsa->getScript())); ite->annotation().setAAact(true); } } -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) Aact.reset(); -#else - Aact = nullptr; -#endif } } @@ -1342,11 +1232,7 @@ void SlaOutputDev::startDoc(PDFDoc *doc, XRef *xrefA, Catalog *catA) catalog = catA; pdfDoc = doc; updateGUICounter = 0; -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 84, 0) m_fontEngine = new SplashFontEngine(true, false, false, true); -#else - m_fontEngine = new SplashFontEngine(globalParams->getEnableFreeType(), false, false, true); -#endif } void SlaOutputDev::startPage(int pageNum, GfxState *, XRef *) diff --git a/scribus/plugins/import/pdf/slaoutput.h b/scribus/plugins/import/pdf/slaoutput.h index 02e5382534..601e287451 100644 --- a/scribus/plugins/import/pdf/slaoutput.h +++ b/scribus/plugins/import/pdf/slaoutput.h @@ -30,9 +30,6 @@ for which a new license (GPL+exception) is in place. #include "selection.h" #include "vgradient.h" -#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 73, 0) -#include -#endif #include #include #include @@ -163,11 +160,7 @@ class SlaOutputDev : public OutputDev virtual ~SlaOutputDev(); LinkAction* SC_getAction(AnnotWidget *ano); -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0) std::unique_ptr SC_getAdditionalAction(const char *key, AnnotWidget *ano); -#else - LinkAction* SC_getAdditionalAction(const char *key, AnnotWidget *ano); -#endif static GBool annotations_callback(Annot *annota, void *user_data); bool handleTextAnnot(Annot* annota, double xCoor, double yCoor, double width, double height); bool handleLinkAnnot(Annot* annota, double xCoor, double yCoor, double width, double height); diff --git a/scribus/plugins/import/pdf/slaoutput.cpp b/scribus/plugins/import/pdf/slaoutput.cpp index e20a81f99e..5626fe3477 100644 --- a/scribus/plugins/import/pdf/slaoutput.cpp +++ b/scribus/plugins/import/pdf/slaoutput.cpp @@ -174,8 +174,13 @@ void AnoOutputDev::drawString(GfxState *state, POPPLER_CONST GooString *s) int shade = 100; currColorText = getColor(state->getFillColorSpace(), state->getFillColor(), &shade); fontSize = state->getFontSize(); +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) + if (state->getFont() && state->getFont()->getName()) + fontName = new GooString(state->getFont()->getName().value()); +#else if (state->getFont()) fontName = state->getFont()->getName()->copy(); +#endif itemText = s->copy(); } @@ -357,7 +362,12 @@ std::unique_ptr SlaOutputDev::SC_getAdditionalAction(const char *key GBool SlaOutputDev::annotations_callback(Annot *annota, void *user_data) { SlaOutputDev *dev = (SlaOutputDev*)user_data; +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) + const PDFRectangle& annotRect = annota->getRect();; + const PDFRectangle* box = &annotRect; +#else PDFRectangle *box = annota->getRect(); +#endif double xCoor = dev->m_doc->currentPage()->xOffset() + box->x1 - dev->cropOffsetX; double yCoor = dev->m_doc->currentPage()->yOffset() + dev->m_doc->currentPage()->height() - box->y2 + dev->cropOffsetY; double width = box->x2 - box->x1; @@ -684,7 +694,12 @@ bool SlaOutputDev::handleWidgetAnnot(Annot* annota, double xCoor, double yCoor, if (apa || !achar) { AnoOutputDev *annotOutDev = new AnoOutputDev(m_doc, m_importedColors); +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) + const PDFRectangle& annotaRect = annota->getRect(); + Gfx* gfx = new Gfx(pdfDoc, annotOutDev, pdfDoc->getPage(m_actPage)->getResourceDict(), &annotaRect, nullptr); +#else Gfx *gfx = new Gfx(pdfDoc, annotOutDev, pdfDoc->getPage(m_actPage)->getResourceDict(), annota->getRect(), nullptr); +#endif ano->draw(gfx, false); if (!bgFound) m_currColorFill = annotOutDev->currColorFill; @@ -2916,22 +2931,27 @@ void SlaOutputDev::markPoint(POPPLER_CONST char *name, Dict *properties) void SlaOutputDev::updateFont(GfxState *state) { - GfxFont *gfxFont; -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) + std::optional fontLoc; + std::string fileName; + std::unique_ptr ff; + std::optional> tmpBuf; +#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) std::optional fontLoc; const GooString * fileName = nullptr; std::unique_ptr ff; + char* tmpBuf = nullptr; #else GfxFontLoc * fontLoc = nullptr; GooString * fileName = nullptr; FoFiTrueType * ff = nullptr; + char* tmpBuf = nullptr; #endif GfxFontType fontType; SlaOutFontFileID *id; SplashFontFile *fontFile; SplashFontSrc *fontsrc = nullptr; Object refObj, strObj; - char *tmpBuf = nullptr; int tmpBufLen = 0; int *codeToGID = nullptr; const double *textMat = nullptr; @@ -2943,7 +2963,11 @@ void SlaOutputDev::updateFont(GfxState *state) m_font = nullptr; - gfxFont = state->getFont(); +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) + GfxFont* gfxFont = state->getFont().get(); +#else + GfxFont* gfxFont = state->getFont(); +#endif if (!gfxFont) goto err1; @@ -2968,15 +2992,23 @@ void SlaOutputDev::updateFont(GfxState *state) if (fontLoc->locType == gfxFontLocEmbedded) { // if there is an embedded font, read it to memory - tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen); +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) + tmpBuf = gfxFont->readEmbFontFile((xref) ? xref : pdfDoc->getXRef()); if (! tmpBuf) goto err2; +#else + tmpBuf = gfxFont->readEmbFontFile(xref, &tmpBufLen); + if (!tmpBuf) + goto err2; +#endif // external font } else { // gfxFontLocExternal -#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) + fileName = fontLoc->path; +#elif POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) fileName = fontLoc->pathAsGooString(); #else fileName = fontLoc->path; @@ -2985,52 +3017,54 @@ void SlaOutputDev::updateFont(GfxState *state) } fontsrc = new SplashFontSrc; +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) + if (!fileName.empty()) + fontsrc->setFile(fileName); + else + fontsrc->setBuf(std::move(tmpBuf.value())); +#else if (fileName) fontsrc->setFile(fileName, gFalse); else fontsrc->setBuf(tmpBuf, tmpBufLen, gTrue); +#endif // load the font file switch (fontType) { case fontType1: - if (!(fontFile = m_fontEngine->loadType1Font( - id, - fontsrc, - (const char **)((Gfx8BitFont *) gfxFont)->getEncoding()))) + if (!(fontFile = m_fontEngine->loadType1Font(id, fontsrc, (const char **)((Gfx8BitFont *) gfxFont)->getEncoding()))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); + error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); goto err2; } break; case fontType1C: - if (!(fontFile = m_fontEngine->loadType1CFont( - id, - fontsrc, - (const char **)((Gfx8BitFont *) gfxFont)->getEncoding()))) + if (!(fontFile = m_fontEngine->loadType1CFont(id, fontsrc, (const char **)((Gfx8BitFont *) gfxFont)->getEncoding()))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); + error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); goto err2; } break; case fontType1COT: - if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont( - id, - fontsrc, - (const char **)((Gfx8BitFont *) gfxFont)->getEncoding()))) + if (!(fontFile = m_fontEngine->loadOpenTypeT1CFont(id, fontsrc, (const char **)((Gfx8BitFont *) gfxFont)->getEncoding()))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); + error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); goto err2; } break; case fontTrueType: case fontTrueTypeOT: +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) + if (!fileName.empty()) + ff = FoFiTrueType::load(fileName.c_str()); + else + ff = FoFiTrueType::make(fontsrc->buf.data(), fontsrc->buf.size()); +#else if (fileName) ff = FoFiTrueType::load(fileName->getCString()); else ff = FoFiTrueType::make(tmpBuf, tmpBufLen); +#endif if (ff) { #if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) @@ -3047,24 +3081,17 @@ void SlaOutputDev::updateFont(GfxState *state) codeToGID = nullptr; n = 0; } - if (!(fontFile = m_fontEngine->loadTrueTypeFont( - id, - fontsrc, - codeToGID, n))) + if (!(fontFile = m_fontEngine->loadTrueTypeFont(id, fontsrc, codeToGID, n))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); + error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); goto err2; } break; case fontCIDType0: case fontCIDType0C: - if (!(fontFile = m_fontEngine->loadCIDFont( - id, - fontsrc))) + if (!(fontFile = m_fontEngine->loadCIDFont(id, fontsrc))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); + error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); goto err2; } break; @@ -3080,10 +3107,7 @@ void SlaOutputDev::updateFont(GfxState *state) codeToGID = nullptr; n = 0; } - if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont( - id, - fontsrc, - codeToGID, n))) + if (!(fontFile = m_fontEngine->loadOpenTypeCFFFont(id, fontsrc, codeToGID, n))) { error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); @@ -3105,10 +3129,17 @@ void SlaOutputDev::updateFont(GfxState *state) } else { +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) + if (!fileName.empty()) + ff = FoFiTrueType::load(fileName.c_str()); + else + ff = FoFiTrueType::make(fontsrc->buf.data(), fontsrc->buf.size()); +#else if (fileName) ff = FoFiTrueType::load(fileName->getCString()); else ff = FoFiTrueType::make(tmpBuf, tmpBufLen); +#endif if (! ff) goto err2; #if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 2, 0) @@ -3119,13 +3150,9 @@ void SlaOutputDev::updateFont(GfxState *state) delete ff; #endif } - if (!(fontFile = m_fontEngine->loadTrueTypeFont( - id, - fontsrc, - codeToGID, n, faceIndex))) + if (!(fontFile = m_fontEngine->loadTrueTypeFont(id, fontsrc, codeToGID, n, faceIndex))) { - error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", - gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); + error(errSyntaxError, -1, "Couldn't create a font for '{0:s}'", gfxFont->getName() ? gfxFont->getName()->getCString() : "(unnamed)"); goto err2; } break; @@ -3269,9 +3296,15 @@ void SlaOutputDev::drawChar(GfxState* state, double x, double y, double dx, doub GBool SlaOutputDev::beginType3Char(GfxState *state, double x, double y, double dx, double dy, CharCode code, POPPLER_CONST_082 Unicode *u, int uLen) { // qDebug() << "beginType3Char"; +#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(22, 4, 0) GfxFont *gfxFont; + if (!(gfxFont = state->getFont().get())) + return gTrue; +#else + GfxFont* gfxFont; if (!(gfxFont = state->getFont())) return gTrue; +#endif if (gfxFont->getType() != fontType3) return gTrue; F3Entry f3e;