X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fpdf2swf.c;h=edc9bbc31687e93b5bd35b994151600552fa615f;hb=2fb94db6898305c25e25dae192b3f73e47a062a7;hp=2de2d024b890b7c5899726ab225edd87934eb44d;hpb=10e246c23a8ba1d3183d5390427cab4fb0a11fb8;p=swftools.git diff --git a/src/pdf2swf.c b/src/pdf2swf.c index 2de2d02..edc9bbc 100644 --- a/src/pdf2swf.c +++ b/src/pdf2swf.c @@ -35,7 +35,9 @@ #include "../lib/os.h" #include "../lib/rfxswf.h" #include "../lib/devices/swf.h" -#include "../lib/xpdf/pdf.h" +#include "../lib/devices/arts.h" +#include "../lib/devices/record.h" +#include "../lib/pdf/pdf.h" #include "../lib/log.h" #define SWFDIR concatPaths(getInstallationPath(), "swfs") @@ -54,6 +56,10 @@ static char * viewer = 0; static int xnup = 1; static int ynup = 1; +static int info_only = 0; + +static int flatten = 0; + char* fontpaths[256]; int fontpathpos = 0; @@ -211,6 +217,11 @@ int args_callback_option(char*name,char*val) { driver->set_parameter("opennewwindow", "1"); return 0; } + else if (!strcmp(name, "I")) + { + info_only = 1; + return 0; + } else if (!strcmp(name, "t")) { driver->set_parameter("insertstop", "1"); @@ -235,6 +246,11 @@ int args_callback_option(char*name,char*val) { driver->set_parameter("linksopennewwindow", "0"); return 0; } + else if (!strcmp(name, "G")) + { + flatten = 1; + return 0; + } else if (!strcmp(name, "F")) { char *s = strdup(val); @@ -335,6 +351,7 @@ struct options_t options[] = {"q","quiet"}, {"V","version"}, {"i","ignore"}, + {"I","info"}, {"z","zlib"}, {"s","set"}, {"S","shapes"}, @@ -344,6 +361,7 @@ struct options_t options[] = {"f","fonts"}, {"F","fontdir"}, {"B","viewer"}, + {"G","flatten"}, {"L","preloader"}, {"b","defaultviewer"}, {"l","defaultpreloader"}, @@ -430,6 +448,34 @@ float getRate(char*filename) return swf.frameRate / 256.0; } +void show_info(gfxsource_t*driver, char*filename) +{ + gfxdocument_t* pdf = driver->open(filename); + int pagenr; + FILE*fo=0; + if(!pdf) { + msg(" Couldn't open %s", filename); + exit(1); + } + if(outputname) { + fo = fopen(outputname, "wb"); + if(!fo) { + perror(outputname);exit(1);; + } + } else { + fo = stdout; + } + + for(pagenr = 1; pagenr <= pdf->num_pages; pagenr++) + { + gfxpage_t*page = pdf->getpage(pdf,pagenr); + if(is_in_range(pagenr, pagerange)) { + fprintf(fo, "page=%d width=%.2f height=%.2f\n", pagenr, page->width, page->height); + } + } + pdf->destroy(pdf); +} + int main(int argn, char *argv[]) { int ret; @@ -444,8 +490,6 @@ int main(int argn, char *argv[]) initLog(0,-1,0,0,-1,loglevel); - driver = gfxsource_pdf_create(); - #if defined(WIN32) && defined(HAVE_STAT) && defined(HAVE_SYS_STAT_H) if(installPath) { fontdir = concatPaths(installPath, "fonts"); @@ -468,14 +512,21 @@ int main(int argn, char *argv[]) srand(time(0)); #endif #endif - processargs(argn, argv); + driver = gfxsource_pdf_create(); + processargs(argn, argv); + if(!filename) { fprintf(stderr, "Please specify an input file\n"); exit(1); } + if(info_only) { + show_info(driver, filename); + return 0; + } + if(!outputname) { if(filename) { @@ -493,6 +544,9 @@ int main(int argn, char *argv[]) // test if the page range is o.k. is_in_range(0x7fffffff, pagerange); + if(pagerange) + driver->set_parameter("pages", pagerange); + if (!filename) { args_callback_usage(argv[0]); exit(0); @@ -518,9 +572,16 @@ int main(int argn, char *argv[]) exit(1); } - gfxdevice_t swf; + gfxdevice_t swf,wrap; gfxdevice_swf_init(&swf); - //gfxdevice_render_init(&swf); + gfxdevice_t*out; + + if(flatten) { + gfxdevice_removeclippings_init(&wrap, &swf); + out = &wrap; + } else { + out = &swf; + } struct mypage_t { int x; @@ -572,9 +633,9 @@ int main(int argn, char *argv[]) int t = y*xnup + x; if(pages[t].page->width > xmax[x]) - xmax[x] = pages[t].page->width; + xmax[x] = (int)pages[t].page->width; if(pages[t].page->height > ymax[y]) - ymax[y] = pages[t].page->height; + ymax[y] = (int)pages[t].page->height; } for(x=0;xstartpage(out,clip_x2 - clip_x1, clip_y2 - clip_y1); } else { - swf.startpage(&swf,width,height); + out->startpage(out,width,height); } for(t=0;t Render (%d,%d) move:%d/%d\n", (int)(pages[t].page->width + xpos), (int)(pages[t].page->height + ypos), xpos, ypos); - pages[t].page->rendersection(pages[t].page, &swf, custom_move? move_x : xpos, + pages[t].page->rendersection(pages[t].page, out, custom_move? move_x : xpos, custom_move? move_y : ypos, custom_clip? clip_x1 : 0 + xpos, custom_clip? clip_y1 : 0 + ypos, custom_clip? clip_x2 : pages[t].page->width + xpos, custom_clip? clip_y2 : pages[t].page->height + ypos); } - swf.endpage(&swf); + out->endpage(out); for(t=0;tdestroy(pages[t].page); } @@ -612,7 +673,8 @@ int main(int argn, char *argv[]) } } - gfxresult_t*result = swf.finish(&swf); + gfxresult_t*result = out->finish(out); + if(result->save(result, outputname) < 0) { exit(1); } @@ -626,43 +688,25 @@ int main(int argn, char *argv[]) pdf->destroy(pdf); char*zip = ""; - if(zlib) + if(zlib) { zip = "-z"; -#undef SYSTEM_BACKTICKS - if(viewer && !preloader) { -#ifdef SYSTEM_BACKTICKS - systemf("swfcombine %s `swfdump -XY \"%s\"` \"%s\" viewport=\"%s\" -o \"%s\"",zip, - viewer, outputname, outputname); -#else systemf("swfcombine %s -X %d -Y %d \"%s\" viewport=\"%s\" -o \"%s\"",zip,width,height, viewer, outputname, outputname); -#endif if(!system_quiet) printf("\n"); } if(preloader && !viewer) { msg(" --preloader option without --viewer option doesn't make very much sense."); -#ifdef SYSTEM_BACKTICKS - ret = systemf("swfcombine %s `swfdump -r \"%s\"` %s/PreLoaderTemplate.swf loader=\"%s\" movie=\"%s\" -o \"%s\"",zip, - preloader, SWFDIR, preloader, outputname, outputname); -#else ret = systemf("swfcombine %s -Y %d -X %d %s/PreLoaderTemplate.swf loader=\"%s\" movie=\"%s\" -o \"%s\"",zip,width,height, SWFDIR, preloader, outputname, outputname); -#endif if(!system_quiet) printf("\n"); } if(preloader && viewer) { systemf("swfcombine \"%s\" viewport=%s -o __tmp__.swf", - viewer, outputname, outputname); -#ifdef SYSTEM_BACKTICKS - systemf("swfcombine %s `swfdump -XY \"%s\"` `swfdump -r \"%s\"` %s/PreLoaderTemplate.swf loader=%s movie=__tmp__.swf -o \"%s\"",zip, - outputname, preloader, SWFDIR, preloader, outputname); -#else - /* TODO: read out rate */ + viewer, outputname); systemf("swfcombine %s -X %d -Y %d -r %f %s/PreLoaderTemplate.swf loader=%s movie=__tmp__.swf -o \"%s\"",zip,width,height, - getRate(preloader), preloader, SWFDIR, preloader, outputname); -#endif + getRate(preloader), SWFDIR, preloader, outputname); systemf("rm __tmp__.swf"); }