if page range is given and % filename syntax is used, name files according to page...
[swftools.git] / src / pdf2swf.c
index 4bf18df..1c476c1 100644 (file)
@@ -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"
 
@@ -50,6 +51,8 @@
 static gfxsource_t*driver = 0;
 static gfxdevice_t*out = 0;
 
+static int maxwidth=0, maxheight=0;
+
 static char * outputname = 0;
 static int loglevel = 3;
 static char * pagerange = 0;
@@ -181,6 +184,16 @@ int args_callback_option(char*name,char*val) {
         ynup = 3;
        return 0;
     }
+    else if (!strcmp(name, "X"))
+    {
+        maxwidth = atoi(val);
+       return 1;
+    }
+    else if (!strcmp(name, "Y"))
+    {
+        maxheight = atoi(val);
+       return 1;
+    }
     else if (!strcmp(name, "q"))
     {
        loglevel --;
@@ -468,6 +481,8 @@ static struct options_t options[] = {
 {"G", "flatten"},
 {"I", "info"},
 {"Q", "maxtime"},
+{"X", "width"},
+{"Y", "height"},
 {0,0}
 };
 
@@ -572,15 +587,24 @@ void show_info(gfxsource_t*driver, char*filename)
 }
 
 
-static gfxdevice_t swf,wrap;
+static gfxdevice_t swf,wrap,rescale;
 gfxdevice_t*create_output_device()
 {
     gfxdevice_swf_init(&swf);
-    gfxdevice_removeclippings_init(&wrap, &swf);
-    out = &wrap;
-    if(!flatten) {
-       out = &swf;
+
+    /* set up filter chain */
+       
+    out = &swf;
+    if(flatten) {
+        gfxdevice_removeclippings_init(&wrap, &swf);
+        out = &wrap;
     }
+
+    if(maxwidth || maxheight) {
+        gfxdevice_rescale_init(&rescale, out, maxwidth, maxheight, 0);
+        out = &rescale;
+    }
+
     /* pass global parameters to output device */
     parameter_t*p = device_config;
     while(p) {
@@ -600,7 +624,7 @@ int main(int argn, char *argv[])
     int nup_pos = 0;
     int x,y;
     char* installPath = getInstallationPath();
-    char one_file_per_page = 0;
+    int one_file_per_page = 0;
     
     initLog(0,-1,0,0,-1,loglevel);
 
@@ -679,11 +703,11 @@ int main(int argn, char *argv[])
     if((u = strchr(outputname, '%'))) {
        if(strchr(u+1, '%') || 
           strchr(outputname, '%')!=u)  {
-           msg("<error> only one %%d allowed in filename\n");
+           msg("<error> only one %% allowed in filename\n");
            return 1;
        }
        if(preloader || viewer) {
-           msg("<error> -b/-l/-B/-L not supported together with %%d in filename\n");
+           msg("<error> -b/-l/-B/-L not supported together with %% in filename\n");
            return 1;
        }
        msg("<notice> outputting one file per page");
@@ -801,7 +825,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;
                }