#include "../devices/arts.h"
#include "../devices/render.h"
#include "../png.h"
+#include "fonts.h"
#include <math.h>
static char* lastfontdir = 0;
-struct mapping {
+struct fontentry {
char*pdffont;
char*filename;
+ char*afm;
+ int afmlen;
+ char*pfb;
+ int pfblen;
+ char*fullfilename;
} pdf2t1map[] ={
-{"Times-Roman", "n021003l"},
-{"Times-Italic", "n021023l"},
-{"Times-Bold", "n021004l"},
-{"Times-BoldItalic", "n021024l"},
-{"Helvetica", "n019003l"},
-{"Helvetica-Oblique", "n019023l"},
-{"Helvetica-Bold", "n019004l"},
-{"Helvetica-BoldOblique", "n019024l"},
-{"Courier", "n022003l"},
-{"Courier-Oblique", "n022023l"},
-{"Courier-Bold", "n022004l"},
-{"Courier-BoldOblique", "n022024l"},
-{"Symbol", "s050000l"},
-{"ZapfDingbats", "d050000l"}};
-
-static int verbose = 1;
+{"Times-Roman", "n021003l", n021003l_afm, n021003l_afm_len, n021003l_pfb, n021003l_pfb_len},
+{"Times-Italic", "n021023l", n021023l_afm, n021023l_afm_len, n021023l_pfb, n021023l_pfb_len},
+{"Times-Bold", "n021004l", n021004l_afm, n021004l_afm_len, n021004l_pfb, n021004l_pfb_len},
+{"Times-BoldItalic", "n021024l", n021024l_afm, n021024l_afm_len, n021024l_pfb, n021024l_pfb_len},
+{"Helvetica", "n019003l", n019003l_afm, n019003l_afm_len, n019003l_pfb, n019003l_pfb_len},
+{"Helvetica-Oblique", "n019023l", n019023l_afm, n019023l_afm_len, n019023l_pfb, n019023l_pfb_len},
+{"Helvetica-Bold", "n019004l", n019004l_afm, n019004l_afm_len, n019004l_pfb, n019004l_pfb_len},
+{"Helvetica-BoldOblique", "n019024l", n019024l_afm, n019024l_afm_len, n019024l_pfb, n019024l_pfb_len},
+{"Courier", "n022003l", n022003l_afm, n022003l_afm_len, n022003l_pfb, n022003l_pfb_len},
+{"Courier-Oblique", "n022023l", n022023l_afm, n022023l_afm_len, n022023l_pfb, n022023l_pfb_len},
+{"Courier-Bold", "n022004l", n022004l_afm, n022004l_afm_len, n022004l_pfb, n022004l_pfb_len},
+{"Courier-BoldOblique", "n022024l", n022024l_afm, n022024l_afm_len, n022024l_pfb, n022024l_pfb_len},
+{"Symbol", "s050000l", s050000l_afm, s050000l_afm_len, s050000l_pfb, s050000l_pfb_len},
+{"ZapfDingbats", "d050000l", d050000l_afm, d050000l_afm_len, d050000l_pfb, d050000l_pfb_len}};
+
+
+static int verbose = 0;
static int dbgindent = 0;
static void dbg(char*format, ...)
{
statepos--;
}
+char* writeOutStdFont(fontentry* f)
+{
+ FILE*fi;
+ char namebuf1[512];
+ char namebuf2[512];
+ char* tmpFileName = mktmpname(namebuf1);
+
+ sprintf(namebuf2, "%s.afm", tmpFileName);
+ fi = fopen(namebuf2, "wb");
+ if(!fi)
+ return 0;
+ fwrite(f->afm, 1, f->afmlen, fi);
+ fclose(fi);
+
+ sprintf(namebuf2, "%s.pfb", tmpFileName);
+ fi = fopen(namebuf2, "wb");
+ if(!fi)
+ return 0;
+ fwrite(f->pfb, 1, f->pfblen, fi);
+ fclose(fi);
+
+ return strdup(namebuf2);
+}
+
char* GFXOutputDev::searchFont(char*name)
{
int i;
char*filename=0;
- int is_standard_font = 0;
msg("<verbose> SearchFont(%s)", name);
/* see if it is a pdf standard font */
- for(i=0;i<sizeof(pdf2t1map)/sizeof(mapping);i++)
+ for(i=0;i<sizeof(pdf2t1map)/sizeof(fontentry);i++)
{
if(!strcmp(name, pdf2t1map[i].pdffont))
{
- name = pdf2t1map[i].filename;
- is_standard_font = 1;
- break;
+ if(!pdf2t1map[i].fullfilename) {
+ pdf2t1map[i].fullfilename = writeOutStdFont(&pdf2t1map[i]);
+ if(!pdf2t1map[i].fullfilename) {
+ msg("<error> Couldn't save default font- is the Temp Directory writable?");
+ } else {
+ msg("<verbose> Storing standard PDF font %s at %s", name, pdf2t1map[i].fullfilename);
+ }
+ }
+ return strdup(pdf2t1map[i].fullfilename);
}
}
- /* look in all font files */
+ /* else look in all font files */
for(i=0;i<fontnum;i++)
{
- if(strstr(fonts[i].filename, name))
- {
- if(!fonts[i].used) {
-
- fonts[i].used = 1;
- if(!is_standard_font)
- msg("<notice> Using %s for %s", fonts[i].filename, name);
- }
+ if(strstr(fonts[i].filename, name)) {
return strdup(fonts[i].filename);
}
}
libpdf: ../libpdf$(A)
-libpdf_objects = GFXOutputDev.$(O) InfoOutputDev.$(O) pdf.$(O)
+libpdf_objects = GFXOutputDev.$(O) InfoOutputDev.$(O) pdf.$(O) fonts.$(O)
xpdf_objects = xpdf/GHash.$(O) xpdf/GList.$(O) xpdf/GString.$(O) xpdf/gmem.$(O) xpdf/gfile.$(O) \
xpdf/FoFiTrueType.$(O) xpdf/FoFiType1.$(O) xpdf/FoFiType1C.$(O) xpdf/FoFiBase.$(O) xpdf/FoFiEncodings.$(O) \
xpdf/GfxState.$(O) xpdf/Function.$(O) xpdf/Annot.$(O) xpdf/NameToCharCode.$(O) xpdf/UnicodeMap.$(O) \
xpdf/SecurityHandler.$(O)
+fonts.$(O): fonts.c
+ $(C) -I ./ -I xpdf fonts.c -o $@
cmyk.$(O): cmyk.cc
$(CC) -I ./ -I xpdf cmyk.cc -o $@
GFXOutputDev.$(O): GFXOutputDev.cc GFXOutputDev.h
+int d050000l_afm_len = 9381;
char* d050000l_afm =
"StartFontMetrics 3.0\nComment Copyright URW Software, Copyright 1997 by URW\nCom"
"ment Creation Date: 10/19/1999\nComment See the file COPYING (GNU General Public"
"75 691 ;\nC -1 ; WX 278 ; N .notdef ; B 0 0 0 0 ;\nEndCharMetrics\nEndFontMetric"
"s\n"
;
+int d050000l_pfb_len = 45955;
char* d050000l_pfb =
"\x80\x1\xb6\x12\x0\x0%!PS-AdobeFont-1.0: Dingbats 001.005\n%%CreationDate: Tue O"
"ct 19 1999\n% Copyright URW Software, Copyright 1997 by URW\n% URW Software, Cop"
"00000000000000000000000000000000000000000000000\r0000000000000000000000000000000"
"000000000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n019003l_afm_len = 31763;
char* n019003l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
" s -12\nKPX y semicolon -27\nKPX zero four -2\nKPX zero one -46\nKPX zero seven "
"-39\nEndKernPairs\nEndKernData\nEndFontMetrics\n"
;
+int n019003l_pfb_len = 36026;
char* n019003l_pfb =
"\x80\x1]\x6\x0\x0%!PS-AdobeFont-1.0: NimbusSanL-Regu 1.05\n%%CreationDate: Wed D"
"ec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n"
"00000000000000000000000000000000000000000000000000\r0000000000000000000000000000"
"000000000000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n019004l_afm_len = 31595;
char* n019004l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
"X y semicolon -33\nKPX zero four 5\nKPX zero one -19\nKPX zero seven -10\nEndKer"
"nPairs\nEndKernData\nEndFontMetrics\n"
;
+int n019004l_pfb_len = 35941;
char* n019004l_pfb =
"\x80\x1W\x6\x0\x0%!PS-AdobeFont-1.0: NimbusSanL-Bold 1.05\n%%CreationDate: Wed D"
"ec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n"
"00000000000000000000000000000000000000000000000000000000\r0000000000000000000000"
"000000000000000000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n019023l_afm_len = 32114;
char* n019023l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
"30\nKPX y period -80\nKPX y s -23\nKPX y semicolon -40\nKPX zero four -11\nKPX z"
"ero one -56\nKPX zero seven -50\nEndKernPairs\nEndKernData\nEndFontMetrics\n"
;
+int n019023l_pfb_len = 38314;
char* n019023l_pfb =
"\x80\x1n\x6\x0\x0%!PS-AdobeFont-1.0: NimbusSanL-ReguItal 1.05\n%%CreationDate: W"
"ed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developme"
"0000000000000000000000000000000000000000000000000000000\r00000000000000000000000"
"00000000000000000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n019024l_afm_len = 31901;
char* n019024l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
"-43\nKPX zero four -3\nKPX zero one -29\nKPX zero seven -21\nEndKernPairs\nEndKe"
"rnData\nEndFontMetrics\n"
;
+int n019024l_pfb_len = 39013;
char* n019024l_pfb =
"\x80\x1h\x6\x0\x0%!PS-AdobeFont-1.0: NimbusSanL-BoldItal 1.05\n%%CreationDate: W"
"ed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developme"
"0000000000000000000000000000000000000000\r00000000000000000000000000000000000000"
"00000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n021003l_afm_len = 31943;
char* n021003l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
"X y period -73\nKPX y s -26\nKPX y semicolon -23\nKPX zero four 12\nKPX zero one"
" -55\nKPX zero seven -5\nEndKernPairs\nEndKernData\nEndFontMetrics\n"
;
+int n021003l_pfb_len = 46026;
char* n021003l_pfb =
"\x80\x1m\x6\x0\x0%!PS-AdobeFont-1.0: NimbusRomNo9L-Regu 1.05\n%%CreationDate: We"
"d Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developmen"
"0000000000000000000000000000000000000000000000000000\r00000000000000000000000000"
"00000000000000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n021004l_afm_len = 31889;
char* n021004l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
"KPX zero four 11\nKPX zero one -31\nKPX zero seven 7\nEndKernPairs\nEndKernData\n"
"EndFontMetrics\n"
;
+int n021004l_pfb_len = 44729;
char* n021004l_pfb =
"\x80\x1i\x6\x0\x0%!PS-AdobeFont-1.0: NimbusRomNo9L-Medi 1.05\n%%CreationDate: We"
"d Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developmen"
"00000000000000000000000000000000000000000000000\r0000000000000000000000000000000"
"000000000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n021023l_afm_len = 31920;
char* n021023l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
" y s -19\nKPX y semicolon -45\nKPX zero four 14\nKPX zero one -50\nKPX zero seve"
"n -3\nEndKernPairs\nEndKernData\nEndFontMetrics\n"
;
+int n021023l_pfb_len = 45458;
char* n021023l_pfb =
"\x80\x1~\x6\x0\x0%!PS-AdobeFont-1.0: NimbusRomNo9L-ReguItal 1.05\n%%CreationDate"
": Wed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Develo"
"000000000000000000000000000000000000000000000000000000\r000000000000000000000000"
"0000000000000000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n021024l_afm_len = 32028;
char* n021024l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
"7\nKPX y period -26\nKPX y s -13\nKPX y semicolon -44\nKPX zero four -1\nKPX zer"
"o one -50\nKPX zero seven -12\nEndKernPairs\nEndKernData\nEndFontMetrics\n"
;
+int n021024l_pfb_len = 44656;
char* n021024l_pfb =
"\x80\x1y\x6\x0\x0%!PS-AdobeFont-1.0: NimbusRomNo9L-MediItal 1.05\n%%CreationDate"
": Wed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Develo"
"000000000000000000000000000000000000000000000000000000000\r000000000000000000000"
"0000000000000000000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n022003l_afm_len = 31926;
char* n022003l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
"X y s -30\nKPX y semicolon -72\nKPX zero four -58\nKPX zero one -81\nKPX zero se"
"ven -73\nEndKernPairs\nEndKernData\nEndFontMetrics\n"
;
+int n022003l_pfb_len = 45758;
char* n022003l_pfb =
"\x80\x1[\x6\x0\x0%!PS-AdobeFont-1.0: NimbusMonL-Regu 1.05\n%%CreationDate: Wed D"
"ec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n"
"00000000000000000000000000000000000000000000000000000000\r0000000000000000000000"
"000000000000000000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n022004l_afm_len = 31779;
char* n022004l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
"eriod -155\nKPX y s -21\nKPX y semicolon -79\nKPX zero four -59\nKPX zero one -7"
"6\nKPX zero seven -68\nEndKernPairs\nEndKernData\nEndFontMetrics\n"
;
+int n022004l_pfb_len = 50493;
char* n022004l_pfb =
"\x80\x1U\x6\x0\x0%!PS-AdobeFont-1.0: NimbusMonL-Bold 1.05\n%%CreationDate: Wed D"
"ec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Development\n"
"00000000000000000000000000000000000000000000000\r0000000000000000000000000000000"
"000000000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n022023l_afm_len = 32136;
char* n022023l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
"KPX zero four -64\nKPX zero one -91\nKPX zero seven -82\nEndKernPairs\nEndKernDa"
"ta\nEndFontMetrics\n"
;
+int n022023l_pfb_len = 44404;
char* n022023l_pfb =
"\x80\x1m\x6\x0\x0%!PS-AdobeFont-1.0: NimbusMonL-ReguObli 1.05\n%%CreationDate: W"
"ed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developme"
"000000000000000000000000000000000000000000\r000000000000000000000000000000000000"
"0000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int n022024l_afm_len = 31961;
char* n022024l_afm =
"StartFontMetrics 3.0\nComment Copyright (URW)++,Copyright 1999 by (URW)++ Design"
" & Development\nComment Creation Date: 12/22/1999\nComment See the file COPYING "
"-65\nKPX zero one -81\nKPX zero seven -79\nEndKernPairs\nEndKernData\nEndFontMet"
"rics\n"
;
+int n022024l_pfb_len = 51527;
char* n022024l_pfb =
"\x80\x1g\x6\x0\x0%!PS-AdobeFont-1.0: NimbusMonL-BoldObli 1.05\n%%CreationDate: W"
"ed Dec 22 1999\n% Copyright (URW)++,Copyright 1999 by (URW)++ Design & Developme"
"00000000000000000000000000000000000000000\r0000000000000000000000000000000000000"
"000000000000000000000000000\rcleartomark\n\x80\x3"
;
+int s050000l_afm_len = 9686;
char* s050000l_afm =
"StartFontMetrics 3.0\nComment Copyright URW Software, Copyright 1997 by URW\nCom"
"ment Creation Date: 10/21/1999\nComment See the file COPYING (GNU General Public"
" 935 ;\nC 254 ; WX 494 ; N bracerightbt ; B 17 -70 255 926 ;\nC -1 ; WX 250 ; N "
".notdef ; B 0 0 0 0 ;\nEndCharMetrics\nEndFontMetrics\n"
;
+int s050000l_pfb_len = 33709;
char* s050000l_pfb =
"\x80\x1\xfb\x15\x0\x0%!PS-AdobeFont-1.0: StandardSymL 001.005\n%%CreationDate: T"
"hu Oct 21 1999\n% Copyright URW Software, Copyright 1997 by URW\n% URW Software,"
#endif
extern char* d050000l_afm;
+extern int d050000l_afm_len;
extern char* d050000l_pfb;
+extern int d050000l_pfb_len;
extern char* n019003l_afm;
+extern int n019003l_afm_len;
extern char* n019003l_pfb;
+extern int n019003l_pfb_len;
extern char* n019004l_afm;
+extern int n019004l_afm_len;
extern char* n019004l_pfb;
+extern int n019004l_pfb_len;
extern char* n019023l_afm;
+extern int n019023l_afm_len;
extern char* n019023l_pfb;
+extern int n019023l_pfb_len;
extern char* n019024l_afm;
+extern int n019024l_afm_len;
extern char* n019024l_pfb;
+extern int n019024l_pfb_len;
extern char* n021003l_afm;
+extern int n021003l_afm_len;
extern char* n021003l_pfb;
+extern int n021003l_pfb_len;
extern char* n021004l_afm;
+extern int n021004l_afm_len;
extern char* n021004l_pfb;
+extern int n021004l_pfb_len;
extern char* n021023l_afm;
+extern int n021023l_afm_len;
extern char* n021023l_pfb;
+extern int n021023l_pfb_len;
extern char* n021024l_afm;
+extern int n021024l_afm_len;
extern char* n021024l_pfb;
+extern int n021024l_pfb_len;
extern char* n022003l_afm;
+extern int n022003l_afm_len;
extern char* n022003l_pfb;
+extern int n022003l_pfb_len;
extern char* n022004l_afm;
+extern int n022004l_afm_len;
extern char* n022004l_pfb;
+extern int n022004l_pfb_len;
extern char* n022023l_afm;
+extern int n022023l_afm_len;
extern char* n022023l_pfb;
+extern int n022023l_pfb_len;
extern char* n022024l_afm;
+extern int n022024l_afm_len;
extern char* n022024l_pfb;
+extern int n022024l_pfb_len;
extern char* s050000l_afm;
+extern int s050000l_afm_len;
extern char* s050000l_pfb;
+extern int s050000l_pfb_len;
#ifdef __cplusplus
}