From f084359f36e68aaaede8fed598933156e03ac442 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20L=C3=B6ffler?= Date: Sat, 21 Apr 2012 09:29:25 +0200 Subject: [PATCH 1/3] Fix Standard-14 fallback fonts wingding.ttf is totally different from ZapfDingbats. symbol.ttf is only a lousy fallback for Symbol. Based on patch provided by Jonathan Kew. --- poppler/GlobalParamsWin.cc | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc index f989fb8..b15773f 100644 --- a/poppler/GlobalParamsWin.cc +++ b/poppler/GlobalParamsWin.cc @@ -73,13 +73,17 @@ static struct { {"Helvetica-BoldOblique", "n019024l.pfb", "arialbi.ttf"}, {"Helvetica-Oblique", "n019023l.pfb", "ariali.ttf"}, // TODO: not sure if "symbol.ttf" is right + // "symbol.ttf" can be used as a fallback, but some symbols are differently + // encoded (e.g., the glyphs for 'f', 'j', 'v'), while most other glyphs + // have a fairly different appearance {"Symbol", "s050000l.pfb", "symbol.ttf"}, {"Times-Bold", "n021004l.pfb", "timesbd.ttf"}, {"Times-BoldItalic", "n021024l.pfb", "timesbi.ttf"}, {"Times-Italic", "n021023l.pfb", "timesi.ttf"}, {"Times-Roman", "n021003l.pfb", "times.ttf"}, // TODO: not sure if "wingding.ttf" is right - {"ZapfDingbats", "d050000l.pfb", "wingding.ttf"}, + // No, the symbol sets are totally different + {"ZapfDingbats", "d050000l.pfb", NULL}, // those seem to be frequently accessed by PDF files and I kind of guess // which font file do the refer to -- 1.7.5.4 From 81dd27ef8bd213d8edc3e7983986bc17b6ef1d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20L=C3=B6ffler?= Date: Sat, 21 Apr 2012 09:34:46 +0200 Subject: [PATCH 2/3] Only check for Type1 fonts in custom directory if path is non-NULL Otherwise, programs using poppler may crash --- poppler/GlobalParamsWin.cc | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc index b15773f..f68577f 100644 --- a/poppler/GlobalParamsWin.cc +++ b/poppler/GlobalParamsWin.cc @@ -243,7 +243,7 @@ void GlobalParams::setupBaseFonts(char * dir) if (displayFonts->lookup(fontName)) continue; - if (dir) { + if (dir && displayFontTab[i].t1FileName) { GooString *fontPath = appendToPath(new GooString(dir), displayFontTab[i].t1FileName); if (FileExists(fontPath->getCString())) { AddFont(displayFonts, fontName, fontPath, displayFontT1); -- 1.7.5.4 From 3ee566eef0bc1e45807de257ea9b914ead61d205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20L=C3=B6ffler?= Date: Sat, 21 Apr 2012 11:57:02 +0200 Subject: [PATCH 3/3] Allow custom substitution fonts on Windows Standard-compliant PDF viewers must be able to handle 14 standard fonts even if they are not embedded. For the Symbol and ZapfDingbats fonts, there is no suitable alternative available on Windows by default, so they must be provided separately (and poppler must find them). The search path is share/fonts/type1/gsfonts (relative to poppler) similar to *nix systems and the search path for poppler-data. --- poppler/GlobalParams.cc | 31 +++++++++++++++++++++++++++++++ poppler/GlobalParamsWin.cc | 2 +- 2 files changed, 32 insertions(+), 1 deletions(-) diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc index 687fd25..eea60be 100644 --- a/poppler/GlobalParams.cc +++ b/poppler/GlobalParams.cc @@ -214,6 +214,37 @@ get_poppler_datadir (void) #ifdef _WIN32 +static char * +get_poppler_fontdir (void) +{ +#if !ENABLE_RELOCATABLE + static HMODULE hmodule = 0; +#endif + static char retval[MAX_PATH]; + static int beenhere = 0; + + unsigned char *p; + + if (beenhere) + return retval; + + if (!GetModuleFileName (hmodule, (CHAR *) retval, sizeof(retval) - 32)) + return NULL; + + p = _mbsrchr ((unsigned char *) retval, '\\'); + *p = '\0'; + p = _mbsrchr ((unsigned char *) retval, '\\'); + if (p) { + if (stricmp ((const char *) (p+1), "bin") == 0) + *p = '\0'; + } + strcat (retval, "\\share\\fonts\\type1\\gsfonts"); + + beenhere = 1; + + return retval; +} + //------------------------------------------------------------------------ // WinFontInfo //------------------------------------------------------------------------ diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc index f68577f..3ee75e4 100644 --- a/poppler/GlobalParamsWin.cc +++ b/poppler/GlobalParamsWin.cc @@ -281,7 +281,7 @@ DisplayFontParam *GlobalParams::getDisplayFont(GfxFont *font) { if (!fontName) return NULL; lockGlobalParams; - setupBaseFonts(NULL); + setupBaseFonts(get_poppler_fontdir()); dfp = (DisplayFontParam *)displayFonts->lookup(fontName); if (!dfp) { substFontName = findSubstituteName(fontName->getCString()); -- 1.7.5.4