implemented viewer gadgets and --flashversion.
authorkramm <kramm>
Sat, 17 Aug 2002 09:27:27 +0000 (09:27 +0000)
committerkramm <kramm>
Sat, 17 Aug 2002 09:27:27 +0000 (09:27 +0000)
pdf2swf/SWFOutputDev.cc
pdf2swf/SWFOutputDev.h
pdf2swf/pdf2swf.1
pdf2swf/pdf2swf.cc
pdf2swf/swfoutput.cc
pdf2swf/swfoutput.h

index fc295eb..070e34a 100644 (file)
@@ -743,24 +743,27 @@ void SWFOutputDev::drawLink(Link *link, Catalog *catalog)
            LinkNamed*l = (LinkNamed*)action;
            GString*name = l->getName();
            if(name) {
            LinkNamed*l = (LinkNamed*)action;
            GString*name = l->getName();
            if(name) {
-             s = name->lowerCase()->getCString();
-             named = name->getCString();
-             if(strstr(s, "next") || strstr(s, "forward"))
-             {
-                 page = currentpage + 1;
-             }
-             else if(strstr(s, "prev") || strstr(s, "back"))
-             {
-                 page = currentpage - 1;
-             }
-             else if(strstr(s, "last") || strstr(s, "end"))
-             {
-                 page = pages[pagepos-1]; //:)
-             }
-             else if(strstr(s, "first") || strstr(s, "top"))
-             {
-                 page = 1;
-             }
+               s = name->lowerCase()->getCString();
+               named = name->getCString();
+               if(!strchr(s,':')) 
+               {
+                   if(strstr(s, "next") || strstr(s, "forward"))
+                   {
+                       page = currentpage + 1;
+                   }
+                   else if(strstr(s, "prev") || strstr(s, "back"))
+                   {
+                       page = currentpage - 1;
+                   }
+                   else if(strstr(s, "last") || strstr(s, "end"))
+                   {
+                       page = pages[pagepos-1]; //:)
+                   }
+                   else if(strstr(s, "first") || strstr(s, "top"))
+                   {
+                       page = 1;
+                   }
+               }
            }
        }
         break;
            }
        }
         break;
@@ -1773,6 +1776,11 @@ void pdfswf_insertstop()
     insertstoptag = 1;
 }
 
     insertstoptag = 1;
 }
 
+void pdfswf_setversion(int n)
+{
+    flashversion = n;
+}
+
 int closed=0;
 void pdfswf_close()
 {
 int closed=0;
 void pdfswf_close()
 {
index 6db523f..e110d4a 100644 (file)
@@ -19,6 +19,7 @@ void pdfswf_jpegquality(int);
 void pdfswf_performconversion();
 void pdfswf_storeallcharacters();
 void pdfswf_insertstop();
 void pdfswf_performconversion();
 void pdfswf_storeallcharacters();
 void pdfswf_insertstop();
+void pdfswf_setversion(int);
 
 int pdfswf_numpages();
 void pdfswf_convertpage(int page) ;
 
 int pdfswf_numpages();
 void pdfswf_convertpage(int page) ;
index 106147c..70909c4 100644 (file)
@@ -30,13 +30,19 @@ Use Flash 6 (MX) zlib compression.
 Allows pdf2swf to change the draw order of the pdf. This may make the generated
 SWF files a little bit smaller, but it may also cause the images in the pdf to look funny.
 .TP
 Allows pdf2swf to change the draw order of the pdf. This may make the generated
 SWF files a little bit smaller, but it may also cause the images in the pdf to look funny.
 .TP
-\fB\-j\fR, \fB\-\-jpegquality\fR
-Set quality of embedded jpeg pictures. 0 is worst (small), 100 is best (big). (default:85)
+\fB\-j\fR, \fB\-\-jpegquality\fR \fIquality\fR
+Set quality of embedded jpeg pictures to \fIquality\fR. 0 is worst (small), 100 is best (big). (default:85)
 .TP
 \fB\-w\fR, \fB\-\-samewindow\fR
 When converting pdf hyperlinks, don't make the links open a new window when clicked on,
 but open the page they point to in the window the SWF is displayed.
 .TP
 .TP
 \fB\-w\fR, \fB\-\-samewindow\fR
 When converting pdf hyperlinks, don't make the links open a new window when clicked on,
 but open the page they point to in the window the SWF is displayed.
 .TP
+\fB\-t\fR, \fB\-\-stop\fR
+Insert a stop() command in each page. The resulting SWF file will not turn pages automatically.
+.TP
+\fB\-T\fR, \fB\-\-flashversion\fR \fInum\fR
+Set Flash Version in the SWF header to \fInum\fR.
+.TP
 \fB\-F\fR, \fB\-\-fontdir\fR \fIdirectory\fR
 Add \fIdirectory\fR to the font search path.
 .TP
 \fB\-F\fR, \fB\-\-fontdir\fR \fIdirectory\fR
 Add \fIdirectory\fR to the font search path.
 .TP
index 782e138..dcce5f8 100644 (file)
@@ -120,6 +120,14 @@ int args_callback_option(char*name,char*val) {
        pdfswf_insertstop();
        return 0;
     }
        pdfswf_insertstop();
        return 0;
     }
+    else if (!strcmp(name, "T"))
+    {
+       int i = atoi(val);
+       if(!strcasecmp(val, "mx"))
+           i = 6;
+       pdfswf_setversion(i);
+       return 1;
+    }
     else if (!strcmp(name, "f"))
     {
        pdfswf_storeallcharacters();
     else if (!strcmp(name, "f"))
     {
        pdfswf_storeallcharacters();
@@ -237,6 +245,7 @@ struct options_t options[] =
  {"b","defaultviewer"},
  {"l","defaultpreloader"},
  {"t","stop"},
  {"b","defaultviewer"},
  {"l","defaultpreloader"},
  {"t","stop"},
+ {"T","flashversion"},
  {0,0}
 };
 
  {0,0}
 };
 
@@ -279,6 +288,7 @@ void args_callback_usage(char*name)
     printf("-f  --fonts                Store full fonts in SWF. (Don't reduce to used characters)\n");
     printf("-V  --version              Print program version\n");
     printf("-t  --stop                 Insert a \"Stop\" Tag in every frame (don't turn pages automatically)\n");
     printf("-f  --fonts                Store full fonts in SWF. (Don't reduce to used characters)\n");
     printf("-V  --version              Print program version\n");
     printf("-t  --stop                 Insert a \"Stop\" Tag in every frame (don't turn pages automatically)\n");
+    printf("-T  --flashversion=num     Set the flash version in the header to num (default: 4)\n");
 #ifndef SYSTEM_BACKTICKS
     printf("The following might not work because your system call doesn't support command substitution:\n");
 #endif
 #ifndef SYSTEM_BACKTICKS
     printf("The following might not work because your system call doesn't support command substitution:\n");
 #endif
index 27fdced..407907b 100644 (file)
@@ -37,6 +37,7 @@ int jpegquality=85;
 int storeallcharacters=0;
 int enablezlib=0;
 int insertstoptag=0;
 int storeallcharacters=0;
 int enablezlib=0;
 int insertstoptag=0;
+int flashversion=4;
 static int flag_protected = 0;
 
 typedef unsigned char u8;
 static int flag_protected = 0;
 
 typedef unsigned char u8;
@@ -880,7 +881,7 @@ void swfoutput_init(struct swfoutput* obj, char*_filename, int _sizex, int _size
   
   memset(&swf,0x00,sizeof(SWF));
 
   
   memset(&swf,0x00,sizeof(SWF));
 
-  swf.fileVersion    = 4;
+  swf.fileVersion    = flashversion;
   swf.frameRate      = 0x0040; // 1 frame per 4 seconds
   swf.movieSize.xmax = 20*sizex;
   swf.movieSize.ymax = 20*sizey;
   swf.frameRate      = 0x0040; // 1 frame per 4 seconds
   swf.movieSize.xmax = 20*sizex;
   swf.movieSize.ymax = 20*sizey;
@@ -1193,29 +1194,56 @@ void swfoutput_linktopage(struct swfoutput*obj, int page, swfcoord*points)
 
     drawlink(obj, actions, 0, points,0);
 }
 
     drawlink(obj, actions, 0, points,0);
 }
+
+/* Named Links (a.k.a. Acrobatmenu) are used to implement various gadgets
+   of the viewer objects, like subtitles, index elements etc.
+*/
 void swfoutput_namedlink(struct swfoutput*obj, char*name, swfcoord*points)
 {
     ActionTAG *actions1,*actions2;
 void swfoutput_namedlink(struct swfoutput*obj, char*name, swfcoord*points)
 {
     ActionTAG *actions1,*actions2;
+    char*tmp = strdup(name);
+    char mouseover = 1;
 
     if(shapeid>=0)
      endshape();
     if(textid>=0)
      endtext();
 
     if(shapeid>=0)
      endshape();
     if(textid>=0)
      endtext();
-   
-      actions1 = action_PushString(0, "/:subtitle");
-      actions1 = action_PushString(actions1, name);
-      actions1 = action_SetVariable(actions1);
-      actions1 = action_End(actions1);
 
 
-      actions2 = action_PushString(0, "/:subtitle");
-      actions2 = action_PushString(actions2, "");
-      actions2 = action_SetVariable(actions2);
-      actions2 = action_End(actions2);
+    if(!strncmp(tmp, "call:", 5))
+    {
+       char*x = strchr(&tmp[5], ':');
+       if(!x) {
+           actions1 = action_PushInt(0, 0); //number of parameters (0)
+           actions1 = action_PushString(actions1, &tmp[5]); //function name
+           actions1 = action_CallFunction(actions1);
+       } else {
+           *x = 0;
+           actions1 = action_PushString(0, x+1); //parameter
+           actions1 = action_PushInt(actions1, 1); //number of parameters (1)
+           actions1 = action_PushString(actions1, &tmp[5]); //function name
+           actions1 = action_CallFunction(actions1);
+       }
+       actions2 = action_End(0);
+       mouseover = 0;
+    }
+    else
+    {
+       actions1 = action_PushString(0, "/:subtitle");
+       actions1 = action_PushString(actions1, name);
+       actions1 = action_SetVariable(actions1);
+       actions1 = action_End(actions1);
+
+       actions2 = action_PushString(0, "/:subtitle");
+       actions2 = action_PushString(actions2, "");
+       actions2 = action_SetVariable(actions2);
+       actions2 = action_End(actions2);
+    }
 
 
-    drawlink(obj, actions1, actions2, points,1);
+    drawlink(obj, actions1, actions2, points,mouseover);
 
     swf_ActionFree(actions1);
     swf_ActionFree(actions2);
 
     swf_ActionFree(actions1);
     swf_ActionFree(actions2);
+    free(tmp);
 }
 
 static void drawlink(struct swfoutput*obj, ActionTAG*actions1, ActionTAG*actions2, swfcoord*points, char mouseover)
 }
 
 static void drawlink(struct swfoutput*obj, ActionTAG*actions1, ActionTAG*actions2, swfcoord*points, char mouseover)
index 32aaf13..947a828 100644 (file)
@@ -22,6 +22,7 @@ extern int drawonlyshapes; //default:0
 extern int jpegquality; //default:100;
 extern int storeallcharacters; // default:0
 extern int insertstoptag; //default:0
 extern int jpegquality; //default:100;
 extern int storeallcharacters; // default:0
 extern int insertstoptag; //default:0
+extern int flashversion; //default:4
 
 typedef long int twip;
 
 
 typedef long int twip;