You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.7 KiB
142 lines
3.7 KiB
//========================================================================
|
|
//
|
|
// Annot.h
|
|
//
|
|
// Copyright 2000-2003 Glyph & Cog, LLC
|
|
//
|
|
//========================================================================
|
|
|
|
#ifndef ANNOT_H
|
|
#define ANNOT_H
|
|
|
|
#include <aconf.h>
|
|
|
|
#ifdef USE_GCC_PRAGMAS
|
|
#pragma interface
|
|
#endif
|
|
|
|
class XRef;
|
|
class Catalog;
|
|
class Gfx;
|
|
class GfxFontDict;
|
|
|
|
//------------------------------------------------------------------------
|
|
// AnnotBorderStyle
|
|
//------------------------------------------------------------------------
|
|
|
|
enum AnnotBorderType {
|
|
annotBorderSolid,
|
|
annotBorderDashed,
|
|
annotBorderBeveled,
|
|
annotBorderInset,
|
|
annotBorderUnderlined
|
|
};
|
|
|
|
class AnnotBorderStyle {
|
|
public:
|
|
|
|
AnnotBorderStyle(AnnotBorderType typeA, double widthA,
|
|
double *dashA, int dashLengthA,
|
|
double rA, double gA, double bA);
|
|
~AnnotBorderStyle();
|
|
|
|
AnnotBorderType getType() { return type; }
|
|
double getWidth() { return width; }
|
|
void getDash(double **dashA, int *dashLengthA)
|
|
{ *dashA = dash; *dashLengthA = dashLength; }
|
|
void getColor(double *rA, double *gA, double *bA)
|
|
{ *rA = r; *gA = g; *bA = b; }
|
|
|
|
private:
|
|
|
|
AnnotBorderType type;
|
|
double width;
|
|
double *dash;
|
|
int dashLength;
|
|
double r, g, b;
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
// Annot
|
|
//------------------------------------------------------------------------
|
|
|
|
class Annot {
|
|
public:
|
|
|
|
Annot(XRef *xrefA, Dict *acroForm, Dict *dict, Ref *refA);
|
|
~Annot();
|
|
GBool isOk() { return ok; }
|
|
|
|
void draw(Gfx *gfx, GBool printing);
|
|
|
|
// Get appearance object.
|
|
Object *getAppearance(Object *obj) { return appearance.fetch(xref, obj); }
|
|
|
|
AnnotBorderStyle *getBorderStyle() { return borderStyle; }
|
|
|
|
GBool match(Ref *refA)
|
|
{ return ref.num == refA->num && ref.gen == refA->gen; }
|
|
|
|
void generateFieldAppearance(Dict *field, Dict *annot, Dict *acroForm);
|
|
|
|
private:
|
|
|
|
void setColor(Array *a, GBool fill, int adjust);
|
|
void drawText(GString *text, GString *da, GfxFontDict *fontDict,
|
|
GBool multiline, int comb, int quadding,
|
|
GBool txField, GBool forceZapfDingbats);
|
|
void drawListBox(GString **text, GBool *selection,
|
|
int nOptions, int topIdx,
|
|
GString *da, GfxFontDict *fontDict, GBool quadding);
|
|
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, GBool fill);
|
|
void drawCircleTopLeft(double cx, double cy, double r);
|
|
void drawCircleBottomRight(double cx, double cy, double r);
|
|
Object *fieldLookup(Dict *field, char *key, Object *obj);
|
|
|
|
XRef *xref; // the xref table for this PDF file
|
|
Ref ref; // object ref identifying this annotation
|
|
GString *type; // annotation type
|
|
Object appearance; // a reference to the Form XObject stream
|
|
// for the normal appearance
|
|
GString *appearBuf;
|
|
double xMin, yMin, // annotation rectangle
|
|
xMax, yMax;
|
|
Guint flags;
|
|
AnnotBorderStyle *borderStyle;
|
|
GBool ok;
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
// Annots
|
|
//------------------------------------------------------------------------
|
|
|
|
class Annots {
|
|
public:
|
|
|
|
// Build a list of Annot objects.
|
|
Annots(XRef *xref, Catalog *catalog, Object *annotsObj);
|
|
|
|
~Annots();
|
|
|
|
// Iterate through list of annotations.
|
|
int getNumAnnots() { return nAnnots; }
|
|
Annot *getAnnot(int i) { return annots[i]; }
|
|
|
|
// (Re)generate the appearance streams for all annotations belonging
|
|
// to a form field.
|
|
void generateAppearances(Dict *acroForm);
|
|
|
|
private:
|
|
|
|
void scanFieldAppearances(Dict *node, Ref *ref, Dict *parent,
|
|
Dict *acroForm);
|
|
Annot *findAnnot(Ref *ref);
|
|
|
|
Annot **annots;
|
|
int nAnnots;
|
|
};
|
|
|
|
#endif
|
|
|