1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
// -*- C++ -*-
// --------------------------------------------------------------------
// XmlOutputDev.h
// --------------------------------------------------------------------
#ifndef XMLOUTPUTDEV_H
#define XMLOUTPUTDEV_H
#include <stddef.h>
#include "Object.h"
#include "OutputDev.h"
#include "GfxState.h"
class GfxPath;
class GfxFont;
#define PDFTOIPE_VERSION "2013/01/24"
class XmlOutputDev : public OutputDev
{
public:
// Open an XML output file, and write the prolog.
XmlOutputDev(char *fileName, XRef *xrefA, Catalog *catalog,
int firstPage, int lastPage);
// Destructor -- writes the trailer and closes the file.
virtual ~XmlOutputDev();
// Check if file was successfully created.
virtual GBool isOk() { return ok; }
bool hasUnicode() const { return iUnicode; }
void setTextHandling(GBool math, GBool notext, GBool literal,
int mergeLevel, int unicodeLevel);
//---- get info about output device
// Does this device use upside-down coordinates?
// (Upside-down means (0,0) is the top left corner of the page.)
virtual GBool upsideDown() { return gFalse; }
// Does this device use drawChar() or drawString()?
virtual GBool useDrawChar() { return gTrue; }
// Does this device use beginType3Char/endType3Char? Otherwise,
// text in Type 3 fonts will be drawn with drawChar/drawString.
virtual GBool interpretType3Chars() { return gFalse; }
//----- initialization and control
// Start a page.
virtual void startPage(int pageNum, GfxState *state);
// End a page.
virtual void endPage();
//----- update graphics state
virtual void updateTextPos(GfxState *state);
virtual void updateTextShift(GfxState *state, double shift);
//----- path painting
virtual void stroke(GfxState *state);
virtual void fill(GfxState *state);
virtual void eoFill(GfxState *state);
//----- text drawing
virtual void drawChar(GfxState *state, double x, double y,
double dx, double dy,
double originX, double originY,
CharCode code, int nBytes, Unicode *u, int uLen);
//----- image drawing
virtual void drawImage(GfxState *state, Object *ref, Stream *str,
int width, int height, GfxImageColorMap *colorMap,
GBool interpolate, int *maskColors, GBool inlineImg);
protected:
virtual void startDrawingPath();
virtual void startText(GfxState *state, double x, double y);
virtual void finishText();
virtual void writePSUnicode(int ch);
void doPath(GfxState *state);
void writePSChar(int code);
void writePS(const char *s);
void writePSFmt(const char *fmt, ...);
void writeColor(const char *prefix, const GfxRGB &rgb, const char *suffix);
protected:
FILE *outputStream;
int seqPage; // current sequential page number
XRef *xref; // the xref table for this PDF file
GBool ok; // set up ok?
bool iUnicode; // has a Unicode character been used?
bool iIsLiteral; // take latex in text literally
bool iIsMath; // make text objects math formulas
bool iNoText; // discard text objects
bool inText; // inside a text object
int iMergeLevel; // text merge level
int iUnicodeLevel; // unicode handling
};
// --------------------------------------------------------------------
#endif
|