X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2Fpdf.cc;h=10cc1906d18c3e599756b4188e6b5fff2b93f51f;hb=bcd63646450a9548aede2025b9c67c0da6a1e05c;hp=00eee0421557d84bfe64c063068b64d1df733fc3;hpb=cbcb36e38ef35e0a1b950fa8cfa3d90e5aeaa19b;p=swftools.git diff --git a/lib/pdf/pdf.cc b/lib/pdf/pdf.cc index 00eee04..10cc190 100644 --- a/lib/pdf/pdf.cc +++ b/lib/pdf/pdf.cc @@ -281,8 +281,14 @@ static void storeDeviceParameter(const char*name, const char*value) } } -static void pdf_set_parameter(const char*name, const char*value) +typedef struct _gfxsource_internal { + int config_bitmap_optimizing; +} gfxsource_internal_t; + +static void pdf_set_parameter(gfxsource_t*src, const char*name, const char*value) +{ + gfxsource_internal_t*i = (gfxsource_internal_t*)src->internal; msg(" setting parameter %s to \"%s\"", name, value); if(!strncmp(name, "fontdir", strlen("fontdir"))) { addGlobalFontDir(value); @@ -309,6 +315,8 @@ static void pdf_set_parameter(const char*name, const char*value) ppm_dpi = atoi(value); sprintf(buf, "%f", (double)ppm_dpi/(double)zoom); storeDeviceParameter("ppmsubpixels", buf); + } else if(!strcmp(name, "poly2bitmap")) { + i->config_bitmap_optimizing = 1; } else if(!strcmp(name, "help")) { printf("\nPDF device global parameters:\n"); printf("fontdir= a directory with additional fonts\n"); @@ -320,8 +328,9 @@ static void pdf_set_parameter(const char*name, const char*value) } } -static gfxdocument_t*pdf_open(const char*filename) +static gfxdocument_t*pdf_open(gfxsource_t*src, const char*filename) { + gfxsource_internal_t*isrc = (gfxsource_internal_t*)src->internal; gfxdocument_t*pdf_doc = (gfxdocument_t*)malloc(sizeof(gfxdocument_t)); memset(pdf_doc, 0, sizeof(gfxdocument_t)); pdf_doc_internal_t*i= (pdf_doc_internal_t*)malloc(sizeof(pdf_doc_internal_t)); @@ -369,32 +378,32 @@ static gfxdocument_t*pdf_open(const char*filename) i->protect = 1; } - InfoOutputDev*io = new InfoOutputDev(i->doc->getXRef()); + i->info = new InfoOutputDev(i->doc->getXRef()); int t; i->pages = (pdf_page_info_t*)malloc(sizeof(pdf_page_info_t)*pdf_doc->num_pages); memset(i->pages,0,sizeof(pdf_page_info_t)*pdf_doc->num_pages); for(t=1;t<=pdf_doc->num_pages;t++) { if(!global_page_range || is_in_range(t, global_page_range)) { - i->doc->displayPage((OutputDev*)io, t, zoom, zoom, /*rotate*/0, /*usemediabox*/true, /*crop*/true, /*doLinks*/(int)1); - i->doc->processLinks((OutputDev*)io, t); - i->pages[t-1].xMin = io->x1; - i->pages[t-1].yMin = io->y1; - i->pages[t-1].xMax = io->x2; - i->pages[t-1].yMax = io->y2; - i->pages[t-1].width = io->x2 - io->x1; - i->pages[t-1].height = io->y2 - io->y1; - i->pages[t-1].number_of_images = io->num_images; - i->pages[t-1].number_of_links = io->num_links; - i->pages[t-1].number_of_fonts = io->num_fonts; + i->doc->displayPage((OutputDev*)i->info, t, zoom, zoom, /*rotate*/0, /*usemediabox*/true, /*crop*/true, /*doLinks*/(int)1); + i->doc->processLinks((OutputDev*)i->info, t); + i->pages[t-1].xMin = i->info->x1; + i->pages[t-1].yMin = i->info->y1; + i->pages[t-1].xMax = i->info->x2; + i->pages[t-1].yMax = i->info->y2; + i->pages[t-1].width = i->info->x2 - i->info->x1; + i->pages[t-1].height = i->info->y2 - i->info->y1; + i->pages[t-1].number_of_images = i->info->num_images; + i->pages[t-1].number_of_links = i->info->num_links; + i->pages[t-1].number_of_fonts = i->info->num_fonts; i->pages[t-1].has_info = 1; } } - if(0) { - BitmapOutputDev*outputDev = new BitmapOutputDev(io, i->doc); + if(isrc->config_bitmap_optimizing) { + BitmapOutputDev*outputDev = new BitmapOutputDev(i->info, i->doc); i->outputDev = (CommonOutputDev*)outputDev; } else { - GFXOutputDev*outputDev = new GFXOutputDev(io, i->doc); + GFXOutputDev*outputDev = new GFXOutputDev(i->info, i->doc); i->outputDev = (CommonOutputDev*)outputDev; } @@ -422,6 +431,8 @@ gfxsource_t*gfxsource_pdf_create() memset(src, 0, sizeof(gfxsource_t)); src->set_parameter = pdf_set_parameter; src->open = pdf_open; + src->internal = malloc(sizeof(gfxsource_internal_t)); + memset(src->internal, 0, sizeof(gfxsource_internal_t)); if(!globalParams) { globalParams = new GFXGlobalParams();