X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fpdf2swf.c;h=c50a3de3c8e0ece3997f150dcef00e02f8f440b9;hb=a61b92b4ac72cd15ee0f3165f2e7a2f5ac00f156;hp=8c4d8a5d6674eb7f68fc46793c43d8c2c1325b40;hpb=f9b025bc6ebfa93d38ea20ef69e0e65d7f2f257b;p=swftools.git diff --git a/src/pdf2swf.c b/src/pdf2swf.c index 8c4d8a5..c50a3de 100644 --- a/src/pdf2swf.c +++ b/src/pdf2swf.c @@ -42,6 +42,7 @@ #include "../lib/devices/swf.h" #include "../lib/devices/polyops.h" #include "../lib/devices/record.h" +#include "../lib/devices/rescale.h" #include "../lib/pdf/pdf.h" #include "../lib/log.h" @@ -87,7 +88,7 @@ int systemf(const char* format, ...) int ret; va_list arglist; va_start(arglist, format); - vsprintf(buf, format, arglist); + vsnprintf(buf, sizeof(buf)-1, format, arglist); va_end(arglist); if(!system_quiet) { @@ -185,12 +186,12 @@ int args_callback_option(char*name,char*val) { } else if (!strcmp(name, "X")) { - maxwidth = atoi(value); + maxwidth = atoi(val); return 1; } else if (!strcmp(name, "Y")) { - maxheight = atoi(value); + maxheight = atoi(val); return 1; } else if (!strcmp(name, "q")) @@ -438,23 +439,6 @@ int args_callback_option(char*name,char*val) { return 0; } -/*struct docoptions_t options[] = -{{"o","output","filename::Specify output file"}, - {"V","version","Print program version"}, - {"i","ignore","Ignore draw order (makes the SWF file smaller, but may produce graphic errors)"}, - {"z","zlib","Use Flash 6 (MX) zlib compression (Needs at least Flash 6 Plugin to play)"}, - {"s","shapes","Don't use SWF Fonts, but store everything as shape"}, - {"j","jpegquality","Set quality of embedded jpeg pictures (default: 85)"}, - {"p","pages","Convert only pages in range. (E.g. 3-85)"}, - {"w","samewindow","Don't open a new browser window for links in the SWF"}, - {"f","fonts","Stroe full fonts in SWF. (Don't reduce to used characters)"}, - {"F","fontpath","path::Add directory to font search path"}, - {"B","viewer","name::Link viewer \"name\" to the pdf"}, - {"L","preloader","file.swf::Link preloader \"file.swf\" to the pdf"}, - {"b","defaultviewer","Link default viewer to the pdf"}, - {"l","defaultpreloader","Link default preloader to the pdf"} - {0,0} -};*/ static struct options_t options[] = { {"h", "help"}, {"V", "version"}, @@ -511,7 +495,7 @@ void args_callback_usage(char *name) printf("\n"); printf("-h , --help Print short help message and exit\n"); printf("-V , --version Print version info and exit\n"); - printf("-o , --output file.swf Direct output to file.swf. If file.swf contains '%d' (file%d.swf), then each page \n"); + printf("-o , --output file.swf Direct output to file.swf. If file.swf contains '%%' (file%%.swf), then each page goes to a seperate file.\n"); printf("-p , --pages range Convert only pages in range with range e.g. 1-20 or 1,4,6,9-11 or\n"); printf("-P , --password password Use password for deciphering the pdf.\n"); printf("-v , --verbose Be verbose. Use more than one -v for greater effect.\n"); @@ -600,7 +584,7 @@ gfxdevice_t*create_output_device() } if(maxwidth || maxheight) { - gfxdevice_rescale_init(&rescale, out, maxwidth, maxheight); + gfxdevice_rescale_init(&rescale, out, maxwidth, maxheight, 0); out = &rescale; } @@ -622,7 +606,6 @@ int main(int argn, char *argv[]) char t1searchpath[1024]; int nup_pos = 0; int x,y; - char* installPath = getInstallationPath(); int one_file_per_page = 0; initLog(0,-1,0,0,-1,loglevel); @@ -657,45 +640,47 @@ int main(int argn, char *argv[]) exit(1); } - if(info_only) { - show_info(driver, filename); - return 0; - } - - if(!outputname) - { - if(filename) { - outputname = stripFilename(filename, ".swf"); - msg(" Output filename not given. Writing to %s", outputname); - } - } - - if(!outputname) - { - fprintf(stderr, "Please use -o to specify an output file\n"); - exit(1); + if (!info_only) { + if(!outputname) + { + if(filename) { + outputname = stripFilename(filename, ".swf"); + msg(" Output filename not given. Writing to %s", outputname); + } + } + + if(!outputname) + { + fprintf(stderr, "Please use -o to specify an output file\n"); + exit(1); + } } // test if the page range is o.k. is_in_range(0x7fffffff, pagerange); - if(pagerange) - driver->set_parameter(driver, "pages", pagerange); - if (!filename) { args_callback_usage(argv[0]); exit(0); } + + char fullname[256]; + if(password && *password) { + sprintf(fullname, "%s|%s", filename, password); + filename = fullname; + } + + if(pagerange) + driver->set_parameter(driver, "pages", pagerange); /* add fonts */ for(t=0;tset_parameter(driver, "fontdir", fontpaths[t]); } - char fullname[256]; - if(password && *password) { - sprintf(fullname, "%s|%s", filename, password); - filename = fullname; + if(info_only) { + show_info(driver, filename); + return 0; } char*u = 0; @@ -755,10 +740,16 @@ int main(int argn, char *argv[]) frame++; } } + if(pagerange && !pagenum && frame==1) { + fprintf(stderr, "No pages in range %s", pagerange); + exit(1); + } pagenum = 0; gfxdevice_t*out = create_output_device();; + pdf->prepare(pdf, out); + for(pagenr = 1; pagenr <= pdf->num_pages; pagenr++) { if(is_in_range(pagenr, pagerange)) { @@ -824,7 +815,7 @@ int main(int argn, char *argv[]) if(one_file_per_page) { gfxresult_t*result = out->finish(out);out=0; char buf[1024]; - sprintf(buf, outputname, one_file_per_page++); + sprintf(buf, outputname, pagenr); if(result->save(result, buf) < 0) { return 1; } @@ -845,8 +836,8 @@ int main(int argn, char *argv[]) if(result->save(result, outputname) < 0) { exit(1); } - int width = (int)result->get(result, "width"); - int height = (int)result->get(result, "height"); + int width = (int)(ptroff_t)result->get(result, "width"); + int height = (int)(ptroff_t)result->get(result, "height"); result->destroy(result);result=0; if(preloader || viewer) {