r22154 by jghali -

scribus-commit scribus-commit at lists.scribus.net
Fri Sep 8 16:52:10 UTC 2017


Author: jghali
Date: Fri Sep  8 16:52:10 2017
New Revision: 22154

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=22154
Log:
#14979: poppler-0.58 breaks build

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

Modified: trunk/Scribus/scribus/plugins/import/pdf/importpdf.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=22154&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	Fri Sep  8 16:52:10 2017
@@ -22,6 +22,7 @@
 #include <poppler/PageTransition.h>
 #include <poppler/ViewerPreferences.h>
 #include <poppler/poppler-config.h>
+#include <poppler/cpp/poppler-version.h>
 #include <poppler/SplashOutputDev.h>
 #include <poppler/splash/SplashBitmap.h>
 
@@ -58,6 +59,12 @@
 #include "ui/missing.h"
 #include "ui/multiprogressdialog.h"
 #include "ui/propertiespalette.h"
+
+#define POPPLER_VERSION_ENCODE(major, minor, micro) (	\
+	  ((major) * 10000)				\
+	+ ((minor) *   100)				\
+	+ ((micro) *     1))
+#define POPPLER_ENCODED_VERSION POPPLER_VERSION_ENCODE(POPPLER_VERSION_MAJOR, POPPLER_VERSION_MINOR, POPPLER_VERSION_MICRO)
 
 PdfPlug::PdfPlug(ScribusDoc* doc, int flags)
 {
@@ -507,12 +514,20 @@
 							{
 								for (int i = 0; i < order->getLength (); ++i)
 								{
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+									Object orderItem = order->get(i);
+#else
 									Object orderItem;
 									order->get(i, &orderItem);
+#endif
 									if (orderItem.isDict())
 									{
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+										Object ref = order->getNF(i);		
+#else
 										Object ref;
 										order->getNF(i, &ref);
+#endif
 										if (ref.isRef())
 										{
 											OptionalContentGroup *oc = ocg->findOcgByRef(ref.getRef());
@@ -523,7 +538,9 @@
 												ocgNames.append(ocgName);
 											}
 										}
+#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 58, 0)
 										ref.free();
+#endif
 									}
 									else
 									{
@@ -597,39 +614,71 @@
 							dev->layersSetByOCG = true;
 						}
 #endif
+
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+						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();
+#else
 						Object info;
 						pdfDoc->getDocInfo(&info);
 						if (info.isDict())
 						{
 							Object obj;
-						//	GooString *s1;
+							//	GooString *s1;
 							Dict *infoDict = info.getDict();
-							if (infoDict->lookup((char*)"Title", &obj )->isString())
-							{
-						//		s1 = obj.getString();
+							if (infoDict->lookup((char*)"Title", &obj)->isString())
+							{
+								//		s1 = obj.getString();
 								m_Doc->documentInfo().setTitle(UnicodeParsedString(obj.getString()));
 								obj.free();
 							}
-							if (infoDict->lookup((char*)"Author", &obj )->isString())
-							{
-						//		s1 = obj.getString();
+							if (infoDict->lookup((char*)"Author", &obj)->isString())
+							{
+								//		s1 = obj.getString();
 								m_Doc->documentInfo().setAuthor(UnicodeParsedString(obj.getString()));
 								obj.free();
 							}
-							if (infoDict->lookup((char*)"Subject", &obj )->isString())
-							{
-						//		s1 = obj.getString();
+							if (infoDict->lookup((char*)"Subject", &obj)->isString())
+							{
+								//		s1 = obj.getString();
 								m_Doc->documentInfo().setSubject(UnicodeParsedString(obj.getString()));
 								obj.free();
 							}
-							if (infoDict->lookup((char*)"Keywords", &obj )->isString())
-							{
-						//		s1 = obj.getString();
+							if (infoDict->lookup((char*)"Keywords", &obj)->isString())
+							{
+								//		s1 = obj.getString();
 								m_Doc->documentInfo().setKeywords(UnicodeParsedString(obj.getString()));
 								obj.free();
 							}
 						}
 						info.free();
+#endif
 						if (cropped)
 						{
 							QRectF crBox = getCBox(contentRect, pageNs[0]);
@@ -746,8 +795,13 @@
 									pdfDoc->displayPage(dev, pp, hDPI, vDPI, rotate, useMediaBox, crop, printing, NULL, NULL, dev->annotations_callback, dev);
 							}
 							PDFPresentationData ef;
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+							Object trans = pdfDoc->getPage(pp)->getTrans();
+							Object *transi = &trans;
+#else
 							Object trans;
 							Object *transi = pdfDoc->getPage(pp)->getTrans(&trans);
+#endif
 							if (transi->isDict())
 							{
 								m_Doc->pdfOptions().PresentMode = true;
@@ -793,32 +847,51 @@
 								delete pgTrans;
 							}
 							m_Doc->currentPage()->PresentVals = ef;
+#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 58, 0)
 							trans.free();
 							transi->free();
+#endif
 						}
 						int numjs = pdfDoc->getCatalog()->numJS();
 						if (numjs > 0)
 						{
 							NameTree *jsNameTreeP = new NameTree();
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+							Object catDict = pdfDoc->getXRef()->getCatalog();
+#else
 							Object catDict;
 							pdfDoc->getXRef()->getCatalog(&catDict);
+#endif
 							if (catDict.isDict())
 							{
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+								Object names = catDict.dictLookup("Names");
+#else
 								Object names;
 								catDict.dictLookup("Names", &names);
+#endif
 								if (names.isDict())
 								{
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+									Object obj = names.dictLookup("JavaScript");
+									jsNameTreeP->init(pdfDoc->getXRef(), &obj);
+#else
 									Object obj;
 									names.dictLookup("JavaScript", &obj);
 									jsNameTreeP->init(pdfDoc->getXRef(), &obj);
 									obj.free();
+#endif
 								}
 								for (int a = 0; a < numjs; a++)
 								{
 									m_Doc->JavaScripts.insert(UnicodeParsedString(jsNameTreeP->getName(a)), UnicodeParsedString(pdfDoc->getCatalog()->getJS(a)));
 								}
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+								names = catDict.dictLookup("OpenAction");
+#else
 								names.free();
 								catDict.dictLookup("OpenAction", &names);
+#endif
 								if (names.isDict())
 								{
 									LinkAction *linkAction = NULL;
@@ -839,9 +912,13 @@
 										}
 									}
 								}
+#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 58, 0)
 								names.free();
-							}
+#endif
+							}
+#if POPPLER_ENCODED_VERSION < POPPLER_VERSION_ENCODE(0, 58, 0)
 							catDict.free();
+#endif
 							delete jsNameTreeP;
 						}
 						m_Doc->pdfOptions().Version = (PDFOptions::PDFVersion)qMin(15, qMax(13, pdfDoc->getPDFMajorVersion() * 10 + pdfDoc->getPDFMinorVersion()));

Modified: trunk/Scribus/scribus/plugins/import/pdf/slaoutput.cpp
URL: http://scribus.net/websvn/diff.php?repname=Scribus&rev=22154&path=/trunk/Scribus/scribus/plugins/import/pdf/slaoutput.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/import/pdf/slaoutput.cpp	(original)
+++ trunk/Scribus/scribus/plugins/import/pdf/slaoutput.cpp	Fri Sep  8 16:52:10 2017
@@ -6,6 +6,7 @@
 */
 
 #include "slaoutput.h"
+#include <poppler/cpp/poppler-version.h>
 #include <poppler/GlobalParams.h>
 #include <poppler/poppler-config.h>
 #include <poppler/FileSpec.h>
@@ -19,11 +20,49 @@
 #include "util_math.h"
 #include <tiffio.h>
 
+#define POPPLER_VERSION_ENCODE(major, minor, micro) (	\
+	  ((major) * 10000)				\
+	+ ((minor) *   100)				\
+	+ ((micro) *     1))
+#define POPPLER_ENCODED_VERSION POPPLER_VERSION_ENCODE(POPPLER_VERSION_MAJOR, POPPLER_VERSION_MINOR, POPPLER_VERSION_MICRO)
+
 LinkSubmitForm::LinkSubmitForm(Object *actionObj)
 {
 	Object obj1, obj2, obj3;
 	fileName = NULL;
 	m_flags = 0;
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+	if (actionObj->isDict())
+	{
+		obj1 = actionObj->dictLookup("F");
+		if (!obj1.isNull())
+		{
+			if (obj1.isDict())
+			{
+				obj3 = obj1.dictLookup("FS");
+				if (!obj3.isNull())
+				{
+					if (obj3.isName())
+					{
+						char *name = obj3.getName();
+						if (!strcmp(name, "URL"))
+						{
+							obj2 = obj1.dictLookup("F");
+							if (!obj2.isNull())
+								fileName = obj2.getString()->copy();
+						}
+					}
+				}
+			}
+		}
+		obj1 = actionObj->dictLookup("Flags");
+		if (!obj1.isNull())
+		{
+			if (obj1.isNum())
+				m_flags = obj1.getInt();
+		}
+	}
+#else
 	if (actionObj->isDict())
 	{
 		if (!actionObj->dictLookup("F", &obj1)->isNull())
@@ -54,6 +93,7 @@
 		}
 		obj1.free();
 	}
+#endif
 }
 
 LinkSubmitForm::~LinkSubmitForm()
@@ -66,11 +106,25 @@
 {
 	Object obj1, obj3;
 	fileName = NULL;
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
 	if (actionObj->isDict())
 	{
+		obj1 = actionObj->dictLookup("F");
+		if (!obj1.isNull())
+		{
+			obj3 = getFileSpecNameForPlatform(&obj1);
+			if (!obj3.isNull())
+			{
+				fileName = obj3.getString()->copy();
+			}
+		}
+	}
+#else
+	if (actionObj->isDict())
+	{
 		if (!actionObj->dictLookup("F", &obj1)->isNull())
 		{
-			if (getFileSpecNameForPlatform (&obj1, &obj3))
+			if (getFileSpecNameForPlatform(&obj1, &obj3))
 			{
 				fileName = obj3.getString()->copy();
 				obj3.free();
@@ -78,6 +132,7 @@
 		}
 		obj1.free();
 	}
+#endif
 }
 
 LinkImportData::~LinkImportData()
@@ -256,6 +311,27 @@
 	Object obj;
 	Ref refa = ano->getRef();
 	Object additionalActions;
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+	obj = xref->fetch(refa.num, refa.gen);
+	if (obj.isDict())
+	{
+		Dict* adic = obj.getDict();
+		additionalActions = adic->lookupNF("A");
+		Object additionalActionsObject = additionalActions.fetch(pdfDoc->getXRef());
+		if (additionalActionsObject.isDict())
+		{
+			Object actionObject = additionalActionsObject.dictLookup("S");
+			if (actionObject.isName("ImportData"))
+			{
+				linkAction = new LinkImportData(&additionalActionsObject);
+			}
+			else if (actionObject.isName("SubmitForm"))
+			{
+				linkAction = new LinkSubmitForm(&additionalActionsObject);
+			}
+		}
+	}
+#else
 	Object *act = xref->fetch(refa.num, refa.gen, &obj);
 	if (act)
 	{
@@ -283,6 +359,7 @@
 		}
 	}
 	obj.free();
+#endif
 	return linkAction;
 }
 
@@ -293,6 +370,22 @@
 	Object obj;
 	Ref refa = ano->getRef();
 	Object additionalActions;
+
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+	obj = xref->fetch(refa.num, refa.gen);
+	if (obj.isDict())
+	{
+		Dict* adic = obj.getDict();
+		additionalActions = adic->lookupNF("AA");
+		Object additionalActionsObject = additionalActions.fetch(pdfDoc->getXRef());
+		if (additionalActionsObject.isDict())
+		{
+			Object actionObject = additionalActionsObject.dictLookup(key);
+			if (actionObject.isDict())
+				linkAction = LinkAction::parseAction(&actionObject, pdfDoc->getCatalog()->getBaseURI());
+		}
+	}
+#else
 	Object *act = xref->fetch(refa.num, refa.gen, &obj);
 	if (act)
 	{
@@ -313,6 +406,7 @@
 		}
 	}
 	obj.free();
+#endif
 	return linkAction;
 }
 
@@ -838,6 +932,33 @@
 	{
 		Object obj1;
 		Ref refa = annota->getRef();
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+		obj1 = xref->fetch(refa.num, refa.gen);
+		if (obj1.isDict())
+		{
+			Dict* dict = obj1.getDict();
+			Object obj2 = dict->lookup("Kids");
+			//childs
+			if (obj2.isArray())
+			{
+				// Load children
+				QList<int> radList;
+				for (int i = 0; i < obj2.arrayGetLength(); i++)
+				{
+					Object childRef = obj2.arrayGetNF(i);
+					if (!childRef.isRef())
+						continue;
+					Object childObj = obj2.arrayGet(i);
+					if (!childObj.isDict())
+						continue;
+					const Ref ref = childRef.getRef();
+					radList.append(ref.num);
+				}
+				QString tmTxt = UnicodeParsedString(annota->getName());
+				m_radioMap.insert(tmTxt, radList);
+			}
+		}
+#else
 		Object *act = xref->fetch(refa.num, refa.gen, &obj1);
 		if (act && act->isDict())
 		{
@@ -873,6 +994,7 @@
 			obj2.free();
 		}
 		obj1.free();
+#endif
 	}
 	return retVal;
 }
@@ -3007,6 +3129,23 @@
 		}
 		else
 		{
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+			dictObj = dictRef->fetch(xref);
+			if (!dictObj.isDict())
+				return;
+			dict = dictObj.getDict();
+			dictType = dict->lookup("Type");
+			if (dictType.isName("OCG"))
+			{
+				oc = contentConfig->findOcgByRef(dictRef->getRef());
+				if (oc)
+				{
+					//					qDebug() << "Begin OCG Content with Name " << UnicodeParsedString(oc->getName());
+					m_doc->setActiveLayer(UnicodeParsedString(oc->getName()));
+					mSte.ocgName = UnicodeParsedString(oc->getName());
+				}
+			}
+#else
 			dictRef->fetch(xref, &dictObj);
 			if (!dictObj.isDict())
 			{
@@ -3027,6 +3166,7 @@
 			}
 			dictType.free();
 			dictObj.free();
+#endif
 		}
 	}
 	m_mcStack.push(mSte);
@@ -3046,14 +3186,20 @@
 		{
 			if (layersSetByOCG)
 				return;
+			QString lName = QString("Layer_%1").arg(layerNum + 1);
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+			Object obj = properties->lookup((char*) "Title");
+			if (obj.isString())
+				lName = QString(obj.getString()->getCString());
+#else
 			Object obj;
-			QString lName = QString("Layer_%1").arg(layerNum + 1);
 			if (properties->lookup((char*)"Title", &obj))
 			{
 				if (obj.isString())
 					lName =  QString(obj.getString()->getCString());
 				obj.free();
 			}
+#endif
 			for (ScLayers::iterator it = m_doc->Layers.begin(); it != m_doc->Layers.end(); ++it)
 			{
 				if (it->Name == lName)
@@ -3066,6 +3212,29 @@
 			if (!firstLayer)
 				currentLayer = m_doc->addLayer(lName, true);
 			firstLayer = false;
+#if POPPLER_ENCODED_VERSION >= POPPLER_VERSION_ENCODE(0, 58, 0)
+			obj = properties->lookup((char*) "Visible");
+			if (obj.isBool())
+				m_doc->setLayerVisible(currentLayer, obj.getBool());
+			obj = properties->lookup((char*) "Editable");
+			if (obj.isBool())
+				m_doc->setLayerLocked(currentLayer, !obj.getBool());
+			obj = properties->lookup((char*) "Printed");
+			if (obj.isBool())
+				m_doc->setLayerPrintable(currentLayer, obj.getBool());
+			obj = properties->lookup((char*)"Color");
+			if (obj.isArray())
+			{
+				Object obj1;
+				obj1 = obj.arrayGet(0);
+				int r = obj1.getNum() / 256;
+				obj1 = obj.arrayGet(1);
+				int g = obj1.getNum() / 256;
+				obj1 = obj.arrayGet(2);
+				int b = obj1.getNum() / 256;
+				m_doc->setLayerMarker(currentLayer, QColor(r, g, b));
+			}
+#else
 			if (properties->lookup((char*)"Visible", &obj))
 			{
 				if (obj.isBool())
@@ -3102,6 +3271,7 @@
 				}
 				obj.free();
 			}
+#endif
 		}
 	}
 }




More information about the scribus-commit mailing list