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) {
-             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;
@@ -1773,6 +1776,11 @@ void pdfswf_insertstop()
     insertstoptag = 1;
 }
 
+void pdfswf_setversion(int n)
+{
+    flashversion = n;
+}
+
 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_setversion(int);
 
 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
-\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
+\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
index 782e138..dcce5f8 100644 (file)
@@ -120,6 +120,14 @@ int args_callback_option(char*name,char*val) {
        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();
@@ -237,6 +245,7 @@ struct options_t options[] =
  {"b","defaultviewer"},
  {"l","defaultpreloader"},
  {"t","stop"},
+ {"T","flashversion"},
  {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("-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
index 27fdced..407907b 100644 (file)
@@ -37,6 +37,7 @@ int jpegquality=85;
 int storeallcharacters=0;
 int enablezlib=0;
 int insertstoptag=0;
+int flashversion=4;
 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));
 
-  swf.fileVersion    = 4;
+  swf.fileVersion    = flashversion;
   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);
 }
+
+/* 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;
+    char*tmp = strdup(name);
+    char mouseover = 1;
 
     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);
+    free(tmp);
 }
 
 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 flashversion; //default:4
 
 typedef long int twip;