#include "../../swftools/lib/gfxsource.h"
#include "../../swftools/lib/gfxdevice.h"
#include "../../swftools/lib/gfxpoly.h"
+#include "../../swftools/lib/devices/swf.h"
+#include "../../swftools/lib/devices/text.h"
+#include "../../swftools/lib/devices/render.h"
#include "../../swftools/lib/devices/bbox.h"
#include "../../swftools/lib/devices/lrf.h"
#include "../../swftools/lib/devices/ocr.h"
#include "../../swftools/lib/pdf/pdf.h"
#include "../../swftools/lib/log.h"
-gfxsource_t*driver;
+static gfxsource_t*driver = 0;
static char * outputname = 0;
static int loglevel = 3;
static char * pagerange = 0;
static char * filename = 0;
+static const char * format = "ocr";
int args_callback_option(char*name,char*val) {
if (!strcmp(name, "o"))
setConsoleLogging(loglevel);
return 0;
}
+ else if (!strcmp(name, "f"))
+ {
+ format = val;
+ return 1;
+ }
else if (!strcmp(name, "q"))
{
loglevel --;
}
else if (!strcmp(name, "s"))
{
- const char*s = strdup(val);
+ if(!driver) {
+ fprintf(stderr, "Specify input file before -s\n");
+ exit(1);
+ }
+ char*s = strdup(val);
char*c = strchr(s, '=');
if(c && *c && c[1]) {
*c = 0;
c++;
driver->set_parameter(driver, s,c);
- }
- else
+ } else {
driver->set_parameter(driver, s,"1");
+ }
+ free(s);
return 1;
}
else if (!strcmp(name, "V"))
}
int args_callback_command(char*name, char*val) {
- if (!filename)
+ if (!filename) {
+
filename = name;
- else {
+
+ if(strstr(filename, ".pdf") || strstr(filename, ".PDF")) {
+ msg("<notice> Treating file as PDF");
+ driver = gfxsource_pdf_create();
+ } else if(strstr(filename, ".swf") || strstr(filename, ".SWF")) {
+ msg("<notice> Treating file as SWF");
+ driver = gfxsource_swf_create();
+ } else if(strstr(filename, ".jpg") || strstr(filename, ".JPG") ||
+ strstr(filename, ".png") || strstr(filename, ".PNG")) {
+ msg("<notice> Treating file as Image");
+ driver = gfxsource_image_create();
+ }
+ } else {
if(outputname)
{
fprintf(stderr, "Error: Do you want the output to go to %s or to %s?",
processargs(argn, argv);
initLog(0,-1,0,0,-1,loglevel);
- gfxsource_t*source = 0;
-
if(!filename) {
fprintf(stderr, "Please specify an input file\n");
exit(1);
}
- if(strstr(filename, ".pdf") || strstr(filename, ".PDF")) {
- msg("<notice> Treating file as PDF");
- source = gfxsource_pdf_create();
- } else if(strstr(filename, ".swf") || strstr(filename, ".SWF")) {
- msg("<notice> Treating file as SWF");
- source = gfxsource_swf_create();
- } else if(strstr(filename, ".jpg") || strstr(filename, ".JPG") ||
- strstr(filename, ".png") || strstr(filename, ".PNG")) {
- msg("<notice> Treating file as Image");
- source = gfxsource_image_create();
- }
-
if(!outputname)
{
if(filename) {
fprintf(stderr, "Please use -o to specify an output file\n");
exit(1);
}
- printf("%s\n", filename);
is_in_range(0x7fffffff, pagerange);
if(pagerange)
- source->set_parameter(source, "pages", pagerange);
+ driver->set_parameter(driver, "pages", pagerange);
if(!filename) {
args_callback_usage(argv[0]);
exit(0);
}
- gfxdocument_t* doc = source->open(source, filename);
+ gfxdocument_t* doc = driver->open(driver, filename);
if(!doc) {
msg("<error> Couldn't open %s", filename);
exit(1);
}
- gfxdevice_t lrf;
- gfxdevice_lrf_init(&lrf);
+ gfxresult_t*result = 0;
+ if(!strcmp(format, "lrf")) {
+ gfxdevice_t lrf;
+ gfxdevice_lrf_init(&lrf);
- gfxdevice_t rescale;
- gfxdevice_rescale_init(&rescale, &lrf, 592, 732, 0);
+ gfxdevice_t rescale;
+ gfxdevice_rescale_init(&rescale, &lrf, 592, 732, 0);
- gfxdevice_t*out = &rescale;
- out->setparameter(out, "keepratio", "1");
- out->setparameter(out, "pagepattern", outputname);
+ gfxdevice_t*out = &rescale;
+ out->setparameter(out, "keepratio", "1");
+ out->setparameter(out, "pagepattern", outputname);
- gfxdevice_t bbox2,*bbox=&bbox2;
- gfxdevice_bbox_init(bbox);
- bbox->setparameter(bbox, "graphics", "0");
+ gfxdevice_t bbox2,*bbox=&bbox2;
+ gfxdevice_bbox_init(bbox);
+ bbox->setparameter(bbox, "graphics", "0");
- int pagenr;
+ int pagenr;
- for(pagenr = 1; pagenr <= doc->num_pages; pagenr++)
- {
- if(is_in_range(pagenr, pagerange)) {
- gfxpage_t* page = doc->getpage(doc, pagenr);
- bbox->startpage(bbox,-1,-1);
- page->render(page, bbox);
- gfxbbox_t b = gfxdevice_bbox_getbbox(bbox);
+ for(pagenr = 1; pagenr <= doc->num_pages; pagenr++)
+ {
+ if(is_in_range(pagenr, pagerange)) {
+ gfxpage_t* page = doc->getpage(doc, pagenr);
+ bbox->startpage(bbox,-1,-1);
+ page->render(page, bbox);
+ gfxbbox_t b = gfxdevice_bbox_getbbox(bbox);
- out->startpage(out, b.xmax-b.xmin, b.ymax-b.ymin);
- page->rendersection(page, out, -b.xmin, -b.ymin, 0,0,b.xmax-b.xmin,b.ymax-b.ymin);
- out->endpage(out);
+ out->startpage(out, b.xmax-b.xmin, b.ymax-b.ymin);
+ page->rendersection(page, out, -b.xmin, -b.ymin, 0,0,b.xmax-b.xmin,b.ymax-b.ymin);
+ out->endpage(out);
- page->destroy(page);
- }
- }
+ page->destroy(page);
+ }
+ }
+ result = out->finish(out);
+ } else {
+ gfxdevice_t _out,*out=&_out;
+ if(!strcmp(format, "ocr")) {
+ gfxdevice_ocr_init(out);
+ } if(!strcmp(format, "swf")) {
+ gfxdevice_swf_init(out);
+ } if(!strcmp(format, "img")) {
+ gfxdevice_render_init(out);
+ } if(!strcmp(format, "txt")) {
+ gfxdevice_text_init(out);
+ }
- gfxresult_t*result = out->finish(out);
+ int pagenr;
+ for(pagenr = 1; pagenr <= doc->num_pages; pagenr++)
+ {
+ if(is_in_range(pagenr, pagerange)) {
+ gfxpage_t* page = doc->getpage(doc, pagenr);
+ out->startpage(out, page->width, page->height);
+ page->render(page, out);
+ out->endpage(out);
+ page->destroy(page);
+ }
+ }
+ result = out->finish(out);
+ }
if(result) {
if(result->save(result, outputname) < 0) {
doc->destroy(doc);
+ driver->destroy(driver);
return 0;
}