}
}
-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("<verbose> setting parameter %s to \"%s\"", name, value);
if(!strncmp(name, "fontdir", strlen("fontdir"))) {
addGlobalFontDir(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=<dir> a directory with additional fonts\n");
printf("font=<filename> an dditional font filename\n");
printf("pages=<range> the range of pages to convert (example: pages=1-100,210-)\n");
printf("zoom=<dpi> the resultion (default: 72)\n");
- } else {
- storeDeviceParameter(name,value);
- }
+ }
+ storeDeviceParameter(name,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));
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;
}
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();