From ae7da9a45610faa2d6c00b745c5e653f9e1aad3f Mon Sep 17 00:00:00 2001 From: kramm Date: Sun, 26 Nov 2006 19:42:42 +0000 Subject: [PATCH] added "pages" parameter --- lib/pdf/pdf.cc | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/lib/pdf/pdf.cc b/lib/pdf/pdf.cc index a79f143..51e380d 100644 --- a/lib/pdf/pdf.cc +++ b/lib/pdf/pdf.cc @@ -6,6 +6,8 @@ #include "GFXOutputDev.h" #include "../mem.h" #include "pdf.h" +#define NO_ARGPARSER +#include "../args.h" static parameter_t* device_config = 0; static parameter_t* device_config_next = 0; @@ -15,6 +17,8 @@ int ppm_dpi = 0; static double zoom = 72; /* xpdf: 86 */ +static char* global_page_range = 0; + typedef struct _pdf_page_info { int xMin, yMin, xMax, yMax; @@ -22,6 +26,7 @@ typedef struct _pdf_page_info int number_of_images; int number_of_links; int number_of_fonts; + char has_info; } pdf_page_info_t; typedef struct _pdf_doc_internal @@ -69,6 +74,11 @@ void render2(gfxpage_t*page, gfxdevice_t*output) return; } + if(!pi->pages[page->nr-1].has_info) { + msg(" pdf_page_render: page %d was previously set as not-to-render via the \"pages\" option", page->nr); + return; + } + if(pi->protect) { gfxdevice_t*dev = pi->outputDev->device; dev->setparameter(dev, "protect", "1"); @@ -114,6 +124,11 @@ void pdf_doc_destroy(gfxdocument_t*gfx) free(gfx->internal);gfx->internal=0; free(gfx);gfx=0; + + if(global_page_range) { + free(global_page_range); + global_page_range = 0; + } } void pdf_doc_set_parameter(gfxdocument_t*gfx, char*name, char*value) @@ -172,6 +187,8 @@ void pdf_set_parameter(char*name, char*value) msg(" setting parameter %s to \"%s\"", name, value); if(!strncmp(name, "fontdir", strlen("fontdir"))) { addGlobalFontDir(value); + } else if(!strcmp(name, "pages")) { + global_page_range = strdup(value); } else if(!strncmp(name, "font", strlen("font"))) { addGlobalFont(value); } else if(!strncmp(name, "languagedir", strlen("languagedir"))) { @@ -322,17 +339,21 @@ gfxdocument_t*pdf_open(char*filename) InfoOutputDev*io = new InfoOutputDev(); 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++) { - i->doc->displayPage((OutputDev*)io, t, zoom, zoom, /*rotate*/0, /*usemediabox*/true, /*crop*/true, /*doLinks*/(int)1); - 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; + 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->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->pages[t-1].has_info = 1; + } } i->info = io; i->outputDev = new GFXOutputDev(device_config); -- 1.7.10.4