From 8fd13edea1571f100db08fc5c19d08808a6ead1b Mon Sep 17 00:00:00 2001 From: kramm Date: Sat, 17 Aug 2002 09:27:27 +0000 Subject: [PATCH] implemented viewer gadgets and --flashversion. --- pdf2swf/SWFOutputDev.cc | 44 ++++++++++++++++++++++++----------------- pdf2swf/SWFOutputDev.h | 1 + pdf2swf/pdf2swf.1 | 10 ++++++++-- pdf2swf/pdf2swf.cc | 10 ++++++++++ pdf2swf/swfoutput.cc | 50 ++++++++++++++++++++++++++++++++++++----------- pdf2swf/swfoutput.h | 1 + 6 files changed, 85 insertions(+), 31 deletions(-) diff --git a/pdf2swf/SWFOutputDev.cc b/pdf2swf/SWFOutputDev.cc index fc295eb..070e34a 100644 --- a/pdf2swf/SWFOutputDev.cc +++ b/pdf2swf/SWFOutputDev.cc @@ -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() { diff --git a/pdf2swf/SWFOutputDev.h b/pdf2swf/SWFOutputDev.h index 6db523f..e110d4a 100644 --- a/pdf2swf/SWFOutputDev.h +++ b/pdf2swf/SWFOutputDev.h @@ -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) ; diff --git a/pdf2swf/pdf2swf.1 b/pdf2swf/pdf2swf.1 index 106147c..70909c4 100644 --- a/pdf2swf/pdf2swf.1 +++ b/pdf2swf/pdf2swf.1 @@ -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 diff --git a/pdf2swf/pdf2swf.cc b/pdf2swf/pdf2swf.cc index 782e138..dcce5f8 100644 --- a/pdf2swf/pdf2swf.cc +++ b/pdf2swf/pdf2swf.cc @@ -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 diff --git a/pdf2swf/swfoutput.cc b/pdf2swf/swfoutput.cc index 27fdced..407907b 100644 --- a/pdf2swf/swfoutput.cc +++ b/pdf2swf/swfoutput.cc @@ -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) diff --git a/pdf2swf/swfoutput.h b/pdf2swf/swfoutput.h index 32aaf13..947a828 100644 --- a/pdf2swf/swfoutput.h +++ b/pdf2swf/swfoutput.h @@ -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; -- 1.7.10.4