summaryrefslogtreecommitdiffstats
path: root/src/poppler-1-win32.patch
blob: 11add518a433e769e6d731ac35935bd3d905019b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
This file is part of MXE.
See index.html for further information.

From 991d23243522e1ae2bd8efd279032792681f3789 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20L=C3=B6ffler?= <st.loeffler@gmail.com>
Date: Sat, 21 Apr 2012 09:29:25 +0200
Subject: [PATCH 1/4] 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.
Proposed upstream at https://bugs.freedesktop.org/show_bug.cgi?id=49037
---
 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 482782fa1951c8c75636918fb45c90f3f329bf86 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20L=C3=B6ffler?= <st.loeffler@gmail.com>
Date: Sat, 21 Apr 2012 09:34:46 +0200
Subject: [PATCH 2/4] Only check for Type1 fonts in custom directory if path
 is non-NULL

Otherwise, programs using poppler may crash
Proposed upstream at https://bugs.freedesktop.org/show_bug.cgi?id=49037
---
 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 7f01e803b134d01a72f6912d088d7887eba0df08 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20L=C3=B6ffler?= <st.loeffler@gmail.com>
Date: Sat, 21 Apr 2012 11:57:02 +0200
Subject: [PATCH 3/4] 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.
Proposed upstream at https://bugs.freedesktop.org/show_bug.cgi?id=49037
---
 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


From e000aafa7dec5441d072158814fa35631c5a9c52 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20L=C3=B6ffler?= <st.loeffler@gmail.com>
Date: Sat, 21 Apr 2012 13:19:54 +0200
Subject: [PATCH 4/4] Don't use dllimport/dllexport

Otherwise static linking fails
MXE workaround for https://bugs.freedesktop.org/show_bug.cgi?id=49038 (presumably would break shared linking!)
---
 cpp/poppler-global.h     |    5 -----
 poppler/XpdfPluginAPI.h  |   18 ------------------
 qt4/src/poppler-export.h |    5 -----
 3 files changed, 0 insertions(+), 28 deletions(-)

diff --git a/cpp/poppler-global.h b/cpp/poppler-global.h
index 5650182..6c3e01b 100644
--- a/cpp/poppler-global.h
+++ b/cpp/poppler-global.h
@@ -20,13 +20,8 @@
 #ifndef POPPLER_GLOBAL_H
 #define POPPLER_GLOBAL_H
 
-#if defined(_WIN32)
-#  define LIB_EXPORT __declspec(dllexport)
-#  define LIB_IMPORT __declspec(dllimport)
-#else
 #  define LIB_EXPORT
 #  define LIB_IMPORT
-#endif
 
 #if defined(poppler_cpp_EXPORTS)
 #  define POPPLER_CPP_EXPORT LIB_EXPORT
diff --git a/poppler/XpdfPluginAPI.h b/poppler/XpdfPluginAPI.h
index 22540f7..290aa63 100644
--- a/poppler/XpdfPluginAPI.h
+++ b/poppler/XpdfPluginAPI.h
@@ -28,19 +28,11 @@ extern "C" {
  */
 #define xpdfPluginAPIVersion 1
 
-#ifdef _WIN32
-#  ifdef __cplusplus
-#    define PLUGINFUNC(retType) extern "C" __declspec(dllexport) retType
-#  else
-#    define PLUGINFUNC(retType) extern __declspec(dllexport) retType
-#  endif
-#else
 #  ifdef __cplusplus
 #    define PLUGINFUNC(retType) extern "C" retType
 #  else
 #    define PLUGINFUNC(retType) extern retType
 #  endif
-#endif
 
 /*------------------------------------------------------------------------
  * Plugin setup/cleanup
@@ -285,22 +277,12 @@ void (*_xpdfRegisterSecurityHandler)(XpdfSecurityHandler *handler);
 
 } XpdfPluginVecTable;
 
-#ifdef _WIN32
-
-extern __declspec(dllexport) XpdfPluginVecTable xpdfPluginVecTable;
-
-#define xpdfPluginSetup \
-  extern __declspec(dllexport) \
-  XpdfPluginVecTable xpdfPluginVecTable = {xpdfPluginAPIVersion};
-
-#else
 
 extern XpdfPluginVecTable xpdfPluginVecTable;
 
 #define xpdfPluginSetup \
   XpdfPluginVecTable xpdfPluginVecTable = {xpdfPluginAPIVersion};
 
-#endif
 
 #define xpdfGetInfoDict (*xpdfPluginVecTable._xpdfGetInfoDict)
 #define xpdfGetCatalog (*xpdfPluginVecTable._xpdfGetCatalog)
diff --git a/qt4/src/poppler-export.h b/qt4/src/poppler-export.h
index 7661fe9..ebb1e18 100644
--- a/qt4/src/poppler-export.h
+++ b/qt4/src/poppler-export.h
@@ -2,13 +2,8 @@
 * This file is used to set the poppler_qt4_EXPORT macros right.
 * This is needed for setting the visibility on windows, it will have no effect on other platforms.
 */
-#if defined(_WIN32)
-# define LIB_EXPORT __declspec(dllexport)
-# define LIB_IMPORT __declspec(dllimport)
-#else
 # define LIB_EXPORT
 # define LIB_IMPORT
-#endif
 
 #ifdef poppler_qt4_EXPORTS
 # define POPPLER_QT4_EXPORT LIB_EXPORT
-- 
1.7.5.4