don't try to load a Type3 font.
[swftools.git] / pdf2swf / SWFOutputDev.cc
index fea0d24..50a7016 100644 (file)
@@ -55,7 +55,13 @@ static char* swffilename = 0;
 static int numpages;
 static int currentpage;
 
-static char*fonts[2048];
+typedef struct _fontfile
+{
+    char*filename;
+    int used;
+} fontfile_t;
+
+static fontfile_t fonts[2048];
 static int fontnum = 0;
 
 // swf <-> pdf pages
@@ -388,7 +394,7 @@ void dumpFontInfo(char*loglevel, GfxFont*font)
 {
   char* name = getFontID(font);
   Ref* r=font->getID();
-  msg("%s=========== %s (ID:%d,%d) ==========\n", loglevel, name, r->num,r->gen);
+  msg("%s=========== %s (ID:%d,%d) ==========\n", loglevel, getFontName(font), r->num,r->gen);
 
   GString*gstr  = font->getTag();
    
@@ -917,8 +923,9 @@ char* SWFOutputDev::searchFont(char*name)
 {      
     int i;
     char*filename=0;
+    int is_standard_font = 0;
        
-    msg("<verbose> SearchT1Font(%s)", name);
+    msg("<verbose> SearchFont(%s)", name);
 
     /* see if it is a pdf standard font */
     for(i=0;i<sizeof(pdf2t1map)/sizeof(mapping);i++) 
@@ -926,15 +933,22 @@ char* SWFOutputDev::searchFont(char*name)
        if(!strcmp(name, pdf2t1map[i].pdffont))
        {
            name = pdf2t1map[i].filename;
+           is_standard_font = 1;
            break;
        }
     }
     /* look in all font files */
     for(i=0;i<fontnum;i++) 
     {
-       if(strstr(fonts[i], name))
+       if(strstr(fonts[i].filename, name))
        {
-           return fonts[i];
+           if(!fonts[i].used) {
+
+               fonts[i].used = 1;
+               if(!is_standard_font)
+                   msg("<notice> Using %s for %s", fonts[i].filename, name);
+           }
+           return fonts[i].filename;
        }
     }
     return 0;
@@ -1161,9 +1175,12 @@ void SWFOutputDev::updateFont(GfxState *state)
     }
 
     // look for Type 3 font
-    if (!type3Warning && gfxFont->getType() == fontType3) {
-       type3Warning = gTrue;
-       showFontError(gfxFont, 2);
+    if (gfxFont->getType() == fontType3) {
+       if(!type3Warning) {
+           type3Warning = gTrue;
+           showFontError(gfxFont, 2);
+       }
+       return;
     }
 
     /* now either load the font, or find a substitution */
@@ -1191,7 +1208,7 @@ void SWFOutputDev::updateFont(GfxState *state)
     }
     if(!fileName) {
        char * fontname = getFontName(gfxFont);
-       msg("<warning> Font %s could not be loaded.", fontname);
+       msg("<warning> Font %s %scould not be loaded.", fontname, embedded?"":"(not embedded) ");
        msg("<warning> Try putting a TTF version of that font (named \"%s.ttf\") into /swftools/fonts", fontname);
        fileName = substituteFont(gfxFont, fontid);
     }
@@ -1651,95 +1668,42 @@ void pdfswf_init(char*filename, char*userPassword)
 
 void pdfswf_setparameter(char*name, char*value)
 {
-    if(!strcmp(name, "drawonlyshapes")) {
-       drawonlyshapes = atoi(value);
-    } else if(!strcmp(name, "ignoredraworder")) {
-       ignoredraworder = atoi(value);
-    } else if(!strcmp(name, "linksopennewwindow")) {
-       opennewwindow = atoi(value);
-    } else if(!strcmp(name, "storeallcharacters")) {
-       storeallcharacters = atoi(value);
-    } else if(!strcmp(name, "enablezlib")) {
-       enablezlib = atoi(value);
-    } else if(!strcmp(name, "insertstop")) {
-       insertstoptag = atoi(value);
-    } else if(!strcmp(name, "flashversion")) {
-       flashversion = atoi(value);
-    } else if(!strcmp(name, "jpegquality")) {
-       int val = atoi(value);
-       if(val<0) val=0;
-       if(val>100) val=100;
-       jpegquality = val;
-    } else if(!strcmp(name, "outputfilename")) {
+    if(!strcmp(name, "outputfilename")) {
        swffilename = value;
     } else if(!strcmp(name, "caplinewidth")) {
        caplinewidth = atof(value);
-    } else if(!strcmp(name, "splinequality")) {
-       int v = atoi(value);
-       v = 500-(v*5); // 100% = 0.25 pixel, 0% = 25 pixel
-       if(v<1) v = 1;
-       splinemaxerror = v;
-    } else if(!strcmp(name, "fontquality")) {
-       int v = atoi(value);
-       v = 500-(v*5); // 100% = 0.25 pixel, 0% = 25 pixel
-       if(v<1) v = 1;
-       fontsplinemaxerror = v;
     } else {
-       fprintf(stderr, "unknown parameter: %s (=%s)\n", name, value);
+       swfoutput_setparameter(name, value);
     }
 }
 
 void pdfswf_addfont(char*filename)
 {
-    fonts[fontnum++] = filename;
+    fontfile_t f;
+    memset(&f, 0, sizeof(fontfile_t));
+    f.filename = filename;
+    fonts[fontnum++] = f;
 }
 
-void pdfswf_drawonlyshapes()
-{
-    drawonlyshapes = 1;
+/* TODO: get rid of this */
+void pdfswf_drawonlyshapes() { pdfswf_setparameter("drawonlyshapes", "1"); }
+void pdfswf_ignoredraworder() { pdfswf_setparameter("ignoredraworder", "1"); }
+void pdfswf_linksopennewwindow() { pdfswf_setparameter("opennewwindow", "1"); }
+void pdfswf_storeallcharacters() { pdfswf_setparameter("storeallcharacters", "1"); }
+void pdfswf_enablezlib() { pdfswf_setparameter("enablezlib", "1"); }
+void pdfswf_setoutputfilename(char*_filename) { swffilename = _filename; }
+void pdfswf_insertstop() { pdfswf_setparameter("insertstoptag", "1"); }
+void pdfswf_jpegquality(int val) {
+    char tmp[32];
+    sprintf(tmp, "%d", val);
+    pdfswf_setparameter("jpegquality", tmp);
 }
-
-void pdfswf_ignoredraworder()
-{
-    ignoredraworder = 1;
+void pdfswf_setversion(int n) {
+    char tmp[32];
+    sprintf(tmp, "%d", n);
+    pdfswf_setparameter("flashversion", tmp);
 }
 
-void pdfswf_linksopennewwindow()
-{
-    opennewwindow = 1;
-}
-
-void pdfswf_storeallcharacters()
-{
-    storeallcharacters = 1;
-}
-
-void pdfswf_enablezlib()
-{
-    enablezlib = 1;
-}
-
-void pdfswf_jpegquality(int val)
-{
-    if(val<0) val=0;
-    if(val>100) val=100;
-    jpegquality = val;
-}
-
-void pdfswf_setoutputfilename(char*_filename)
-{
-    swffilename = _filename;
-}
-
-void pdfswf_insertstop()
-{
-    insertstoptag = 1;
-}
-
-void pdfswf_setversion(int n)
-{
-    flashversion = n;
-}
 
 
 void pdfswf_convertpage(int page)
@@ -1767,7 +1731,6 @@ void pdfswf_performconversion()
        doc->displayPage((OutputDev*)output, currentpage, /*dpi*/72, /*rotate*/0, /*doLinks*/(int)1);
     }
 }
-
 int pdfswf_numpages()
 {
   return doc->getNumPages();