X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fpdf%2FXMLOutputDev.cc;h=a5fd653f6eff0359ea0f1f61968a146bf168c394;hb=fabf01ae05897e5a9ec0e357324503f582320c32;hp=d6f1d2d5c1f186b4cae85a80f1352c750b209c67;hpb=753c672c453d65155923a539472414a26ea4e445;p=swftools.git diff --git a/lib/pdf/XMLOutputDev.cc b/lib/pdf/XMLOutputDev.cc index d6f1d2d..a5fd653 100644 --- a/lib/pdf/XMLOutputDev.cc +++ b/lib/pdf/XMLOutputDev.cc @@ -19,9 +19,11 @@ #include "../../config.h" #include #include -#include "gfile.h" #include "XMLOutputDev.h" #include "GfxState.h" +#ifndef HAVE_POPPLER + #include "gfile.h" +#endif XMLOutputDev::XMLOutputDev(char*filename) :TextOutputDev(mktmpname(0), false, false, false) @@ -41,9 +43,9 @@ XMLOutputDev::~XMLOutputDev() fclose(out); } -void XMLOutputDev::startPage(int pageNum, GfxState *state, double x1,double y1,double x2,double y2) +void XMLOutputDev::startPage(int pageNum, GfxState *state) { - TextOutputDev::startPage(pageNum, state, x1, y1, x2, y2); + TextOutputDev::startPage(pageNum, state); fprintf(out, "\n", pageNum, state->getPageWidth(), state->getPageHeight()); } @@ -59,15 +61,30 @@ void XMLOutputDev::endPage() GString*fontname = new GString(); double fontsize = -99999; double base = -9999; + double color_r = -1; + double color_g = -1; + double color_b = -1; for(i=0;iget(i); GString*newfont = word->getFontName(); double newsize = word->getFontSize(); +#ifdef HAVE_POPPLER + double newbase = word->getBaseline(); +#else double newbase = word->base; +#endif + double newcolor_r; + double newcolor_g; + double newcolor_b; + word->getColor(&newcolor_r, &newcolor_g, &newcolor_b); if((newfont && newfont->cmp(fontname)) || newsize != fontsize || - newbase != base) + newbase != base || + newcolor_r != color_r || + newcolor_g != color_g || + newcolor_b != color_b + ) { TextFontInfo*info = word->getFontInfo(); if(textTag) @@ -93,19 +110,35 @@ void XMLOutputDev::endPage() if(strstr(name, "medi")) bold = gTrue; if(strstr(name, "serif")) serif = gTrue; } - - fprintf(out, "", + + double xMin,yMin,xMax,yMax; + word->getBBox(&xMin, &yMin, &xMax, &yMax); + + int rot = word->getRotation(); + + fprintf(out, "", name, newbase, - (word->rot&1)?word->yMin:word->xMin, + (rot&1)?yMin:xMin, + (rot&1)?yMin:xMin, + (rot&1)?xMin:yMin, + (rot&1)?yMax:xMax, + (rot&1)?xMax:yMax, info->isFixedWidth()?"fixed;":"", serif?"serif;":"", italic?"italic;":"", bold?"bold;":"", - newsize); + newsize, + ((int)(newcolor_r*255))&0xff, + ((int)(newcolor_g*255))&0xff, + ((int)(newcolor_b*255))&0xff + ); fontname = newfont->copy(); fontsize = newsize; base = newbase; + color_r = newcolor_r; + color_g = newcolor_g; + color_b = newcolor_b; } char*s = word->getText()->getCString(); while(*s) { @@ -117,7 +150,7 @@ void XMLOutputDev::endPage() } s++; } - if(word->spaceAfter) + if(word->getSpaceAfter()) fprintf(out, " "); } if(textTag) fprintf(out, "\n");