added xpdf-3.00 support.
[swftools.git] / pdf2swf / SWFOutputDev.cc
index 0b06f8d..8e93f5d 100644 (file)
 #include "GfxFont.h"
 #include "CharCodeToUnicode.h"
 #include "NameToUnicodeTable.h"
-#include "FontFile.h"
 #include "GlobalParams.h"
+//#define XPDF_101
+#ifdef XPDF_101
+#include "FontFile.h"
+#else
+#include "FoFiType1C.h"
+#include "FoFiTrueType.h"
+#endif
+#include "SWFOutputDev.h"
+
 //swftools header files
 #include "swfoutput.h"
-#include "SWFOutputDev.h"
 #include "../lib/log.h"
 
 #include <math.h>
@@ -74,6 +81,7 @@ static int pagebuflen = 0;
 static int pagepos = 0;
 
 static double caplinewidth = 3.0;
+static int zoom = 72; /* xpdf: 86 */
 
 static void printInfoString(Dict *infoDict, char *key, char *fmt);
 static void printInfoDate(Dict *infoDict, char *key, char *fmt);
@@ -673,7 +681,7 @@ void SWFOutputDev::drawChar(GfxState *state, double x, double y,
     x1 = x;
     y1 = y;
     state->transform(x, y, &x1, &y1);
-       
+    
     Unicode u=0;
     if(_u) 
        u = *_u;
@@ -700,9 +708,9 @@ void SWFOutputDev::drawChar(GfxState *state, double x, double y,
     
     msg("<debug> drawChar(%f,%f,c='%c' (%d),u=%d <%d>) CID=%d name=\"%s\"\n",x,y,(c&127)>=32?c:'?',c,u, uLen, font->isCIDFont(), FIXNULL(name));
 
-    x1 = (int)(x1+0.5);
-    y1 = (int)(y1+0.5);
-
+    /*x1 = (int)(x1+0.5);
+    y1 = (int)(y1+0.5);*/
+    
     int ret = swfoutput_drawchar(&output, x1, y1, name, c, u);
 }
 
@@ -769,7 +777,11 @@ void SWFOutputDev::drawLink(Link *link, Catalog *catalog)
   swfcoord points[5];
   int x, y;
 
+#ifdef XPDF_101
   link->getBorder(&x1, &y1, &x2, &y2, &w);
+#else
+  link->getRect(&x1, &y1, &x2, &y2);
+#endif
 //  if (w > 0) 
   {
     rgb.r = 0;
@@ -1000,6 +1012,11 @@ void SWFOutputDev::updateStrokeColor(GfxState *state)
                                      (char)(rgb.b*255), (char)(opaq*255));
 }
 
+void FoFiWrite(void *stream, char *data, int len)
+{
+   fwrite(data, len, 1, (FILE*)stream);
+}
+
 char*SWFOutputDev::writeEmbeddedFontToFile(XRef*ref, GfxFont*font)
 {
     char*tmpFileName = NULL;
@@ -1040,8 +1057,13 @@ char*SWFOutputDev::writeEmbeddedFontToFile(XRef*ref, GfxFont*font)
        msg("<error> Couldn't read embedded font file");
        return 0;
       }
+#ifdef XPDF_101
       Type1CFontFile *cvt = new Type1CFontFile(fontBuf, fontLen);
       cvt->convertToType1(f);
+#else
+      FoFiType1C *cvt = FoFiType1C::make(fontBuf, fontLen);
+      cvt->convertToType1(NULL, gTrue, FoFiWrite, f);
+#endif
       //cvt->convertToCIDType0("test", f);
       //cvt->convertToType0("test", f);
       delete cvt;
@@ -1053,8 +1075,13 @@ char*SWFOutputDev::writeEmbeddedFontToFile(XRef*ref, GfxFont*font)
        msg("<error> Couldn't read embedded font file");
        return 0;
       }
+#ifdef XPDF_101
       TrueTypeFontFile *cvt = new TrueTypeFontFile(fontBuf, fontLen);
       cvt->writeTTF(f);
+#else
+      FoFiTrueType *cvt = FoFiTrueType::make(fontBuf, fontLen);
+      cvt->writeTTF(FoFiWrite, f);
+#endif
       delete cvt;
       gfree(fontBuf);
     } else {
@@ -1779,6 +1806,8 @@ void pdfswf_setparameter(char*name, char*value)
        swffilename = value;
     } else if(!strcmp(name, "caplinewidth")) {
        caplinewidth = atof(value);
+    } else if(!strcmp(name, "zoom")) {
+       zoom = atoi(value);
     } else {
        swfoutput_setparameter(name, value);
     }
@@ -1792,26 +1821,7 @@ void pdfswf_addfont(char*filename)
     fonts[fontnum++] = f;
 }
 
-/* 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_setversion(int n) {
-    char tmp[32];
-    sprintf(tmp, "%d", n);
-    pdfswf_setparameter("flashversion", tmp);
-}
-
-
 
 void pdfswf_convertpage(int page)
 {
@@ -1835,7 +1845,11 @@ void pdfswf_performconversion()
     for(t=0;t<pagepos;t++)
     {
        currentpage = pages[t];
-       doc->displayPage((OutputDev*)output, currentpage, /*dpi*/72, /*rotate*/0, /*doLinks*/(int)1);
+#ifdef XPDF_101
+       doc->displayPage((OutputDev*)output, currentpage, /*zoom*/zoom, /*rotate*/0, /*doLinks*/(int)1);
+#else
+       doc->displayPage((OutputDev*)output, currentpage, zoom, zoom, /*rotate*/0, true, /*doLinks*/(int)1);
+#endif
     }
 }
 int pdfswf_numpages()