#include "../../config.h"
#include <stdio.h>
#include <stdlib.h>
-#include "gfile.h"
#include "XMLOutputDev.h"
#include "GfxState.h"
+#include "popplercompat.h"
+#ifndef HAVE_POPPLER
+ #include "gfile.h"
+#endif
XMLOutputDev::XMLOutputDev(char*filename)
:TextOutputDev(mktmpname(0), false, false, false)
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, "<page nr=\"%d\" width=\"%.0f\" height=\"%.0f\">\n", pageNum,
state->getPageWidth(), state->getPageHeight());
}
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;i<len;i++) {
TextWord*word = list->get(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)
if(strstr(name, "medi")) bold = gTrue;
if(strstr(name, "serif")) serif = gTrue;
}
-
- fprintf(out, "<t font=\"%s\" y=\"%f\" x=\"%f\" style=\"%s%s%s%s\" fontsize=\"%.0fpt\">",
+
+ double xMin,yMin,xMax,yMax;
+ word->getBBox(&xMin, &yMin, &xMax, &yMax);
+
+ int rot = word->getRotation();
+
+ fprintf(out, "<t font=\"%s\" y=\"%f\" x=\"%f\" bbox=\"%f:%f:%f:%f\" style=\"%s%s%s%s\" fontsize=\"%.0fpt\" color=\"%02x%02x%02x\">",
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) {
}
s++;
}
- if(word->spaceAfter)
+ if(word->getSpaceAfter())
fprintf(out, " ");
}
if(textTag) fprintf(out, "</t>\n");