poppler/GfxFont.cc | 9 +++++++++ poppler/PSOutputDev.cc | 24 ++++++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-)
New commits: commit ddf85d4a51f605eed998c633857b8bb5c74ab590 Author: Albert Astals Cid <[email protected]> Date: Fri Dec 4 14:59:41 2009 +0100 Make the code a bit more resilient By checking the GooString we are going to use really exists diff --git a/poppler/PSOutputDev.cc b/poppler/PSOutputDev.cc index 67b5412..f577425 100644 --- a/poppler/PSOutputDev.cc +++ b/poppler/PSOutputDev.cc @@ -1663,14 +1663,16 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) { // check for embedded Type 1 font } else if (globalParams->getPSEmbedType1() && font->getType() == fontType1 && - font->getEmbeddedFontID(&fontFileID)) { + font->getEmbeddedFontID(&fontFileID) && + font->getEmbeddedFontName()) { psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); setupEmbeddedType1Font(&fontFileID, psName); // check for embedded Type 1C font } else if (globalParams->getPSEmbedType1() && font->getType() == fontType1C && - font->getEmbeddedFontID(&fontFileID)) { + font->getEmbeddedFontID(&fontFileID) && + font->getOrigName()) { // use the PDF font name because the embedded font name might // not include the subset prefix psName = font->getOrigName()->sanitizedName(gTrue /* ps mode */); @@ -1679,7 +1681,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) { // check for embedded OpenType - Type 1C font } else if (globalParams->getPSEmbedType1() && font->getType() == fontType1COT && - font->getEmbeddedFontID(&fontFileID)) { + font->getEmbeddedFontID(&fontFileID) && + font->getOrigName()) { // use the PDF font name because the embedded font name might // not include the subset prefix psName = font->getOrigName()->sanitizedName(gTrue /* ps mode */); @@ -1688,7 +1691,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) { // check for external Type 1 font file } else if (globalParams->getPSEmbedType1() && font->getType() == fontType1 && - font->getExtFontFile()) { + font->getExtFontFile() && + font->getName()) { // this assumes that the PS font name matches the PDF font name psName = font->getName()->copy(); setupExternalType1Font(font->getExtFontFile(), psName); @@ -1697,7 +1701,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) { } else if (globalParams->getPSEmbedTrueType() && (font->getType() == fontTrueType || font->getType() == fontTrueTypeOT) && - font->getEmbeddedFontID(&fontFileID)) { + font->getEmbeddedFontID(&fontFileID) && + font->getEmbeddedFontName()) { psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); setupEmbeddedTrueTypeFont(font, &fontFileID, psName); @@ -1710,7 +1715,8 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) { // check for embedded CID PostScript font } else if (globalParams->getPSEmbedCIDPostScript() && font->getType() == fontCIDType0C && - font->getEmbeddedFontID(&fontFileID)) { + font->getEmbeddedFontID(&fontFileID) && + font->getEmbeddedFontName()) { psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); setupEmbeddedCIDType0Font(font, &fontFileID, psName); @@ -1718,14 +1724,16 @@ void PSOutputDev::setupFont(GfxFont *font, Dict *parentResDict) { } else if (globalParams->getPSEmbedCIDTrueType() && (font->getType() == fontCIDType2 || font->getType() == fontCIDType2OT) && - font->getEmbeddedFontID(&fontFileID)) { + font->getEmbeddedFontID(&fontFileID) && + font->getEmbeddedFontName()) { psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); setupEmbeddedCIDTrueTypeFont(font, &fontFileID, psName, gTrue); // check for embedded OpenType - CID CFF font } else if (globalParams->getPSEmbedCIDPostScript() && font->getType() == fontCIDType0COT && - font->getEmbeddedFontID(&fontFileID)) { + font->getEmbeddedFontID(&fontFileID) && + font->getEmbeddedFontName()) { psName = font->getEmbeddedFontName()->sanitizedName(gTrue /* ps mode */); setupEmbeddedOpenTypeCFFFont(font, &fontFileID, psName); commit 78b4afa0a44048b8d40438d400652dbae4cb99b1 Author: Albert Astals Cid <[email protected]> Date: Fri Dec 4 14:57:10 2009 +0100 Accept Fontname if FontName is not present Fixes KDE bug 217013 diff --git a/poppler/GfxFont.cc b/poppler/GfxFont.cc index f51c100..e7d564a 100644 --- a/poppler/GfxFont.cc +++ b/poppler/GfxFont.cc @@ -230,6 +230,15 @@ void GfxFont::readFontDescriptor(XRef *xref, Dict *fontDict) { embFontName = new GooString(obj2.getName()); } obj2.free(); + if (embFontName == NULL) { + // get name with typo + obj1.dictLookup("Fontname", &obj2); + if (obj2.isName()) { + embFontName = new GooString(obj2.getName()); + error(-1, "The file uses Fontname instead of FontName please notify the creator that the file is broken"); + } + obj2.free(); + } // get family obj1.dictLookup("FontFamily", &obj2); _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
