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