#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"
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;
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) {
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 --;
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"},
{"G", "flatten"},
{"I", "info"},
{"Q", "maxtime"},
+{"X", "width"},
+{"Y", "height"},
{0,0}
};
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");
}
-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) {
char t1searchpath[1024];
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);
exit(1);
}
- if(info_only) {
- show_info(driver, filename);
- return 0;
- }
-
- if(!outputname)
- {
- if(filename) {
- outputname = stripFilename(filename, ".swf");
- msg("<notice> 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("<notice> 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;t<fontpathpos;t++) {
driver->set_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;
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");
frame++;
}
}
+ if(pagerange && !pagenum && frame==1) {
+ fprintf(stderr, "No pages in range %s", pagerange);
+ exit(1);
+ }
pagenum = 0;
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;
}
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) {