David Tardon dc01ed
=== modified file 'filter/pdf.cxx'
David Tardon dc01ed
--- filter/pdf.cxx	2017-08-15 18:32:47 +0000
David Tardon dc01ed
+++ filter/pdf.cxx	2017-09-07 16:02:01 +0000
David Tardon dc01ed
@@ -129,64 +129,125 @@
David Tardon dc01ed
     Object array;
David Tardon dc01ed
     Ref r;
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    pageobj = xref->fetch(pageref->num, pageref->gen);
David Tardon dc01ed
+#else
David Tardon dc01ed
     xref->fetch(pageref->num, pageref->gen, &pageobj);
David Tardon dc01ed
-    if (!pageobj.isDict() || !pageobj.dictLookupNF("Contents", &contents)) {
David Tardon dc01ed
+#endif
David Tardon dc01ed
+    if (!pageobj.isDict() ||
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        (contents = pageobj.dictLookupNF("Contents")).isNull()
David Tardon dc01ed
+#else
David Tardon dc01ed
+        !pageobj.dictLookupNF("Contents", &contents)
David Tardon dc01ed
+#endif
David Tardon dc01ed
+    ) {
David Tardon dc01ed
         fprintf(stderr, "Error: malformed pdf\n");
David Tardon dc01ed
         return;
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
-    if (contents.isRef())
David Tardon dc01ed
+    if (contents.isRef()) {
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        contents = xref->fetch(contents.getRefNum(), contents.getRefGen());
David Tardon dc01ed
+#else
David Tardon dc01ed
         xref->fetch(contents.getRefNum(), contents.getRefGen(), &contents);
David Tardon dc01ed
+#endif
David Tardon dc01ed
+    }
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    (void) lenobj;
David Tardon dc01ed
+    dict = Object(new Dict(xref));
David Tardon dc01ed
+    dict.dictSet("Length", Object(static_cast<int>(len)));
David Tardon dc01ed
+    stream = Object(static_cast<Stream *>(new MemStream(buf, 0, len, std::move(dict))));
David Tardon dc01ed
+#else
David Tardon dc01ed
     lenobj.initInt(len);
David Tardon dc01ed
     dict.initDict(xref);
David Tardon dc01ed
     dict.dictSet("Length", &lenobj);
David Tardon dc01ed
     stream.initStream(new MemStream(buf, 0, len, &dict));
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     r = xref->addIndirectObject(&stream);
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    streamrefobj = Object(r.num, r.gen);
David Tardon dc01ed
+#else
David Tardon dc01ed
     streamrefobj.initRef(r.num, r.gen);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    array = Object(new Array(xref));
David Tardon dc01ed
+    array.arrayAdd(std::move(streamrefobj));
David Tardon dc01ed
+#else
David Tardon dc01ed
     array.initArray(xref);
David Tardon dc01ed
     array.arrayAdd(&streamrefobj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     if (contents.isStream()) {
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        contents = pageobj.dictLookupNF("Contents"); // streams must be indirect, i.e. not fetch()-ed
David Tardon dc01ed
+        array.arrayAdd(std::move(contents));
David Tardon dc01ed
+#else
David Tardon dc01ed
         pageobj.dictLookupNF("Contents", &contents); // streams must be indirect, i.e. not fetch()-ed
David Tardon dc01ed
         array.arrayAdd(&contents);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     }
David Tardon dc01ed
     else if (contents.isArray()) {
David Tardon dc01ed
         int i, len = contents.arrayGetLength();
David Tardon dc01ed
         Object obj;
David Tardon dc01ed
         for (i = 0; i < len; i++) {
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+            obj = contents.arrayGetNF(i);
David Tardon dc01ed
+            array.arrayAdd(std::move(obj));
David Tardon dc01ed
+#else
David Tardon dc01ed
             contents.arrayGetNF(i, &obj);
David Tardon dc01ed
             array.arrayAdd(&obj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
         }
David Tardon dc01ed
     }
David Tardon dc01ed
     else
David Tardon dc01ed
         fprintf(stderr, "Error: malformed pdf\n");
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    pageobj.dictSet("Contents", std::move(array));
David Tardon dc01ed
+#else
David Tardon dc01ed
     pageobj.dictSet("Contents", &array);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     xref->setModifiedObject(&pageobj, *pageref);
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR <= 0 && POPPLER_VERSION_MINOR < 58
David Tardon dc01ed
     pageobj.free();
David Tardon dc01ed
-}
David Tardon dc01ed
-
David Tardon dc01ed
-
David Tardon dc01ed
+#endif
David Tardon dc01ed
+}
David Tardon dc01ed
+
David Tardon dc01ed
+
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+static Object name_object(const char *s)
David Tardon dc01ed
+{
David Tardon dc01ed
+    return Object(new GooString(s));
David Tardon dc01ed
+}
David Tardon dc01ed
+#else
David Tardon dc01ed
 static Object * name_object(const char *s)
David Tardon dc01ed
 {
David Tardon dc01ed
     Object *o = new Object();
David Tardon dc01ed
     o->initName((char *)s);
David Tardon dc01ed
     return o;
David Tardon dc01ed
 }
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
 /*
David Tardon dc01ed
  * Create new PDF integer type object.
David Tardon dc01ed
  */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+static Object int_object(int i)
David Tardon dc01ed
+{
David Tardon dc01ed
+    return Object(i);
David Tardon dc01ed
+}
David Tardon dc01ed
+#else
David Tardon dc01ed
 static Object * int_object(int i)
David Tardon dc01ed
 {
David Tardon dc01ed
     Object *o = new Object();
David Tardon dc01ed
     o->initInt(i);
David Tardon dc01ed
     return o;
David Tardon dc01ed
 }
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
 static Object * get_resource_dict(XRef *xref,
David Tardon dc01ed
                                   Dict *pagedict,
David Tardon dc01ed
@@ -196,21 +257,36 @@
David Tardon dc01ed
     Object res;
David Tardon dc01ed
 
David Tardon dc01ed
     /* TODO resource dict can also be inherited */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    res = pagedict->lookupNF("Resources");
David Tardon dc01ed
+    if (res.isNull())
David Tardon dc01ed
+#else
David Tardon dc01ed
     if (!pagedict->lookupNF("Resources", &res))
David Tardon dc01ed
+#endif
David Tardon dc01ed
         return NULL;
David Tardon dc01ed
 
David Tardon dc01ed
     if (res.isRef()) {
David Tardon dc01ed
         *resref = res.getRef();
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        *resdict = xref->fetch(resref->num, resref->gen);
David Tardon dc01ed
+#else
David Tardon dc01ed
         xref->fetch(resref->num, resref->gen, resdict);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     }
David Tardon dc01ed
     else if (res.isDict()) {
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        *resdict = res.copy();
David Tardon dc01ed
+#else
David Tardon dc01ed
         res.copy(resdict);
David Tardon dc01ed
+#endif
David Tardon dc01ed
         resref->num = 0;
David Tardon dc01ed
     }
David Tardon dc01ed
     else
David Tardon dc01ed
         resdict = NULL;
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR <= 0 && POPPLER_VERSION_MINOR < 58
David Tardon dc01ed
     res.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
     return resdict;
David Tardon dc01ed
 }
David Tardon dc01ed
 
David Tardon dc01ed
@@ -226,7 +302,11 @@
David Tardon dc01ed
     Object resdict;
David Tardon dc01ed
     Ref resref;
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    pageobj = xref->fetch(pageref->num, pageref->gen);
David Tardon dc01ed
+#else
David Tardon dc01ed
     xref->fetch(pageref->num, pageref->gen, &pageobj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     if (!pageobj.isDict()) {
David Tardon dc01ed
         fprintf(stderr, "Error: malformed pdf\n");
David Tardon dc01ed
         return;
David Tardon dc01ed
@@ -234,21 +314,35 @@
David Tardon dc01ed
 
David Tardon dc01ed
     if (!get_resource_dict(xref, pageobj.getDict(), &resdict, &resref)) {
David Tardon dc01ed
         fprintf(stderr, "Error: malformed pdf\n");
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR <= 0 && POPPLER_VERSION_MINOR < 58
David Tardon dc01ed
         pageobj.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
         return;
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    font = Object(new Dict(xref));
David Tardon dc01ed
+#else
David Tardon dc01ed
     font.initDict(xref);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     font.dictSet("Type", name_object("Font"));
David Tardon dc01ed
     font.dictSet("Subtype", name_object("Type1"));
David Tardon dc01ed
     font.dictSet("BaseFont", name_object(name));
David Tardon dc01ed
     xref->addIndirectObject(&font);
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    fonts = resdict.dictLookupNF("Font");
David Tardon dc01ed
+#else
David Tardon dc01ed
     resdict.dictLookupNF("Font", &fonts);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     if (fonts.isNull()) {
David Tardon dc01ed
         /* Create new font dic obj in page's resources */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        resdict.dictSet("Font", Object(new Dict(xref)));
David Tardon dc01ed
+#else
David Tardon dc01ed
         fonts.initDict(xref);
David Tardon dc01ed
         resdict.dictSet("Font", &fonts);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
     Object *fonts_dic;
David Tardon dc01ed
@@ -259,7 +353,11 @@
David Tardon dc01ed
         fonts_dic = &fonts;
David Tardon dc01ed
     } else if ( fonts.isRef() ) {
David Tardon dc01ed
         /* "Font" resource is indirect reference object */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        dereferenced_obj = xref->fetch(fonts.getRefNum(), fonts.getRefGen());
David Tardon dc01ed
+#else
David Tardon dc01ed
         xref->fetch(fonts.getRefNum(), fonts.getRefGen(), &dereferenced_obj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
         fonts_dic = &dereferenced_obj;
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
@@ -269,7 +367,11 @@
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
     /* Add new entry to "Font" resource */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    fonts_dic->dictSet("bannertopdf-font", std::move(font));
David Tardon dc01ed
+#else
David Tardon dc01ed
     fonts_dic->dictSet("bannertopdf-font", &font);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     /* Notify poppler about changes */
David Tardon dc01ed
     if ( fonts.isRef() ) {
David Tardon dc01ed
@@ -281,7 +383,9 @@
David Tardon dc01ed
     else
David Tardon dc01ed
         xref->setModifiedObject(&resdict, resref);
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR <= 0 && POPPLER_VERSION_MINOR < 58
David Tardon dc01ed
     pageobj.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
 }
David Tardon dc01ed
 
David Tardon dc01ed
 
David Tardon dc01ed
@@ -293,23 +397,38 @@
David Tardon dc01ed
     Array *array;
David Tardon dc01ed
     int i;
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    o = dict->dictLookup(key);
David Tardon dc01ed
+    if (o.isNull())
David Tardon dc01ed
+#else
David Tardon dc01ed
     if (!dict->dictLookup(key, &o))
David Tardon dc01ed
+#endif
David Tardon dc01ed
         return false;
David Tardon dc01ed
 
David Tardon dc01ed
     if (!o.isArray()) {
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR <= 0 && POPPLER_VERSION_MINOR < 58
David Tardon dc01ed
         o.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
         return false;
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
     array = o.getArray();
David Tardon dc01ed
     for (i = 0; i < 4; i++) {
David Tardon dc01ed
         Object el;
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        el = array->get(i);
David Tardon dc01ed
+        if (el.isNum())
David Tardon dc01ed
+            rect[i] = el.getNum();
David Tardon dc01ed
+#else
David Tardon dc01ed
         if (array->get(i, &el) && el.isNum())
David Tardon dc01ed
             rect[i] = el.getNum();
David Tardon dc01ed
         el.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR <= 0 && POPPLER_VERSION_MINOR < 58
David Tardon dc01ed
     o.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
     return i == 4;
David Tardon dc01ed
 }
David Tardon dc01ed
 
David Tardon dc01ed
@@ -322,6 +441,15 @@
David Tardon dc01ed
     Object array;
David Tardon dc01ed
     int i;
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    array = Object(new Array(xref));
David Tardon dc01ed
+
David Tardon dc01ed
+    for (i = 0; i < 4; i++) {
David Tardon dc01ed
+        array.arrayAdd(Object(static_cast<double>(rect[i])));
David Tardon dc01ed
+    }
David Tardon dc01ed
+
David Tardon dc01ed
+    dict->dictSet(key, std::move(array));
David Tardon dc01ed
+#else
David Tardon dc01ed
     array.initArray(xref);
David Tardon dc01ed
 
David Tardon dc01ed
     for (i = 0; i < 4; i++) {
David Tardon dc01ed
@@ -331,6 +459,7 @@
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
     dict->dictSet(key, &array);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 }
David Tardon dc01ed
 
David Tardon dc01ed
 
David Tardon dc01ed
@@ -361,7 +490,11 @@
David Tardon dc01ed
     float mediabox[4] = { 0.0, 0.0, width, length };
David Tardon dc01ed
     float old_mediabox[4];
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    pageobj = xref->fetch(pageref->num, pageref->gen);
David Tardon dc01ed
+#else
David Tardon dc01ed
     xref->fetch(pageref->num, pageref->gen, &pageobj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     if (!pageobj.isDict()) {
David Tardon dc01ed
         fprintf(stderr, "Error: malformed pdf\n");
David Tardon dc01ed
         return;
David Tardon dc01ed
@@ -381,7 +514,9 @@
David Tardon dc01ed
     dict_set_rect (xref, &pageobj, "BleedBox", mediabox);
David Tardon dc01ed
 
David Tardon dc01ed
     xref->setModifiedObject(&pageobj, *pageref);
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR <= 0 && POPPLER_VERSION_MINOR < 58
David Tardon dc01ed
     pageobj.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
 }
David Tardon dc01ed
 
David Tardon dc01ed
 
David Tardon dc01ed
@@ -394,21 +529,34 @@
David Tardon dc01ed
     Object page, parentref, parent, kids, ref, countobj;
David Tardon dc01ed
     int i;
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    page = xref->fetch(pageref->num, pageref->gen);
David Tardon dc01ed
+#else
David Tardon dc01ed
     xref->fetch(pageref->num, pageref->gen, &page);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     if (!page.isDict("Page")) {
David Tardon dc01ed
         fprintf(stderr, "Error: malformed pdf (invalid Page object)\n");
David Tardon dc01ed
         return;
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    parentref = page.dictLookupNF("Parent");
David Tardon dc01ed
+    parent = parentref.fetch(xref);
David Tardon dc01ed
+#else
David Tardon dc01ed
     page.dictLookupNF("Parent", &parentref);
David Tardon dc01ed
     parentref.fetch(xref, &parent);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     if (!parent.isDict("Pages")) {
David Tardon dc01ed
         fprintf(stderr, "Error: malformed pdf (Page.Parent must point to a "
David Tardon dc01ed
                         "Pages object)\n");
David Tardon dc01ed
         return;
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    kids = parent.dictLookup("Kids");
David Tardon dc01ed
+#else
David Tardon dc01ed
     parent.dictLookup("Kids", &kids);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     if (!kids.isArray()) {
David Tardon dc01ed
         fprintf(stderr, "Error: malformed pdf (Pages.Kids must be an array)\n");
David Tardon dc01ed
         return;
David Tardon dc01ed
@@ -420,14 +568,22 @@
David Tardon dc01ed
     // the pages tree (not supported by major pdf implementations).
David Tardon dc01ed
     for (i = 1; i < count; i++) {
David Tardon dc01ed
         Ref r = xref->addIndirectObject(&page);
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        kids.arrayAdd(Object(r.num, r.gen));
David Tardon dc01ed
+#else
David Tardon dc01ed
         ref.initRef(r.num, r.gen);
David Tardon dc01ed
         kids.arrayAdd(&ref;;
David Tardon dc01ed
         ref.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    parent.dictSet("Count", Object(count));
David Tardon dc01ed
+#else
David Tardon dc01ed
     countobj.initInt(count);
David Tardon dc01ed
     parent.dictSet("Count", &countobj);
David Tardon dc01ed
     countobj.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     xref->setModifiedObject(&parent, parentref.getRef());
David Tardon dc01ed
 }
David Tardon dc01ed
@@ -523,7 +679,11 @@
David Tardon dc01ed
     }
David Tardon dc01ed
     Object pageobj;
David Tardon dc01ed
     Ref pageref = page->getRef();
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    pageobj = xref->fetch(pageref.num, pageref.gen);
David Tardon dc01ed
+#else
David Tardon dc01ed
     xref->fetch(pageref.num, pageref.gen, &pageobj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     const char *font_size = lookup_opt(opt, "banner-font-size");
David Tardon dc01ed
     if ( ! font_size ) {
David Tardon dc01ed
@@ -614,8 +774,12 @@
David Tardon dc01ed
 
David Tardon dc01ed
         /* Modify field's appearance */
David Tardon dc01ed
         Object appearance_obj;
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        field_obj->getDict()->set("DA", Object(appearance));
David Tardon dc01ed
+#else
David Tardon dc01ed
         appearance_obj.initString(appearance);
David Tardon dc01ed
         field_obj->getDict()->set("DA", &appearance_obj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
         /*
David Tardon dc01ed
          * Create /AP - entry stuff.
David Tardon dc01ed
@@ -653,7 +817,11 @@
David Tardon dc01ed
         appearance_stream->append("EMC\n");
David Tardon dc01ed
 
David Tardon dc01ed
         Object appearance_stream_dic;
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        appearance_stream_dic = Object(new Dict(xref));
David Tardon dc01ed
+#else
David Tardon dc01ed
         appearance_stream_dic.initDict(xref);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
         /*
David Tardon dc01ed
          * Appearance stream dic.
David Tardon dc01ed
@@ -663,12 +831,46 @@
David Tardon dc01ed
         appearance_stream_dic.dictSet("Type", name_object("XObject"));
David Tardon dc01ed
         appearance_stream_dic.dictSet("Subtype", name_object("Form"));
David Tardon dc01ed
         appearance_stream_dic.dictSet("FormType", int_object(1));
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        appearance_stream_dic.dictSet("Resources", Object(resref.num, resref.gen));
David Tardon dc01ed
+#else
David Tardon dc01ed
         Object obj_ref_x;
David Tardon dc01ed
         obj_ref_x.initRef(resref.num, resref.gen);
David Tardon dc01ed
         appearance_stream_dic.dictSet("Resources", &obj_ref_x);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
         /* BBox array: TODO. currently out of the head. */
David Tardon dc01ed
         Object array;
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        array = Object(new Array(xref));
David Tardon dc01ed
+        array.arrayAdd(Object(0.0));
David Tardon dc01ed
+        array.arrayAdd(Object(0.0));
David Tardon dc01ed
+        array.arrayAdd(Object(237.0));
David Tardon dc01ed
+        array.arrayAdd(Object(25.0));
David Tardon dc01ed
+
David Tardon dc01ed
+        appearance_stream_dic.dictSet("BBox", std::move(array));
David Tardon dc01ed
+        appearance_stream_dic.dictSet("Length", Object(appearance_stream->getLength()));
David Tardon dc01ed
+
David Tardon dc01ed
+        MemStream *mem_stream = new MemStream(appearance_stream->getCString(),
David Tardon dc01ed
+                0, appearance_stream->getLength(), std::move(appearance_stream_dic));
David Tardon dc01ed
+
David Tardon dc01ed
+        /* Make obj stream */
David Tardon dc01ed
+        Object stream = Object(static_cast<Stream *>(mem_stream));
David Tardon dc01ed
+
David Tardon dc01ed
+        Ref r = xref->addIndirectObject(&stream);
David Tardon dc01ed
+
David Tardon dc01ed
+        /* Update Xref table */
David Tardon dc01ed
+        Object obj_ref = Object(r.num, r.gen);
David Tardon dc01ed
+
David Tardon dc01ed
+        /*
David Tardon dc01ed
+         * Fill Annotation's appearance streams dic /AP
David Tardon dc01ed
+         * See: 8.4.4 Appearance Streams
David Tardon dc01ed
+         */
David Tardon dc01ed
+        Object appearance_streams_dic = Object(new Dict(xref));
David Tardon dc01ed
+        appearance_streams_dic.dictSet("N", std::move(obj_ref));
David Tardon dc01ed
+
David Tardon dc01ed
+        field_obj->getDict()->set("AP", std::move(appearance_streams_dic));
David Tardon dc01ed
+#else
David Tardon dc01ed
         array.initArray(xref);
David Tardon dc01ed
         Object el;
David Tardon dc01ed
         el.initReal(0);
David Tardon dc01ed
@@ -705,6 +907,7 @@
David Tardon dc01ed
         appearance_streams_dic.dictSet("N", &obj_ref);
David Tardon dc01ed
 
David Tardon dc01ed
         field_obj->getDict()->set("AP", &appearance_streams_dic);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
         /* Notify poppler about changes */
David Tardon dc01ed
         xref->setModifiedObject(field_obj, field_ref);
David Tardon dc01ed
@@ -721,24 +924,38 @@
David Tardon dc01ed
      * OpenOffice - by default sets it to 'true'.
David Tardon dc01ed
      */
David Tardon dc01ed
     Object *obj_form = catalog->getAcroForm();
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    obj_form->dictSet("NeedAppearances", Object(gFalse));
David Tardon dc01ed
+#else
David Tardon dc01ed
     Object obj1;
David Tardon dc01ed
     obj1.initBool(gFalse);
David Tardon dc01ed
     obj_form->dictSet("NeedAppearances", &obj1);
David Tardon dc01ed
+#endif
David Tardon dc01ed
+
David Tardon dc01ed
     /* Add AccroForm as indirect obj */
David Tardon dc01ed
     Ref ref_form = xref->addIndirectObject(obj_form);
David Tardon dc01ed
 
David Tardon dc01ed
     /*
David Tardon dc01ed
      * So update Catalog object.
David Tardon dc01ed
      */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    Object catObj = xref->getCatalog();
David Tardon dc01ed
+#else
David Tardon dc01ed
     Object* catObj = new Object();
David Tardon dc01ed
     catObj = xref->getCatalog(catObj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     Ref catRef;
David Tardon dc01ed
     catRef.gen = xref->getRootGen();
David Tardon dc01ed
     catRef.num = xref->getRootNum();
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    catObj.dictSet("AcroForm", Object(ref_form.num, ref_form.gen));
David Tardon dc01ed
+    xref->setModifiedObject(&catObj, catRef);
David Tardon dc01ed
+#else
David Tardon dc01ed
     Object obj2;
David Tardon dc01ed
     obj2.initRef(ref_form.num, ref_form.gen);
David Tardon dc01ed
     catObj->dictSet("AcroForm", &obj2);
David Tardon dc01ed
     xref->setModifiedObject(catObj, catRef);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     /* Success */
David Tardon dc01ed
     return 1;
David Tardon dc01ed
@@ -780,7 +997,11 @@
David Tardon dc01ed
 
David Tardon dc01ed
     /* Font dictionary object for embeded font */
David Tardon dc01ed
     Object f_dic;
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    f_dic = Object(new Dict(xref));
David Tardon dc01ed
+#else
David Tardon dc01ed
     f_dic.initDict(xref);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     f_dic.dictSet("Type", name_object("Font"));
David Tardon dc01ed
 
David Tardon dc01ed
     /* Stream lenght */
David Tardon dc01ed
@@ -798,12 +1019,18 @@
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
     /* Create memory stream font. Add it to font dic. */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    MemStream *mem_stream = new MemStream(font_stream->getCString(),
David Tardon dc01ed
+            0, outlen, std::move(f_dic));
David Tardon dc01ed
+    Object stream = Object(static_cast<Stream *>(mem_stream));
David Tardon dc01ed
+#else
David Tardon dc01ed
     MemStream *mem_stream = new MemStream(font_stream->getCString(),
David Tardon dc01ed
             0, outlen, &f_dic);
David Tardon dc01ed
 
David Tardon dc01ed
     /* Make obj stream */
David Tardon dc01ed
     Object stream;
David Tardon dc01ed
     stream.initStream(mem_stream);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     Ref r;
David Tardon dc01ed
 
David Tardon dc01ed
@@ -813,7 +1040,11 @@
David Tardon dc01ed
     /* Get page object */
David Tardon dc01ed
     Object pageobj;
David Tardon dc01ed
     Ref pageref = page->getRef();
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    pageobj = xref->fetch(pageref.num, pageref.gen);
David Tardon dc01ed
+#else
David Tardon dc01ed
     xref->fetch(pageref.num, pageref.gen, &pageobj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     if (!pageobj.isDict()) {
David Tardon dc01ed
         fprintf(stderr, "Error: malformed pdf.\n");
David Tardon dc01ed
         return 0;
David Tardon dc01ed
@@ -825,18 +1056,29 @@
David Tardon dc01ed
     Object *ret = get_resource_dict(xref, pageobj.getDict(), &resdict, &resref);
David Tardon dc01ed
     if ( !ret ) {
David Tardon dc01ed
         fprintf(stderr, "Error: malformed pdf\n");
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR <= 0 && POPPLER_VERSION_MINOR < 58
David Tardon dc01ed
         pageobj.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
         return 0;
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
     /* Dictionary for all fonts in page's resources */
David Tardon dc01ed
     Object fonts;
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    fonts = resdict.dictLookupNF("Font");
David Tardon dc01ed
+#else
David Tardon dc01ed
     resdict.dictLookupNF("Font", &fonts);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     if (fonts.isNull()) {
David Tardon dc01ed
         /* Create new one, if doesn't exists */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        resdict.dictSet("Font", Object(new Dict(xref)));
David Tardon dc01ed
+        fonts = resdict.dictLookupNF("Font");
David Tardon dc01ed
+#else
David Tardon dc01ed
         fonts.initDict(xref);
David Tardon dc01ed
         resdict.dictSet("Font", &fonts);
David Tardon dc01ed
+#endif
David Tardon dc01ed
         fprintf(stderr, "Create new font dict in page's resources.\n");
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
@@ -866,7 +1108,11 @@
David Tardon dc01ed
 
David Tardon dc01ed
     /* r - cid resource dic */
David Tardon dc01ed
     Object font_res_obj_ref;
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    font_res_obj_ref = Object(r.num, r.gen);
David Tardon dc01ed
+#else
David Tardon dc01ed
     font_res_obj_ref.initRef(r.num, r.gen);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     Object *fonts_dic;
David Tardon dc01ed
     Object dereferenced_obj;
David Tardon dc01ed
@@ -876,7 +1122,11 @@
David Tardon dc01ed
         fonts_dic = &fonts;
David Tardon dc01ed
     } else if ( fonts.isRef() ) {
David Tardon dc01ed
         /* "Font" resource is indirect reference object */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        dereferenced_obj = xref->fetch(fonts.getRefNum(), fonts.getRefGen());
David Tardon dc01ed
+#else
David Tardon dc01ed
         xref->fetch(fonts.getRefNum(), fonts.getRefGen(), &dereferenced_obj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
         fonts_dic = &dereferenced_obj;
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
@@ -886,7 +1136,11 @@
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
     /* Add to fonts dic new font */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    fonts_dic->dictSet("stanv_font", std::move(font_res_obj_ref));
David Tardon dc01ed
+#else
David Tardon dc01ed
     fonts_dic->dictSet("stanv_font", &font_res_obj_ref);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     /* Notify poppler about changes in fonts dic */
David Tardon dc01ed
     if ( fonts.isRef() ) {
David Tardon dc01ed
@@ -897,7 +1151,9 @@
David Tardon dc01ed
     xref->setModifiedObject(&resdict, resref);
David Tardon dc01ed
     fprintf(stderr, "Resource dict was changed.\n");
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR <= 0 && POPPLER_VERSION_MINOR < 58
David Tardon dc01ed
     pageobj.free();
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     /* Success */
David Tardon dc01ed
     return 1;
David Tardon dc01ed
@@ -1104,8 +1360,12 @@
David Tardon dc01ed
     XRef *xref = doc->getXRef();
David Tardon dc01ed
 
David Tardon dc01ed
     /* Font dictionary for embeded font */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    Object *dic = new Object(new Dict(xref));
David Tardon dc01ed
+#else
David Tardon dc01ed
     Object *dic = new Object();
David Tardon dc01ed
     dic->initDict(xref);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     dic->dictSet("Type", name_object("FontDescriptor"));
David Tardon dc01ed
     dic->dictSet(
David Tardon dc01ed
@@ -1119,6 +1379,15 @@
David Tardon dc01ed
     dic->dictSet("StemV", int_object(fdes->stemV));
David Tardon dc01ed
 
David Tardon dc01ed
     /* FontBox array */
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    Object array = Object(new Array(xref));
David Tardon dc01ed
+    array.arrayAdd(Object(static_cast<double>(fdes->bbxmin)));
David Tardon dc01ed
+    array.arrayAdd(Object(static_cast<double>(fdes->bbymin)));
David Tardon dc01ed
+    array.arrayAdd(Object(static_cast<double>(fdes->bbxmax)));
David Tardon dc01ed
+    array.arrayAdd(Object(static_cast<double>(fdes->bbymax)));
David Tardon dc01ed
+
David Tardon dc01ed
+    dic->dictSet("FontBBox", std::move(array));
David Tardon dc01ed
+#else
David Tardon dc01ed
     Object array;
David Tardon dc01ed
     array.initArray(xref);
David Tardon dc01ed
 
David Tardon dc01ed
@@ -1137,6 +1406,7 @@
David Tardon dc01ed
     array.arrayAdd(&el);
David Tardon dc01ed
 
David Tardon dc01ed
     dic->dictSet("FontBBox", &array);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     if (fdes->xHeight) {
David Tardon dc01ed
         dic->dictSet("XHeight", int_object(fdes->xHeight));
David Tardon dc01ed
@@ -1149,20 +1419,34 @@
David Tardon dc01ed
     if (fdes->panose) {
David Tardon dc01ed
         /* Font dictionary for embeded font */
David Tardon dc01ed
         Object style_dic;
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        style_dic = Object(new Dict(xref));
David Tardon dc01ed
+#else
David Tardon dc01ed
         style_dic.initDict(xref);
David Tardon dc01ed
-
David Tardon dc01ed
+#endif
David Tardon dc01ed
+
David Tardon dc01ed
+        GooString *panose_str = new GooString(fdes->panose, 12);
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        style_dic.dictSet("Panose", Object(panose_str));
David Tardon dc01ed
+
David Tardon dc01ed
+        dic->dictSet("Style", std::move(style_dic));
David Tardon dc01ed
+#else
David Tardon dc01ed
         Object panose;
David Tardon dc01ed
 
David Tardon dc01ed
-        GooString *panose_str = new GooString(fdes->panose, 12);
David Tardon dc01ed
         panose.initString(panose_str);
David Tardon dc01ed
         style_dic.dictSet("Panose", &panose);
David Tardon dc01ed
 
David Tardon dc01ed
         dic->dictSet("Style", &style_dic);
David Tardon dc01ed
+#endif
David Tardon dc01ed
     }
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    dic->dictSet(emb_pdf_get_fontfile_key(emb), Object(fontfile_obj_ref.num, fontfile_obj_ref.gen));
David Tardon dc01ed
+#else
David Tardon dc01ed
     Object ref_obj;
David Tardon dc01ed
     ref_obj.initRef(fontfile_obj_ref.num, fontfile_obj_ref.gen);
David Tardon dc01ed
     dic->dictSet(emb_pdf_get_fontfile_key(emb), &ref_obj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     return dic;
David Tardon dc01ed
 }
David Tardon dc01ed
@@ -1181,8 +1465,12 @@
David Tardon dc01ed
     /* Get XREF table */
David Tardon dc01ed
     XRef *xref = doc->getXRef();
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    Object *dic = new Object(new Dict(xref));
David Tardon dc01ed
+#else
David Tardon dc01ed
     Object *dic = new Object();
David Tardon dc01ed
     dic->initDict(xref);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     dic->dictSet("Type", name_object("Font"));
David Tardon dc01ed
     dic->dictSet(
David Tardon dc01ed
@@ -1192,15 +1480,23 @@
David Tardon dc01ed
             "BaseFont",
David Tardon dc01ed
             name_object(copyString(emb_pdf_escape_name(fdes->fontname,-1))));
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    dic->dictSet("FontDescriptor", Object(fontdescriptor_obj_ref.num, fontdescriptor_obj_ref.gen));
David Tardon dc01ed
+#else
David Tardon dc01ed
     Object ref_obj;
David Tardon dc01ed
     ref_obj.initRef(fontdescriptor_obj_ref.num, fontdescriptor_obj_ref.gen);
David Tardon dc01ed
     dic->dictSet("FontDescriptor", &ref_obj);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     if ( emb->plan & EMB_A_MULTIBYTE ) {
David Tardon dc01ed
         assert(fwid->warray);
David Tardon dc01ed
 
David Tardon dc01ed
         Object CIDSystemInfo_dic;
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        CIDSystemInfo_dic = Object(new Dict(xref));
David Tardon dc01ed
+#else
David Tardon dc01ed
         CIDSystemInfo_dic.initDict(xref);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
         Object registry;
David Tardon dc01ed
         Object ordering;
David Tardon dc01ed
@@ -1208,16 +1504,28 @@
David Tardon dc01ed
         GooString *str;
David Tardon dc01ed
 
David Tardon dc01ed
         str = new GooString(copyString(fdes->registry));
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        CIDSystemInfo_dic.dictSet("Registry", Object(str));
David Tardon dc01ed
+#else
David Tardon dc01ed
         registry.initString(str);
David Tardon dc01ed
         CIDSystemInfo_dic.dictSet("Registry", &registry);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
         str = new GooString(copyString(fdes->ordering));
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        CIDSystemInfo_dic.dictSet("Ordering", Object(str));
David Tardon dc01ed
+#else
David Tardon dc01ed
         ordering.initString(str);
David Tardon dc01ed
         CIDSystemInfo_dic.dictSet("Ordering", &ordering);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
         CIDSystemInfo_dic.dictSet("Supplement", int_object(fdes->supplement));
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+        dic->dictSet("CIDSystemInfo", std::move(CIDSystemInfo_dic));
David Tardon dc01ed
+#else
David Tardon dc01ed
         dic->dictSet("CIDSystemInfo", &CIDSystemInfo_dic);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
         dic->dictSet("DW", int_object(fwid->default_width));
David Tardon dc01ed
     }
David Tardon dc01ed
@@ -1249,8 +1557,12 @@
David Tardon dc01ed
     /* Get XREF table */
David Tardon dc01ed
     XRef *xref = doc->getXRef();
David Tardon dc01ed
 
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    Object *dic = new Object(new Dict(xref));
David Tardon dc01ed
+#else
David Tardon dc01ed
     Object *dic = new Object();
David Tardon dc01ed
     dic->initDict(xref);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     dic->dictSet("Type", name_object("Font"));
David Tardon dc01ed
     dic->dictSet("Subtype", name_object("Type0"));
David Tardon dc01ed
@@ -1267,13 +1579,24 @@
David Tardon dc01ed
     dic->dictSet("Encoding", name_object(copyString(encoding)));
David Tardon dc01ed
 
David Tardon dc01ed
     Object obj;
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    obj = Object(fontdescriptor_obj_ref.num, fontdescriptor_obj_ref.gen);
David Tardon dc01ed
+#else
David Tardon dc01ed
     obj.initRef(fontdescriptor_obj_ref.num, fontdescriptor_obj_ref.gen);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     Object array;
David Tardon dc01ed
+#if POPPLER_VERSION_MAJOR > 0 || POPPLER_VERSION_MINOR >= 58
David Tardon dc01ed
+    array = Object(new Array(xref));
David Tardon dc01ed
+    array.arrayAdd(std::move(obj));
David Tardon dc01ed
+
David Tardon dc01ed
+    dic->dictSet("DescendantFonts", std::move(array));
David Tardon dc01ed
+#else
David Tardon dc01ed
     array.initArray(xref);
David Tardon dc01ed
     array.arrayAdd(&obj);
David Tardon dc01ed
 
David Tardon dc01ed
     dic->dictSet("DescendantFonts", &array);
David Tardon dc01ed
+#endif
David Tardon dc01ed
 
David Tardon dc01ed
     return dic;
David Tardon dc01ed
 }
David Tardon dc01ed