diff options
Diffstat (limited to 'xpdf/AcroForm.h')
| -rw-r--r-- | xpdf/AcroForm.h | 169 | 
1 files changed, 169 insertions, 0 deletions
| diff --git a/xpdf/AcroForm.h b/xpdf/AcroForm.h new file mode 100644 index 0000000..7678d46 --- /dev/null +++ b/xpdf/AcroForm.h @@ -0,0 +1,169 @@ +//======================================================================== +// +// AcroForm.h +// +// Copyright 2012 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef ACROFORM_H +#define ACROFORM_H + +#include <aconf.h> + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +class TextString; +class Gfx; +class GfxFont; +class GfxFontDict; +class AcroFormField; +class XFAScanner; +class XFAField; +class XFAFieldBarcodeInfo; + +//------------------------------------------------------------------------ + +class AcroForm { +public: + +  static AcroForm *load(PDFDoc *docA, Catalog *catalog, Object *acroFormObjA); + +  ~AcroForm(); + +  const char *getType(); + +  void draw(int pageNum, Gfx *gfx, GBool printing); + +  int getNumFields(); +  AcroFormField *getField(int idx); +  AcroFormField *findField(int pg, double x, double y); +  int findFieldIdx(int pg, double x, double y); + +private: + +  AcroForm(PDFDoc *docA, Object *acroFormObjA); +  void buildAnnotPageList(Catalog *catalog); +  int lookupAnnotPage(Object *annotRef); +  void scanField(Object *fieldRef); + +  PDFDoc *doc; +  Object acroFormObj; +  GBool needAppearances; +  GList *annotPages;		// [AcroFormAnnotPage] +  GList *fields;		// [AcroFormField] +  XFAScanner *xfaScanner; +  GBool isStaticXFA; + +  friend class AcroFormField; +}; + +//------------------------------------------------------------------------ + +enum AcroFormFieldType { +  acroFormFieldPushbutton, +  acroFormFieldRadioButton, +  acroFormFieldCheckbox, +  acroFormFieldFileSelect, +  acroFormFieldMultilineText, +  acroFormFieldText, +  acroFormFieldBarcode, +  acroFormFieldComboBox, +  acroFormFieldListBox, +  acroFormFieldSignature +}; + +class AcroFormField { +public: + +  static AcroFormField *load(AcroForm *acroFormA, Object *fieldRefA); + +  ~AcroFormField(); + +  int getPageNum(); +  const char *getType(); +  Unicode *getName(int *length); +  Unicode *getValue(int *length); +  void getBBox(double *llx, double *lly, double *urx, double *ury); +  void getFont(Ref *fontID, double *fontSize); +  void getColor(double *red, double *green, double *blue); +  int getMaxLen(); + +  Object *getResources(Object *res); + +  AcroFormFieldType getAcroFormFieldType() { return type; } +  Object *getFieldRef(Object *ref); +  Object *getValueObj(Object *val); +  Object *getParentRef(Object *parent); +  GBool getTypeFromParent() { return typeFromParent; } + +private: + +  AcroFormField(AcroForm *acroFormA, Object *fieldRefA, Object *fieldObjA, +		AcroFormFieldType typeA, TextString *nameA, +		Guint flagsA, GBool typeFromParentA, XFAField *xfaFieldA); +  Ref findFontName(char *fontTag); +  void draw(int pageNum, Gfx *gfx, GBool printing); +  void drawAnnot(int pageNum, Gfx *gfx, GBool printing, +		 Object *annotRef, Object *annotObj); +  void drawExistingAppearance(Gfx *gfx, Dict *annot, +			      double xMin, double yMin, +			      double xMax, double yMax); +  void drawNewAppearance(Gfx *gfx, Dict *annot, +			 double xMin, double yMin, +			 double xMax, double yMax); +  void setColor(Array *a, GBool fill, int adjust, GString *appearBuf); +  void drawText(GString *text, GString *da, GfxFontDict *fontDict, +		GBool multiline, int comb, int quadding, int vAlign, +		GBool txField, GBool forceZapfDingbats, int rot, +		double x, double y, double width, double height, +		double border, GBool whiteBackground, GString *appearBuf); +  void drawListBox(GString **text, GBool *selection, +		   int nOptions, int topIdx, +		   GString *da, GfxFontDict *fontDict, +		   GBool quadding, double xMin, double yMin, +		   double xMax, double yMax, double border, +		   GString *appearBuf); +  void getNextLine(GString *text, int start, +		   GfxFont *font, double fontSize, double wMax, +		   int *end, double *width, int *next); +  void drawCircle(double cx, double cy, double r, const char *cmd, +		  GString *appearBuf); +  void drawCircleTopLeft(double cx, double cy, double r, +			 GString *appearBuf); +  void drawCircleBottomRight(double cx, double cy, double r, +			     GString *appearBuf); +  void drawBarcode(GString *value, GString *da, GfxFontDict *fontDict, int rot, +		   double xMin, double yMin, double xMax, double yMax, +		   XFAFieldBarcodeInfo *barcodeInfo, GString *appearBuf); +  GList *tokenize(GString *s); +  Object *getAnnotObj(Object *annotObj); +  Object *getAnnotResources(Dict *annot, Object *res); +  void buildDefaultResourceDict(Object *dr); +  Object *fieldLookup(const char *key, Object *obj); +  Object *fieldLookup(Dict *dict, const char *key, Object *obj); +  Unicode *utf8ToUnicode(GString *s, int *unicodeLength); +  GString *unicodeToLatin1(Unicode *u, int unicodeLength); +  GBool unicodeStringEqual(Unicode *u, int unicodeLength, GString *s); +  GBool unicodeStringEqual(Unicode *u, int unicodeLength, const char *s); +  GString *pictureFormatDateTime(GString *value, GString *picture); +  GString *pictureFormatNumber(GString *value, GString *picture); +  GString *pictureFormatText(GString *value, GString *picture); +  GBool isValidInt(GString *s, int start, int len); +  int convertInt(GString *s, int start, int len); + +  AcroForm *acroForm; +  Object fieldRef; +  Object fieldObj; +  AcroFormFieldType type; +  TextString *name; +  Guint flags; +  GBool typeFromParent; +  XFAField *xfaField; + +  friend class AcroForm; +}; + +#endif | 
