Author: jghali
Date: Thu Aug 12 14:47:13 2021
New Revision: 24693

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=24693
Log:
#16616: Refactor and modernize pdfimport <fsimonis>

Modified:
    trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp

Modified: trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=24693&path=/trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp      (original)
+++ trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp      Thu Aug 12 
14:47:13 2021
@@ -6,6 +6,7 @@
 */
 
 #include <cstdlib>
+#include <memory>
 
 #include <QByteArray>
 #include <QCursor>
@@ -78,80 +79,60 @@
 #if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 83, 0)
        globalParams.reset(new GlobalParams());
 #else
-       globalParams = new GlobalParams();
+       std::unique_ptr<GlobalParams> globalParamsPtr(new GlobalParams());
+       globalParams = globalParamsPtr.get();
 #endif
-       if (globalParams)
-       {
+
 #if defined(Q_OS_WIN32) && POPPLER_ENCODED_VERSION >= 
POPPLER_VERSION_ENCODE(0, 62, 0)
-               GooString *fname = new GooString(pdfFile.toUtf8().data());
+       auto fname = new GooString(pdfFile.toUtf8().data());
 #else
-               GooString *fname = new 
GooString(QFile::encodeName(pdfFile).data());
+       auto fname = new GooString(QFile::encodeName(pdfFile).data());
 #endif
-               globalParams->setErrQuiet(gTrue);
-               PDFDoc *pdfDoc = new PDFDoc(fname, nullptr, nullptr, nullptr);
-               if (pdfDoc)
-               {
-                       if (pdfDoc->getErrorCode() == errEncrypted)
-                       {
-                               delete pdfDoc;
-#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 83, 0)
-                               delete globalParams;
-#endif
-                               return QImage();
-                       }
-                       if (pdfDoc->isOk())
-                       {
-                               double h = pdfDoc->getPageMediaHeight(1);
-                               double w = pdfDoc->getPageMediaWidth(1);
-                               double scale = qMin(500.0 / h, 500.0 / w);
-                               double hDPI = 72.0 * scale;
-                               double vDPI = 72.0 * scale;
-                               SplashColor bgColor;
-                               bgColor[0] = 255;
-                               bgColor[1] = 255;
-                               bgColor[2] = 255;
-                               SplashOutputDev *dev = new 
SplashOutputDev(splashModeXBGR8, 4, gFalse, bgColor, gTrue);
-                               dev->setVectorAntialias(gTrue);
-                               dev->setFreeTypeHinting(gTrue, gFalse);
-                               dev->startDoc(pdfDoc);
-                               pdfDoc->displayPage(dev, 1, hDPI, vDPI, 0, 
gTrue, gFalse, gFalse);
-                               SplashBitmap *bitmap = dev->getBitmap();
-                               int bw = bitmap->getWidth();
-                               int bh = bitmap->getHeight();
-                               SplashColorPtr dataPtr = bitmap->getDataPtr();
-                               if (QSysInfo::BigEndian == QSysInfo::ByteOrder)
-                               {
-                                       uchar c;
-                                       int count = bw * bh * 4;
-                                       for (int k = 0; k < count; k += 4)
-                                       {
-                                               c = dataPtr[k];
-                                               dataPtr[k] = dataPtr[k+3];
-                                               dataPtr[k+3] = c;
-                                               c = dataPtr[k+1];
-                                               dataPtr[k+1] = dataPtr[k+2];
-                                               dataPtr[k+2] = c;
-                                       }
-                               }
-                               // construct a qimage SHARING the raw bitmap 
data in memory
-                               QImage tmpimg( dataPtr, bw, bh, 
QImage::Format_ARGB32 );
-                               QImage image = tmpimg.copy();
-                               image.setText("XSize", QString("%1").arg(w));
-                               image.setText("YSize", QString("%1").arg(h));
-                               delete dev;
-                               delete pdfDoc;
-#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 83, 0)
-                               delete globalParams;
-#endif
-                               return image;
-                       }
-                       delete pdfDoc;
-#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 83, 0)
-                       delete globalParams;
-#endif
-               }
-       }
-       return QImage();
+       globalParams->setErrQuiet(gTrue);
+
+       PDFDoc pdfDoc{fname, nullptr, nullptr, nullptr};
+       if (!pdfDoc.isOk() || pdfDoc.getErrorCode() == errEncrypted)
+               return QImage();
+
+       double h = pdfDoc.getPageMediaHeight(1);
+       double w = pdfDoc.getPageMediaWidth(1);
+       double scale = qMin(500.0 / h, 500.0 / w);
+       double hDPI = 72.0 * scale;
+       double vDPI = 72.0 * scale;
+       SplashColor bgColor;
+       bgColor[0] = 255;
+       bgColor[1] = 255;
+       bgColor[2] = 255;
+       SplashOutputDev dev(splashModeXBGR8, 4, gFalse, bgColor, gTrue);
+       dev.setVectorAntialias(gTrue);
+       dev.setFreeTypeHinting(gTrue, gFalse);
+       dev.startDoc(&pdfDoc);
+       pdfDoc.displayPage(&dev, 1, hDPI, vDPI, 0, gTrue, gFalse, gFalse);
+       SplashBitmap *bitmap = dev.getBitmap();
+       int bw = bitmap->getWidth();
+       int bh = bitmap->getHeight();
+       SplashColorPtr dataPtr = bitmap->getDataPtr();
+       if (QSysInfo::BigEndian == QSysInfo::ByteOrder)
+       {
+               uchar c;
+               int count = bw * bh * 4;
+               for (int k = 0; k < count; k += 4)
+               {
+                       c = dataPtr[k];
+                       dataPtr[k] = dataPtr[k + 3];
+                       dataPtr[k + 3] = c;
+                       c = dataPtr[k + 1];
+                       dataPtr[k + 1] = dataPtr[k + 2];
+                       dataPtr[k + 2] = c;
+               }
+       }
+       // construct a qimage SHARING the raw bitmap data in memory
+       QImage tmpimg( dataPtr, bw, bh, QImage::Format_ARGB32 );
+       QImage image = tmpimg.copy();
+       image.setText("XSize", QString("%1").arg(w));
+       image.setText("YSize", QString("%1").arg(h));
+
+       return image;
 }
 
 bool PdfPlug::import(const QString& fNameIn, const TransactionSettings& 
trSettings, int flags, bool showProgress)
@@ -331,6 +312,7 @@
 {
        delete m_progressDialog;
        delete m_tmpSele;
+       delete m_pdfDoc;
 }
 
 bool PdfPlug::convert(const QString& fn)
@@ -350,192 +332,151 @@
 #if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 83, 0)
        globalParams.reset(new GlobalParams());
 #else
-       globalParams = new GlobalParams();
+       std::unique_ptr<GlobalParams> globalParamsPtr(new GlobalParams());
+       globalParams = globalParamsPtr.get();
 #endif
-       GooString *userPW = nullptr;
-       if (globalParams)
-       {
 #if defined(Q_OS_WIN32) && POPPLER_ENCODED_VERSION >= 
POPPLER_VERSION_ENCODE(0, 62, 0)
-               GooString *fname = new GooString(fn.toUtf8().data());
+       auto fname = new GooString(fn.toUtf8().data());
 #else
-               GooString *fname = new GooString(QFile::encodeName(fn).data());
+       auto fname = new GooString(QFile::encodeName(fn).data());
 #endif
-               globalParams->setErrQuiet(gTrue);
-               GBool hasOcg = gFalse;
-               QList<OptionalContentGroup*> ocgGroups;
-//             globalParams->setPrintCommands(gTrue);
-               PDFDoc *pdfDoc = new PDFDoc(fname, nullptr, nullptr, nullptr);
-               if (pdfDoc)
-               {
-                       if (pdfDoc->getErrorCode() == errEncrypted)
+       globalParams->setErrQuiet(gTrue);
+//     globalParams->setPrintCommands(gTrue);
+       QList<OptionalContentGroup*> ocgGroups;
+       auto pdfDoc = std::unique_ptr<PDFDoc>(new PDFDoc(fname, nullptr, 
nullptr, nullptr));
+       if (pdfDoc)
+       {
+               if (pdfDoc->getErrorCode() == errEncrypted)
+               {
+                       pdfDoc = nullptr;
+                       if (m_progressDialog)
+                               m_progressDialog->hide();
+                       qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
+                       ScribusMainWindow* mw = m_Doc->scMW();
+                       bool ok;
+                       QString text = QInputDialog::getText(mw, tr("Open 
PDF-File"), tr("Password"), QLineEdit::Normal, "", &ok);
+                       if (ok && !text.isEmpty())
                        {
-                               delete pdfDoc;
-                               pdfDoc = nullptr;
+#if defined(Q_OS_WIN32) && POPPLER_ENCODED_VERSION >= 
POPPLER_VERSION_ENCODE(0, 62, 0)
+                               auto fname = new GooString(fn.toUtf8().data());
+#else
+                               auto fname = new 
GooString(QFile::encodeName(fn).data());
+#endif
+                               auto userPW = new 
GooString(text.toLocal8Bit().data());
+                               pdfDoc.reset(new PDFDoc(fname, userPW, userPW, 
nullptr));
+                               
qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
+                       }
+                       if ((!pdfDoc) || (pdfDoc->getErrorCode() != errNone))
+                       {
+                               if (m_progressDialog)
+                                       m_progressDialog->close();
+#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 83, 0)
+                               delete globalParams;
+#endif
+                               return false;
+                       }
+                       if (m_progressDialog)
+                               m_progressDialog->show();
+               }
+               if (pdfDoc->isOk())
+               {
+                       std::vector<int> pageNs;
+                       QString pageString = "*";
+                       m_pdfDoc = pdfDoc.get();
+                       double hDPI = 72.0;
+                       double vDPI = 72.0;
+                       int firstPage = 1;
+                       int lastPage = pdfDoc->getNumPages();
+                       GBool useMediaBox = gTrue;
+                       GBool crop = gTrue;
+                       GBool printing = gFalse;
+                       const PDFRectangle *mediaBox = 
pdfDoc->getPage(1)->getMediaBox();
+                       QRectF mediaRect = QRectF(QPointF(mediaBox->x1, 
mediaBox->y1), QPointF(mediaBox->x2, mediaBox->y2)).normalized();
+                       bool boxesAreDifferent = false;
+                       if (getCBox(Crop_Box, 1) != mediaRect)
+                               boxesAreDifferent = true;
+                       else if (getCBox(Trim_Box, 1) != mediaRect)
+                               boxesAreDifferent = true;
+                       else if (getCBox(Bleed_Box, 1) != mediaRect)
+                               boxesAreDifferent = true;
+                       else if (getCBox(Art_Box, 1) != mediaRect)
+                               boxesAreDifferent = true;
+                       bool cropped = false;
+                       bool importTextAsVectors = true;
+                       int contentRect = Media_Box;
+                       if ((m_interactive && !m_noDialogs) || (m_importerFlags 
& LoadSavePlugin::lfCreateDoc))
+                       {
                                if (m_progressDialog)
                                        m_progressDialog->hide();
                                
qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
-                               ScribusMainWindow* mw = m_Doc->scMW();
-                               bool ok;
-                               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)
-                                       fname = new 
GooString(fn.toUtf8().data());
-#else
-                                       fname = new 
GooString(QFile::encodeName(fn).data());
-#endif
-                                       userPW = new 
GooString(text.toLocal8Bit().data());
-                                       pdfDoc = new PDFDoc(fname, userPW, 
userPW, nullptr);
-                                       
qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
-                               }
-                               if ((!pdfDoc) || (pdfDoc->getErrorCode() != 
errNone))
+                               PdfImportOptions 
optImp(ScCore->primaryMainWindow());
+                               QFileInfo fi = QFileInfo(fn);
+                               optImp.setUpOptions(fi.fileName(), firstPage, 
lastPage, m_interactive, boxesAreDifferent, this);
+                               if (!optImp.exec())
                                {
                                        if (m_progressDialog)
                                                m_progressDialog->close();
-                                       delete pdfDoc;
-#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 83, 0)
-                                       delete globalParams;
-#endif
+                                       m_pdfDoc = nullptr;
                                        return false;
                                }
+                               pageString = optImp.getPagesString();
+                               contentRect = optImp.getCropBox();
+                               cropped = optImp.croppingEnabled();
+                               if (!cropped)
+                                       crop = cropped;
+                               importTextAsVectors = 
optImp.getImportAsVectors();
+                               // When displaying      pages slices, we should 
always set useMediaBox to true
+                               // in order to use MediaBox (x, y) as 
coordinate system
+                               if (contentRect != Media_Box)
+                                       useMediaBox = gFalse;
+                               if (cropped)
+                                       useMediaBox = gTrue;
+                               
qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
                                if (m_progressDialog)
                                        m_progressDialog->show();
                        }
-                       if (pdfDoc->isOk())
+
+                       parsePagesString(pageString, &pageNs, lastPage);
+                       if (m_progressDialog)
                        {
-                               std::vector<int> pageNs;
-                               QString pageString = "*";
-                               m_pdfDoc = pdfDoc;
-                               double hDPI = 72.0;
-                               double vDPI = 72.0;
-                               int firstPage = 1;
-                               int lastPage = pdfDoc->getNumPages();
-                               GBool useMediaBox = gTrue;
-                               GBool crop = gTrue;
-                               GBool printing = gFalse;
-                               const PDFRectangle *mediaBox = 
pdfDoc->getPage(1)->getMediaBox();
-                               QRectF mediaRect = QRectF(QPointF(mediaBox->x1, 
mediaBox->y1), QPointF(mediaBox->x2, mediaBox->y2)).normalized();
-                               bool boxesAreDifferent = false;
-                               if (getCBox(Crop_Box, 1) != mediaRect)
-                                       boxesAreDifferent = true;
-                               else if (getCBox(Trim_Box, 1) != mediaRect)
-                                       boxesAreDifferent = true;
-                               else if (getCBox(Bleed_Box, 1) != mediaRect)
-                                       boxesAreDifferent = true;
-                               else if (getCBox(Art_Box, 1) != mediaRect)
-                                       boxesAreDifferent = true;
-                               bool cropped = false;
-                               bool importTextAsVectors = true;
-                               int contentRect = Media_Box;
-                               if ((m_interactive && !m_noDialogs) || 
(m_importerFlags & LoadSavePlugin::lfCreateDoc))
+                               m_progressDialog->setTotalSteps("GI", 
pageNs.size());
+                               qApp->processEvents();
+                       }
+                       if (pageNs.size() <= 0) {
+                               m_pdfDoc = nullptr;
+                               return false;
+                       }
+
+                       firstPage = pageNs[0];
+                       std::unique_ptr<SlaOutputDev> dev;
+                       if (importTextAsVectors)
+                               dev.reset(new SlaOutputDev(m_Doc, &m_elements, 
&m_importedColors, m_importerFlags));
+                       else
+                               dev.reset(new PdfTextOutputDev(m_Doc, 
&m_elements, &m_importedColors, m_importerFlags));
+
+                       if (dev->isOk())
+                       {
+                               OCGs* ocg = pdfDoc->getOptContentConfig();
+                               if (ocg && ocg->hasOCGs())
                                {
-                                       if (m_progressDialog)
-                                               m_progressDialog->hide();
-                                       
qApp->changeOverrideCursor(QCursor(Qt::ArrowCursor));
-                                       PdfImportOptions *optImp = new 
PdfImportOptions(ScCore->primaryMainWindow());
-                                       QFileInfo fi = QFileInfo(fn);
-                                       optImp->setUpOptions(fi.fileName(), 
firstPage, lastPage, m_interactive, boxesAreDifferent, this);
-                                       if (!optImp->exec())
-                                       {
-                                               if (m_progressDialog)
-                                                       
m_progressDialog->close();
-                                               delete optImp;
-                                               delete pdfDoc;
-#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 83, 0)
-                                               delete globalParams;
-#endif
-                                               return false;
-                                       }
-                                       pageString = optImp->getPagesString();
-                                       contentRect = optImp->getCropBox();
-                                       cropped = optImp->croppingEnabled();
-                                       if (!cropped)
-                                               crop = cropped;
-                                       importTextAsVectors = 
optImp->getImportAsVectors();
-                                       // When displaying  pages slices, we 
should always set useMediaBox to true
-                                       // in order to use MediaBox (x, y) as 
coordinate system
-                                       if (contentRect != Media_Box)
-                                               useMediaBox = gFalse;
-                                       if (cropped)
-                                               useMediaBox = gTrue;
-                                       delete optImp;
-                                       
qApp->changeOverrideCursor(QCursor(Qt::WaitCursor));
-                                       if (m_progressDialog)
-                                               m_progressDialog->show();
-                               }
-
-                               parsePagesString(pageString, &pageNs, lastPage);
-                               if (m_progressDialog)
-                               {
-                                       m_progressDialog->setTotalSteps("GI", 
pageNs.size());
-                                       qApp->processEvents();
-                               }
-                               if (pageNs.size() <= 0)
-                                       return false;
-
-                               firstPage = pageNs[0];
-                               SlaOutputDev* dev = nullptr;
-                               if (importTextAsVectors)
-                                       dev = new SlaOutputDev(m_Doc, 
&m_elements, &m_importedColors, m_importerFlags);
-                               else
-                                       dev = new PdfTextOutputDev(m_Doc, 
&m_elements, &m_importedColors, m_importerFlags);
-
-                               if (dev->isOk())
-                               {
-                                       OCGs* ocg = 
pdfDoc->getOptContentConfig();
-                                       if (ocg)
-                                       {
-                                               hasOcg = ocg->hasOCGs();
-                                               if (hasOcg)
-                                               {
-                                                       QStringList ocgNames;
-                                                       Array *order = 
ocg->getOrderArray();
-                                                       if (order)
-                                                       {
-                                                               for (int i = 0; 
i < order->getLength (); ++i)
+                                       QStringList ocgNames;
+                                       Array *order = ocg->getOrderArray();
+                                       if (order)
+                                       {
+                                               for (int i = 0; i < 
order->getLength (); ++i)
+                                               {
+                                                       Object orderItem = 
order->get(i);
+                                                       if (orderItem.isDict())
+                                                       {
+                                                               
POPPLER_CONST_075 Object POPPLER_REF ref = order->getNF(i);
+                                                               if (ref.isRef())
                                                                {
-                                                                       Object 
orderItem = order->get(i);
-                                                                       if 
(orderItem.isDict())
+                                                                       
OptionalContentGroup *oc = ocg->findOcgByRef(ref.getRef());
+                                                                       QString 
ocgName = UnicodeParsedString(oc->getName());
+                                                                       if 
(!ocgNames.contains(ocgName))
                                                                        {
-                                                                               
POPPLER_CONST_075 Object POPPLER_REF ref = order->getNF(i);
-                                                                               
if (ref.isRef())
-                                                                               
{
-                                                                               
        OptionalContentGroup *oc = ocg->findOcgByRef(ref.getRef());
-                                                                               
        QString ocgName = UnicodeParsedString(oc->getName());
-                                                                               
        if (!ocgNames.contains(ocgName))
-                                                                               
        {
-                                                                               
                ocgGroups.prepend(oc);
-                                                                               
                ocgNames.append(ocgName);
-                                                                               
        }
-                                                                               
}
-                                                                       }
-                                                                       else
-                                                                       {
-#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 69, 0)
-                                                                               
const auto& ocgs = ocg->getOCGs ();
-                                                                               
for (const auto& ocg : ocgs)
-                                                                               
{
-                                                                               
        OptionalContentGroup *oc = ocg.second.get();
-                                                                               
        QString ocgName = UnicodeParsedString(oc->getName());
-                                                                               
        if (!ocgNames.contains(ocgName))
-                                                                               
        {
-                                                                               
                ocgGroups.prepend(oc);
-                                                                               
                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
+                                                                               
ocgGroups.prepend(oc);
+                                                                               
ocgNames.append(ocgName);
                                                                        }
                                                                }
                                                        }
@@ -569,322 +510,348 @@
                                                        }
                                                }
                                        }
-
-                                       const int zeroRotate = 0;
-                                       dev->startDoc(pdfDoc, 
pdfDoc->getXRef(), pdfDoc->getCatalog());
-                                       dev->rotate = 
pdfDoc->getPageRotate(firstPage);
-                                       bool rotated = dev->rotate == 90 || 
dev->rotate == 270;
-
-                                       if (m_importerFlags & 
LoadSavePlugin::lfCreateDoc)
-                                       {
-                                               if (hasOcg)
-                                               {
-                                                       QString 
actL(m_Doc->activeLayerName());
-                                                       for (int i = 0; i < 
ocgGroups.count(); i++)
-                                                       {
-                                                               
OptionalContentGroup *oc = ocgGroups[i];
-                                                               if (actL != 
UnicodeParsedString(oc->getName()))
-                                                                       
currentLayer = m_Doc->addLayer(UnicodeParsedString(oc->getName()), false);
+                                       else
+                                       {
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 69, 0)
+                                               const auto& ocgs = ocg->getOCGs 
();
+                                               for (const auto& ocg : ocgs)
+                                               {
+                                                       OptionalContentGroup 
*oc = ocg.second.get();
+                                                       QString ocgName = 
UnicodeParsedString(oc->getName());
+                                                       if 
(!ocgNames.contains(ocgName))
+                                                       {
+                                                               
ocgGroups.prepend(oc);
+                                                               
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
+                                       }
+                               }
+
+                               const int zeroRotate = 0;
+                               dev->startDoc(pdfDoc.get(), pdfDoc->getXRef(), 
pdfDoc->getCatalog());
+                               dev->rotate = pdfDoc->getPageRotate(firstPage);
+                               bool rotated = dev->rotate == 90 || dev->rotate 
== 270;
+
+                               if (m_importerFlags & 
LoadSavePlugin::lfCreateDoc)
+                               {
+                                       if (ocg && ocg->hasOCGs())
+                                       {
+                                               QString 
actL(m_Doc->activeLayerName());
+                                               for (int i = 0; i < 
ocgGroups.count(); i++)
+                                               {
+                                                       OptionalContentGroup 
*oc = ocgGroups[i];
+                                                       if (actL != 
UnicodeParsedString(oc->getName()))
+                                                               currentLayer = 
m_Doc->addLayer(UnicodeParsedString(oc->getName()), false);
+                                                       else
+                                                               currentLayer = 
m_Doc->layerIDFromName(UnicodeParsedString(oc->getName()));
+                                                       if (oc->getState() == 
OptionalContentGroup::On)
+                                                               
m_Doc->setLayerVisible(currentLayer, true);
+                                                       else if 
(oc->getViewState() == OptionalContentGroup::ocUsageOn)
+                                                               
m_Doc->setLayerVisible(currentLayer, true);
+                                                       else
+                                                               
m_Doc->setLayerVisible(currentLayer, false);
+                                                       if 
((oc->getPrintState() == OptionalContentGroup::ocUsageOn) || 
(oc->getPrintState() == OptionalContentGroup::ocUsageUnset))
+                                                               
m_Doc->setLayerPrintable(currentLayer, true);
+                                                       else
+                                                               
m_Doc->setLayerPrintable(currentLayer, false);
+                                                       
oc->setState(OptionalContentGroup::Off);
+                                               }
+                                               dev->layersSetByOCG = true;
+                                       }
+
+                                       Object info = pdfDoc->getDocInfo();
+                                       if (info.isDict())
+                                       {
+                                               Object obj;
+                                               Dict *infoDict = info.getDict();
+                                               obj = infoDict->lookup((char*) 
"Title");
+                                               if (obj.isString())
+                                               {
+                                                       
m_Doc->documentInfo().setTitle(UnicodeParsedString(obj.getString()));
+                                               }
+                                               obj = infoDict->lookup((char*) 
"Author");
+                                               if (obj.isString())
+                                               {
+                                                       
m_Doc->documentInfo().setAuthor(UnicodeParsedString(obj.getString()));
+                                               }
+                                               obj = infoDict->lookup((char*) 
"Subject");
+                                               if (obj.isString())
+                                               {
+                                                       
m_Doc->documentInfo().setSubject(UnicodeParsedString(obj.getString()));
+                                               }
+                                               obj = infoDict->lookup((char*) 
"Keywords");
+                                               if (obj.isString())
+                                               {
+                                                       //              s1 = 
obj.getString();
+                                                       
m_Doc->documentInfo().setKeywords(UnicodeParsedString(obj.getString()));
+                                               }
+                                       }
+                                       info = Object();
+
+                                       if (cropped)
+                                       {
+                                               QRectF crBox = 
getCBox(contentRect, pageNs[0]);
+                                               if (rotated)
+                                               {
+                                                       
m_Doc->setPageWidth(crBox.height());
+                                                       
m_Doc->setPageHeight(crBox.width());
+                                               }
+                                               else
+                                               {
+                                                       
m_Doc->setPageHeight(crBox.height());
+                                                       
m_Doc->setPageWidth(crBox.width());
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if (rotated)
+                                               {
+                                                       
m_Doc->setPageWidth(pdfDoc->getPageMediaHeight(pageNs[0]));
+                                                       
m_Doc->setPageHeight(pdfDoc->getPageMediaWidth(pageNs[0]));
+                                               }
+                                               else
+                                               {
+                                                       
m_Doc->setPageHeight(pdfDoc->getPageMediaHeight(pageNs[0]));
+                                                       
m_Doc->setPageWidth(pdfDoc->getPageMediaWidth(pageNs[0]));
+                                               }
+                                       }
+                                       m_Doc->setPageSize("Custom");
+                               //      m_Doc->pdfOptions().PresentVals.clear();
+                                       for (size_t i = 0; i < pageNs.size(); 
++i)
+                                       {
+                                               if (m_progressDialog)
+                                               {
+                                                       
m_progressDialog->setProgress("GI", i);
+                                                       qApp->processEvents();
+                                               }
+                                               int pp = pageNs[i];
+                                               
m_Doc->setActiveLayer(baseLayer);
+                                               if (firstPg)
+                                                       firstPg = false;
+                                               else
+                                                       m_Doc->addPage(i);
+                                               QRectF mdBox = getCBox(0, pp);
+                                               QRectF crBox = 
getCBox(contentRect, pp);
+                                               if (cropped)
+                                               {
+                                                       if (rotated)
+                                                       {
+                                                               
m_Doc->currentPage()->setInitialWidth(crBox.height());
+                                                               
m_Doc->currentPage()->setInitialHeight(crBox.width());
+                                                               
m_Doc->currentPage()->setWidth(crBox.height());
+                                                               
m_Doc->currentPage()->setHeight(crBox.width());
+                                                               
dev->cropOffsetX = crBox.y();
+                                                               
dev->cropOffsetY = crBox.x();
+                                                       }
+                                                       else
+                                                       {
+                                                               
m_Doc->currentPage()->setInitialHeight(crBox.height());
+                                                               
m_Doc->currentPage()->setInitialWidth(crBox.width());
+                                                               
m_Doc->currentPage()->setHeight(crBox.height());
+                                                               
m_Doc->currentPage()->setWidth(crBox.width());
+                                                               
dev->cropOffsetX = crBox.x();
+                                                               
dev->cropOffsetY = crBox.y();
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       if (rotated)
+                                                       {
+                                                               
m_Doc->currentPage()->setInitialWidth(pdfDoc->getPageMediaHeight(pp));
+                                                               
m_Doc->currentPage()->setInitialHeight(pdfDoc->getPageMediaWidth(pp));
+                                                               
m_Doc->currentPage()->setWidth(pdfDoc->getPageMediaHeight(pp));
+                                                               
m_Doc->currentPage()->setHeight(pdfDoc->getPageMediaWidth(pp));
+                                                       }
+                                                       else
+                                                       {
+                                                               
m_Doc->currentPage()->setInitialHeight(pdfDoc->getPageMediaHeight(pp));
+                                                               
m_Doc->currentPage()->setInitialWidth(pdfDoc->getPageMediaWidth(pp));
+                                                               
m_Doc->currentPage()->setHeight(pdfDoc->getPageMediaHeight(pp));
+                                                               
m_Doc->currentPage()->setWidth(pdfDoc->getPageMediaWidth(pp));
+                                                       }
+                                               }
+                                               
m_Doc->currentPage()->setMasterPageNameNormal();
+                                               
m_Doc->currentPage()->setSize("Custom");
+                                               m_Doc->reformPages(true);
+                                               if (ocg && ocg->hasOCGs())
+                                               {
+                                                       for (int j = 0; j < 
ocgGroups.count(); j++)
+                                                       {
+                                                               
OptionalContentGroup *oc = ocgGroups[j];
+                                                               
oc->setState(OptionalContentGroup::On);
+                                                               if (cropped)
+                                                                       
pdfDoc->displayPageSlice(dev.get(), pp, hDPI, vDPI, zeroRotate, useMediaBox, 
crop, printing, crBox.x() - mdBox.x(), mdBox.bottom() - crBox.bottom(), 
crBox.width(), crBox.height(), nullptr, nullptr, dev->annotations_callback, 
dev.get());
                                                                else
-                                                                       
currentLayer = m_Doc->layerIDFromName(UnicodeParsedString(oc->getName()));
-                                                               if 
(oc->getState() == OptionalContentGroup::On)
-                                                                       
m_Doc->setLayerVisible(currentLayer, true);
-                                                               else if 
(oc->getViewState() == OptionalContentGroup::ocUsageOn)
-                                                                       
m_Doc->setLayerVisible(currentLayer, true);
-                                                               else
-                                                                       
m_Doc->setLayerVisible(currentLayer, false);
-                                                               if 
((oc->getPrintState() == OptionalContentGroup::ocUsageOn) || 
(oc->getPrintState() == OptionalContentGroup::ocUsageUnset))
-                                                                       
m_Doc->setLayerPrintable(currentLayer, true);
-                                                               else
-                                                                       
m_Doc->setLayerPrintable(currentLayer, false);
+                                                                       
pdfDoc->displayPage(dev.get(), pp, hDPI, vDPI, zeroRotate, useMediaBox, crop, 
printing, nullptr, nullptr, dev->annotations_callback, dev.get());
                                                                
oc->setState(OptionalContentGroup::Off);
                                                        }
-                                                       dev->layersSetByOCG = 
true;
-                                               }
-
-                                               Object info = 
pdfDoc->getDocInfo();
-                                               if (info.isDict())
-                                               {
-                                                       Object obj;
-                                                       Dict *infoDict = 
info.getDict();
-                                                       obj = 
infoDict->lookup((char*) "Title");
-                                                       if (obj.isString())
-                                                       {
-                                                               
m_Doc->documentInfo().setTitle(UnicodeParsedString(obj.getString()));
-                                                       }
-                                                       obj = 
infoDict->lookup((char*) "Author");
-                                                       if (obj.isString())
-                                                       {
-                                                               
m_Doc->documentInfo().setAuthor(UnicodeParsedString(obj.getString()));
-                                                       }
-                                                       obj = 
infoDict->lookup((char*) "Subject");
-                                                       if (obj.isString())
-                                                       {
-                                                               
m_Doc->documentInfo().setSubject(UnicodeParsedString(obj.getString()));
-                                                       }
-                                                       obj = 
infoDict->lookup((char*) "Keywords");
-                                                       if (obj.isString())
-                                                       {
-                                                               //              
s1 = obj.getString();
-                                                               
m_Doc->documentInfo().setKeywords(UnicodeParsedString(obj.getString()));
-                                                       }
-                                               }
-                                               info = Object();
-
-                                               if (cropped)
-                                               {
-                                                       QRectF crBox = 
getCBox(contentRect, pageNs[0]);
-                                                       if (rotated)
-                                                       {
-                                                               
m_Doc->setPageWidth(crBox.height());
-                                                               
m_Doc->setPageHeight(crBox.width());
-                                                       }
+                                               }
+                                               else
+                                               {
+                                                       if (cropped)
+                                                               
pdfDoc->displayPageSlice(dev.get(), pp, hDPI, vDPI, zeroRotate, useMediaBox, 
crop, printing, crBox.x() - mdBox.x(), mdBox.bottom() - crBox.bottom(), 
crBox.width(), crBox.height(), nullptr, nullptr, dev->annotations_callback, 
dev.get());
                                                        else
-                                                       {
-                                                               
m_Doc->setPageHeight(crBox.height());
-                                                               
m_Doc->setPageWidth(crBox.width());
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       if (rotated)
-                                                       {
-                                                               
m_Doc->setPageWidth(pdfDoc->getPageMediaHeight(pageNs[0]));
-                                                               
m_Doc->setPageHeight(pdfDoc->getPageMediaWidth(pageNs[0]));
-                                                       }
-                                                       else
-                                                       {
-                                                               
m_Doc->setPageHeight(pdfDoc->getPageMediaHeight(pageNs[0]));
-                                                               
m_Doc->setPageWidth(pdfDoc->getPageMediaWidth(pageNs[0]));
-                                                       }
-                                               }
-                                               m_Doc->setPageSize("Custom");
-                                       //      
m_Doc->pdfOptions().PresentVals.clear();
-                                               for (size_t i = 0; i < 
pageNs.size(); ++i)
-                                               {
-                                                       if (m_progressDialog)
-                                                       {
-                                                               
m_progressDialog->setProgress("GI", i);
-                                                               
qApp->processEvents();
-                                                       }
-                                                       int pp = pageNs[i];
-                                                       
m_Doc->setActiveLayer(baseLayer);
-                                                       if (firstPg)
-                                                               firstPg = false;
-                                                       else
-                                                               
m_Doc->addPage(i);
-                                                       QRectF mdBox = 
getCBox(0, pp);
-                                                       QRectF crBox = 
getCBox(contentRect, pp);
-                                                       if (cropped)
-                                                       {
-                                                               if (rotated)
+                                                               
pdfDoc->displayPage(dev.get(), pp, hDPI, vDPI, zeroRotate, useMediaBox, crop, 
printing, nullptr, nullptr, dev->annotations_callback, dev.get());
+                                               }
+
+                                               PDFPresentationData ef;
+                                               Object trans = 
pdfDoc->getPage(pp)->getTrans();
+                                               Object *transi = &trans;
+                                               if (transi->isDict())
+                                               {
+                                                       
m_Doc->pdfOptions().PresentMode = true;
+                                                       PageTransition 
pgTrans(transi);
+                                                       ef.pageViewDuration = 
pdfDoc->getPage(pp)->getDuration();
+                                                       ef.pageEffectDuration = 
pgTrans.getDuration();
+                                                       ef.Dm = 
pgTrans.getAlignment() == transitionHorizontal ? 0 : 1;
+                                                       ef.M = 
pgTrans.getDirection() == transitionInward ? 0 : 1;
+                                                       int ang = 
pgTrans.getAngle();
+                                                       if (ang == 0)
+                                                               ef.Di = 0;
+                                                       else if (ang == 270)
+                                                               ef.Di = 1;
+                                                       else if (ang == 90)
+                                                               ef.Di = 2;
+                                                       else if (ang == 180)
+                                                               ef.Di = 3;
+                                                       else if (ang == 315)
+                                                               ef.Di = 4;
+                                                       PageTransitionType 
trType = pgTrans.getType();
+                                                       if (trType == 
transitionReplace)
+                                                               ef.effectType = 
0;
+                                                       else if (trType == 
transitionBlinds)
+                                                               ef.effectType = 
1;
+                                                       else if (trType == 
transitionBox)
+                                                               ef.effectType = 
2;
+                                                       else if (trType == 
transitionDissolve)
+                                                               ef.effectType = 
3;
+                                                       else if (trType == 
transitionGlitter)
+                                                               ef.effectType = 
4;
+                                                       else if (trType == 
transitionSplit)
+                                                               ef.effectType = 
5;
+                                                       else if (trType == 
transitionWipe)
+                                                               ef.effectType = 
6;
+                                                       else if (trType == 
transitionPush)
+                                                               ef.effectType = 
7;
+                                                       else if (trType == 
transitionCover)
+                                                               ef.effectType = 
8;
+                                                       else if (trType == 
transitionUncover)
+                                                               ef.effectType = 
9;
+                                                       else if (trType == 
transitionFade)
+                                                               ef.effectType = 
10;
+                                               }
+                                               
m_Doc->currentPage()->PresentVals = ef;
+                                       }
+                                       int numjs = 
pdfDoc->getCatalog()->numJS();
+                                       if (numjs > 0)
+                                       {
+                                               NameTree jsNameTreeP;
+                                               Object catDict = 
pdfDoc->getXRef()->getCatalog();
+                                               if (catDict.isDict())
+                                               {
+                                                       Object names = 
catDict.dictLookup("Names");
+                                                       if (names.isDict())
+                                                       {
+                                                               Object obj = 
names.dictLookup("JavaScript");
+                                                               
jsNameTreeP.init(pdfDoc->getXRef(), &obj);
+                                                       }
+                                                       for (int a = 0; a < 
numjs; a++)
+                                                       {
+                                                               
m_Doc->JavaScripts.insert(UnicodeParsedString(jsNameTreeP.getName(a)), 
UnicodeParsedString(pdfDoc->getCatalog()->getJS(a)));
+                                                       }
+                                                       names = 
catDict.dictLookup("OpenAction");
+                                                       if (names.isDict())
+                                                       {
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0)
+                                                               
std::unique_ptr<LinkAction> 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))
                                                                {
-                                                                       
m_Doc->currentPage()->setInitialWidth(crBox.height());
-                                                                       
m_Doc->currentPage()->setInitialHeight(crBox.width());
-                                                                       
m_Doc->currentPage()->setWidth(crBox.height());
-                                                                       
m_Doc->currentPage()->setHeight(crBox.width());
-                                                                       
dev->cropOffsetX = crBox.y();
-                                                                       
dev->cropOffsetY = crBox.x();
-                                                               }
-                                                               else
-                                                               {
-                                                                       
m_Doc->currentPage()->setInitialHeight(crBox.height());
-                                                                       
m_Doc->currentPage()->setInitialWidth(crBox.width());
-                                                                       
m_Doc->currentPage()->setHeight(crBox.height());
-                                                                       
m_Doc->currentPage()->setWidth(crBox.width());
-                                                                       
dev->cropOffsetX = crBox.x();
-                                                                       
dev->cropOffsetY = crBox.y();
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               if (rotated)
-                                                               {
-                                                                       
m_Doc->currentPage()->setInitialWidth(pdfDoc->getPageMediaHeight(pp));
-                                                                       
m_Doc->currentPage()->setInitialHeight(pdfDoc->getPageMediaWidth(pp));
-                                                                       
m_Doc->currentPage()->setWidth(pdfDoc->getPageMediaHeight(pp));
-                                                                       
m_Doc->currentPage()->setHeight(pdfDoc->getPageMediaWidth(pp));
-                                                               }
-                                                               else
-                                                               {
-                                                                       
m_Doc->currentPage()->setInitialHeight(pdfDoc->getPageMediaHeight(pp));
-                                                                       
m_Doc->currentPage()->setInitialWidth(pdfDoc->getPageMediaWidth(pp));
-                                                                       
m_Doc->currentPage()->setHeight(pdfDoc->getPageMediaHeight(pp));
-                                                                       
m_Doc->currentPage()->setWidth(pdfDoc->getPageMediaWidth(pp));
-                                                               }
-                                                       }
-                                                       
m_Doc->currentPage()->setMasterPageNameNormal();
-                                                       
m_Doc->currentPage()->setSize("Custom");
-                                                       
m_Doc->reformPages(true);
-                                                       if (hasOcg)
-                                                       {
-                                                               for (int j = 0; 
j < ocgGroups.count(); j++)
-                                                               {
-                                                                       
OptionalContentGroup *oc = ocgGroups[j];
-                                                                       
oc->setState(OptionalContentGroup::On);
-                                                                       if 
(cropped)
-                                                                               
pdfDoc->displayPageSlice(dev, pp, hDPI, vDPI, zeroRotate, useMediaBox, crop, 
printing, crBox.x() - mdBox.x(), mdBox.bottom() - crBox.bottom(), 
crBox.width(), crBox.height(), nullptr, nullptr, dev->annotations_callback, 
dev);
-                                                                       else
-                                                                               
pdfDoc->displayPage(dev, pp, hDPI, vDPI, zeroRotate, useMediaBox, crop, 
printing, nullptr, nullptr, dev->annotations_callback, dev);
-                                                                       
oc->setState(OptionalContentGroup::Off);
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               if (cropped)
-                                                                       
pdfDoc->displayPageSlice(dev, pp, hDPI, vDPI, zeroRotate, useMediaBox, crop, 
printing, crBox.x() - mdBox.x(), mdBox.bottom() - crBox.bottom(), 
crBox.width(), crBox.height(), nullptr, nullptr, dev->annotations_callback, 
dev);
-                                                               else
-                                                                       
pdfDoc->displayPage(dev, pp, hDPI, vDPI, zeroRotate, useMediaBox, crop, 
printing, nullptr, nullptr, dev->annotations_callback, dev);
-                                                       }
-
-                                                       PDFPresentationData ef;
-                                                       Object trans = 
pdfDoc->getPage(pp)->getTrans();
-                                                       Object *transi = &trans;
-                                                       if (transi->isDict())
-                                                       {
-                                                               
m_Doc->pdfOptions().PresentMode = true;
-                                                               PageTransition 
*pgTrans = new PageTransition(transi);
-                                                               
ef.pageViewDuration = pdfDoc->getPage(pp)->getDuration();
-                                                               
ef.pageEffectDuration = pgTrans->getDuration();
-                                                               ef.Dm = 
pgTrans->getAlignment() == transitionHorizontal ? 0 : 1;
-                                                               ef.M = 
pgTrans->getDirection() == transitionInward ? 0 : 1;
-                                                               int ang = 
pgTrans->getAngle();
-                                                               if (ang == 0)
-                                                                       ef.Di = 
0;
-                                                               else if (ang == 
270)
-                                                                       ef.Di = 
1;
-                                                               else if (ang == 
90)
-                                                                       ef.Di = 
2;
-                                                               else if (ang == 
180)
-                                                                       ef.Di = 
3;
-                                                               else if (ang == 
315)
-                                                                       ef.Di = 
4;
-                                                               
PageTransitionType trType = pgTrans->getType();
-                                                               if (trType == 
transitionReplace)
-                                                                       
ef.effectType = 0;
-                                                               else if (trType 
== transitionBlinds)
-                                                                       
ef.effectType = 1;
-                                                               else if (trType 
== transitionBox)
-                                                                       
ef.effectType = 2;
-                                                               else if (trType 
== transitionDissolve)
-                                                                       
ef.effectType = 3;
-                                                               else if (trType 
== transitionGlitter)
-                                                                       
ef.effectType = 4;
-                                                               else if (trType 
== transitionSplit)
-                                                                       
ef.effectType = 5;
-                                                               else if (trType 
== transitionWipe)
-                                                                       
ef.effectType = 6;
-                                                               else if (trType 
== transitionPush)
-                                                                       
ef.effectType = 7;
-                                                               else if (trType 
== transitionCover)
-                                                                       
ef.effectType = 8;
-                                                               else if (trType 
== transitionUncover)
-                                                                       
ef.effectType = 9;
-                                                               else if (trType 
== transitionFade)
-                                                                       
ef.effectType = 10;
-                                                               delete pgTrans;
-                                                       }
-                                                       
m_Doc->currentPage()->PresentVals = ef;
-                                               }
-                                               int numjs = 
pdfDoc->getCatalog()->numJS();
-                                               if (numjs > 0)
-                                               {
-                                                       NameTree *jsNameTreeP = 
new NameTree();
-                                                       Object catDict = 
pdfDoc->getXRef()->getCatalog();
-                                                       if (catDict.isDict())
-                                                       {
-                                                               Object names = 
catDict.dictLookup("Names");
-                                                               if 
(names.isDict())
-                                                               {
-                                                                       Object 
obj = names.dictLookup("JavaScript");
-                                                                       
jsNameTreeP->init(pdfDoc->getXRef(), &obj);
-                                                               }
-                                                               for (int a = 0; 
a < numjs; a++)
-                                                               {
-                                                                       
m_Doc->JavaScripts.insert(UnicodeParsedString(jsNameTreeP->getName(a)), 
UnicodeParsedString(pdfDoc->getCatalog()->getJS(a)));
-                                                               }
-                                                               names = 
catDict.dictLookup("OpenAction");
-                                                               if 
(names.isDict())
-                                                               {
-#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 86, 0)
-                                                                       
std::unique_ptr<LinkAction> 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;
+                                                                       if 
(jsa->isOk())
                                                                        {
-                                                                               
LinkJavaScript *jsa = (LinkJavaScript*) linkAction;
-                                                                               
if (jsa->isOk())
+                                                                               
QString script = UnicodeParsedString(jsa->getScript());
+                                                                               
if (script.startsWith("this."))
                                                                                
{
-                                                                               
        QString script = UnicodeParsedString(jsa->getScript());
-                                                                               
        if (script.startsWith("this."))
-                                                                               
        {
-                                                                               
                script.remove(0, 5);
-                                                                               
                script.remove("()");
-                                                                               
                if (m_Doc->JavaScripts.contains(script))
-                                                                               
                        m_Doc->pdfOptions().openAction = script;
-                                                                               
        }
+                                                                               
        script.remove(0, 5);
+                                                                               
        script.remove("()");
+                                                                               
        if (m_Doc->JavaScripts.contains(script))
+                                                                               
                m_Doc->pdfOptions().openAction = script;
                                                                                
}
                                                                        }
                                                                }
                                                        }
-                                                       delete jsNameTreeP;
-                                               }
-                                               m_Doc->pdfOptions().Version = 
(PDFVersion::Version) qMin(16, qMax(13, pdfDoc->getPDFMajorVersion() * 10 + 
pdfDoc->getPDFMinorVersion()));
-                                               ViewerPreferences *viewPrefs = 
pdfDoc->getCatalog()->getViewerPreferences();
-                                               if (viewPrefs)
-                                               {
-                                                       
m_Doc->pdfOptions().Binding = viewPrefs->getDirection() == 
ViewerPreferences::directionL2R ? 0 : 1;
-                                                       
m_Doc->pdfOptions().hideMenuBar = viewPrefs->getHideMenubar();
-                                                       
m_Doc->pdfOptions().hideToolBar = viewPrefs->getHideToolbar();
-                                                       
m_Doc->pdfOptions().fitWindow = viewPrefs->getFitWindow();
-                                               }
-                                               Catalog::PageMode pgm = 
pdfDoc->getCatalog()->getPageMode();
-                                               
m_Doc->pdfOptions().displayFullscreen = (pgm == Catalog::pageModeFullScreen);
-                                               
m_Doc->pdfOptions().displayThumbs = (pgm == Catalog::pageModeThumbs);
-                                               
m_Doc->pdfOptions().displayBookmarks = (pgm == Catalog::pageModeOutlines);
-                                               
m_Doc->pdfOptions().displayLayers = (pgm == Catalog::pageModeOC);
-                                               Catalog::PageLayout pgl = 
pdfDoc->getCatalog()->getPageLayout();
-                                               if (pgl == 
Catalog::pageLayoutSinglePage)
-                                                       
m_Doc->pdfOptions().PageLayout = PDFOptions::SinglePage;
-                                               else if (pgl == 
Catalog::pageLayoutOneColumn)
-                                                       
m_Doc->pdfOptions().PageLayout = PDFOptions::OneColumn;
-                                               else if ((pgl == 
Catalog::pageLayoutTwoColumnLeft) || (pgl == Catalog::pageLayoutTwoPageLeft))
-                                               {
-                                                       
m_Doc->setPagePositioning(1);
-                                                       
m_Doc->setPageSetFirstPage(1, 0);
-                                                       
m_Doc->pdfOptions().PageLayout = PDFOptions::TwoColumnLeft;
-                                               }
-                                               else if ((pgl == 
Catalog::pageLayoutTwoColumnRight) || (pgl == Catalog::pageLayoutTwoPageRight))
-                                               {
-                                                       
m_Doc->setPagePositioning(1);
-                                                       
m_Doc->setPageSetFirstPage(1, 1);
-                                                       
m_Doc->pdfOptions().PageLayout = PDFOptions::TwoColumnRight;
-                                               }
-                                       }
-                                       else
-                                       {
-                                               if (hasOcg)
-                                               {
-                                                       for (int a = 0; a < 
ocgGroups.count(); a++)
-                                                       {
-                                                               
ocgGroups[a]->setState(OptionalContentGroup::On);
-                                                       }
-                                               }
-                                               pdfDoc->displayPage(dev, 
firstPage, hDPI, vDPI, zeroRotate, useMediaBox, crop, printing, nullptr, 
nullptr, dev->annotations_callback, dev);
+                                               }
+                                       }
+                                       m_Doc->pdfOptions().Version = 
(PDFVersion::Version) qMin(16, qMax(13, pdfDoc->getPDFMajorVersion() * 10 + 
pdfDoc->getPDFMinorVersion()));
+                                       ViewerPreferences *viewPrefs = 
pdfDoc->getCatalog()->getViewerPreferences();
+                                       if (viewPrefs)
+                                       {
+                                               m_Doc->pdfOptions().Binding = 
viewPrefs->getDirection() == ViewerPreferences::directionL2R ? 0 : 1;
+                                               m_Doc->pdfOptions().hideMenuBar 
= viewPrefs->getHideMenubar();
+                                               m_Doc->pdfOptions().hideToolBar 
= viewPrefs->getHideToolbar();
+                                               m_Doc->pdfOptions().fitWindow = 
viewPrefs->getFitWindow();
+                                       }
+                                       Catalog::PageMode pgm = 
pdfDoc->getCatalog()->getPageMode();
+                                       m_Doc->pdfOptions().displayFullscreen = 
(pgm == Catalog::pageModeFullScreen);
+                                       m_Doc->pdfOptions().displayThumbs = 
(pgm == Catalog::pageModeThumbs);
+                                       m_Doc->pdfOptions().displayBookmarks = 
(pgm == Catalog::pageModeOutlines);
+                                       m_Doc->pdfOptions().displayLayers = 
(pgm == Catalog::pageModeOC);
+                                       Catalog::PageLayout pgl = 
pdfDoc->getCatalog()->getPageLayout();
+                                       if (pgl == 
Catalog::pageLayoutSinglePage)
+                                               m_Doc->pdfOptions().PageLayout 
= PDFOptions::SinglePage;
+                                       else if (pgl == 
Catalog::pageLayoutOneColumn)
+                                               m_Doc->pdfOptions().PageLayout 
= PDFOptions::OneColumn;
+                                       else if ((pgl == 
Catalog::pageLayoutTwoColumnLeft) || (pgl == Catalog::pageLayoutTwoPageLeft))
+                                       {
+                                               m_Doc->setPagePositioning(1);
+                                               m_Doc->setPageSetFirstPage(1, 
0);
+                                               m_Doc->pdfOptions().PageLayout 
= PDFOptions::TwoColumnLeft;
+                                       }
+                                       else if ((pgl == 
Catalog::pageLayoutTwoColumnRight) || (pgl == Catalog::pageLayoutTwoPageRight))
+                                       {
+                                               m_Doc->setPagePositioning(1);
+                                               m_Doc->setPageSetFirstPage(1, 
1);
+                                               m_Doc->pdfOptions().PageLayout 
= PDFOptions::TwoColumnRight;
                                        }
                                }
-                               delete dev;
+                               else
+                               {
+                                       if (ocg && ocg->hasOCGs())
+                                       {
+                                               for (int a = 0; a < 
ocgGroups.count(); a++)
+                                               {
+                                                       
ocgGroups[a]->setState(OptionalContentGroup::On);
+                                               }
+                                       }
+                                       pdfDoc->displayPage(dev.get(), 
firstPage, hDPI, vDPI, zeroRotate, useMediaBox, crop, printing, nullptr, 
nullptr, dev->annotations_callback, dev.get());
+                               }
                        }
-               }
-               delete pdfDoc;
+
+                       m_pdfDoc = nullptr;
+               }
+               pdfDoc.reset();
        }
 #if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 83, 0)
-       globalParams.release();
+       globalParams.reset();
 #else
-       delete globalParams;
        globalParams = nullptr;
 #endif
 


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to