source: trunk/poppler/mypoppler/poppler/Page.h @ 461

Last change on this file since 461 was 277, checked in by rbri, 12 years ago

PDF plugin: Poppler library updated to version 0.12.3

File size: 8.4 KB
Line 
1//========================================================================
2//
3// Page.h
4//
5// Copyright 1996-2003 Glyph & Cog, LLC
6//
7//========================================================================
8
9//========================================================================
10//
11// Modified under the Poppler project - http://poppler.freedesktop.org
12//
13// All changes made under the Poppler project to this file are licensed
14// under GPL version 2 or later
15//
16// Copyright (C) 2005 Kristian HÞgsberg <krh@redhat.com>
17// Copyright (C) 2005 Jeff Muizelaar <jeff@infidigm.net>
18// Copyright (C) 2006 Pino Toscano <pino@kde.org>
19// Copyright (C) 2006 Carlos Garcia Campos <carlosgc@gnome.org>
20// Copyright (C) 2007 Julien Rebetez <julienr@svn.gnome.org>
21// Copyright (C) 2008 Iñigo Martínez <inigomartinez@gmail.com>
22//
23// To see a description of the changes please see the Changelog file that
24// came with your tarball or type make ChangeLog if you are building from git
25//
26//========================================================================
27
28#ifndef PAGE_H
29#define PAGE_H
30
31#ifdef USE_GCC_PRAGMAS
32#pragma interface
33#endif
34
35#include "Object.h"
36
37class Dict;
38class XRef;
39class OutputDev;
40class Links;
41class Catalog;
42class Annots;
43class Annot;
44class Gfx;
45class FormPageWidgets;
46class Form;
47
48//------------------------------------------------------------------------
49
50class PDFRectangle {
51public:
52  double x1, y1, x2, y2;
53
54  PDFRectangle() { x1 = y1 = x2 = y2 = 0; }
55  PDFRectangle(double x1A, double y1A, double x2A, double y2A)
56    { x1 = x1A; y1 = y1A; x2 = x2A; y2 = y2A; }
57  GBool isValid() { return x1 != 0 || y1 != 0 || x2 != 0 || y2 != 0; }
58  void clipTo(PDFRectangle *rect);
59};
60
61//------------------------------------------------------------------------
62// PageAttrs
63//------------------------------------------------------------------------
64
65class PageAttrs {
66public:
67
68  // Construct a new PageAttrs object by merging a dictionary
69  // (of type Pages or Page) into another PageAttrs object.  If
70  // <attrs> is NULL, uses defaults.
71  PageAttrs(PageAttrs *attrs, Dict *dict);
72
73  // Destructor.
74  ~PageAttrs();
75
76  // Accessors.
77  PDFRectangle *getMediaBox() { return &mediaBox; }
78  PDFRectangle *getCropBox() { return &cropBox; }
79  GBool isCropped() { return haveCropBox; }
80  PDFRectangle *getBleedBox() { return &bleedBox; }
81  PDFRectangle *getTrimBox() { return &trimBox; }
82  PDFRectangle *getArtBox() { return &artBox; }
83  int getRotate() { return rotate; }
84  GooString *getLastModified()
85    { return lastModified.isString()
86        ? lastModified.getString() : (GooString *)NULL; }
87  Dict *getBoxColorInfo()
88    { return boxColorInfo.isDict() ? boxColorInfo.getDict() : (Dict *)NULL; }
89  Dict *getGroup()
90    { return group.isDict() ? group.getDict() : (Dict *)NULL; }
91  Stream *getMetadata()
92    { return metadata.isStream() ? metadata.getStream() : (Stream *)NULL; }
93  Dict *getPieceInfo()
94    { return pieceInfo.isDict() ? pieceInfo.getDict() : (Dict *)NULL; }
95  Dict *getSeparationInfo()
96    { return separationInfo.isDict()
97        ? separationInfo.getDict() : (Dict *)NULL; }
98  Dict *getResourceDict()
99    { return resources.isDict() ? resources.getDict() : (Dict *)NULL; }
100
101private:
102
103  GBool readBox(Dict *dict, char *key, PDFRectangle *box);
104
105  PDFRectangle mediaBox;
106  PDFRectangle cropBox;
107  GBool haveCropBox;
108  PDFRectangle bleedBox;
109  PDFRectangle trimBox;
110  PDFRectangle artBox;
111  int rotate;
112  Object lastModified;
113  Object boxColorInfo;
114  Object group;
115  Object metadata;
116  Object pieceInfo;
117  Object separationInfo;
118  Object resources;
119};
120
121//------------------------------------------------------------------------
122// Page
123//------------------------------------------------------------------------
124
125class Page {
126public:
127
128  // Constructor.
129  Page(XRef *xrefA, int numA, Dict *pageDict, Ref pageRefA, PageAttrs *attrsA, Form *form);
130
131  // Destructor.
132  ~Page();
133
134  // Is page valid?
135  GBool isOk() { return ok; }
136
137  // Get page parameters.
138  int getNum() { return num; }
139  PDFRectangle *getMediaBox() { return attrs->getMediaBox(); }
140  PDFRectangle *getCropBox() { return attrs->getCropBox(); }
141  GBool isCropped() { return attrs->isCropped(); }
142  double getMediaWidth() 
143    { return attrs->getMediaBox()->x2 - attrs->getMediaBox()->x1; }
144  double getMediaHeight()
145    { return attrs->getMediaBox()->y2 - attrs->getMediaBox()->y1; }
146  double getCropWidth() 
147    { return attrs->getCropBox()->x2 - attrs->getCropBox()->x1; }
148  double getCropHeight()
149    { return attrs->getCropBox()->y2 - attrs->getCropBox()->y1; }
150  PDFRectangle *getBleedBox() { return attrs->getBleedBox(); }
151  PDFRectangle *getTrimBox() { return attrs->getTrimBox(); }
152  PDFRectangle *getArtBox() { return attrs->getArtBox(); }
153  int getRotate() { return attrs->getRotate(); }
154  GooString *getLastModified() { return attrs->getLastModified(); }
155  Dict *getBoxColorInfo() { return attrs->getBoxColorInfo(); }
156  Dict *getGroup() { return attrs->getGroup(); }
157  Stream *getMetadata() { return attrs->getMetadata(); }
158  Dict *getPieceInfo() { return attrs->getPieceInfo(); }
159  Dict *getSeparationInfo() { return attrs->getSeparationInfo(); }
160
161  // Get resource dictionary.
162  Dict *getResourceDict() { return attrs->getResourceDict(); }
163
164  // Get annotations array.
165  Object *getAnnots(Object *obj) { return annots.fetch(xref, obj); }
166  // Add a new annotation to the page
167  void addAnnot(Annot *annot);
168
169  // Return a list of links.
170  Links *getLinks(Catalog *catalog);
171
172  // Return a list of annots. Ownership is transferred to the caller.
173  Annots *getAnnots(Catalog *catalog);
174
175  // Get contents.
176  Object *getContents(Object *obj) { return contents.fetch(xref, obj); }
177
178  // Get thumb.
179  Object *getThumb(Object *obj) { return thumb.fetch(xref, obj); }
180  GBool loadThumb(unsigned char **data, int *width, int *height, int *rowstride);
181
182  // Get transition.
183  Object *getTrans(Object *obj) { return trans.fetch(xref, obj); }
184
185  // Get form.
186  FormPageWidgets *getPageWidgets() { return pageWidgets; }
187
188  // Get duration, the maximum length of time, in seconds,
189  // that the page is displayed before the presentation automatically
190  // advances to the next page
191  double getDuration() { return duration; }
192
193  // Get actions
194  Object *getActions(Object *obj) { return actions.fetch(xref, obj); }
195
196  Gfx *createGfx(OutputDev *out, double hDPI, double vDPI,
197                 int rotate, GBool useMediaBox, GBool crop,
198                 int sliceX, int sliceY, int sliceW, int sliceH,
199                 GBool printing, Catalog *catalog,
200                 GBool (*abortCheckCbk)(void *data),
201                 void *abortCheckCbkData,
202                 GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data),
203                 void *annotDisplayDecideCbkData);
204
205  // Display a page.
206  void display(OutputDev *out, double hDPI, double vDPI,
207               int rotate, GBool useMediaBox, GBool crop,
208               GBool printing, Catalog *catalog,
209               GBool (*abortCheckCbk)(void *data) = NULL,
210               void *abortCheckCbkData = NULL,
211               GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL,
212               void *annotDisplayDecideCbkData = NULL);
213
214  // Display part of a page.
215  void displaySlice(OutputDev *out, double hDPI, double vDPI,
216                    int rotate, GBool useMediaBox, GBool crop,
217                    int sliceX, int sliceY, int sliceW, int sliceH,
218                    GBool printing, Catalog *catalog,
219                    GBool (*abortCheckCbk)(void *data) = NULL,
220                    void *abortCheckCbkData = NULL,
221                    GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL,
222                    void *annotDisplayDecideCbkData = NULL);
223
224  void display(Gfx *gfx);
225
226  void makeBox(double hDPI, double vDPI, int rotate,
227               GBool useMediaBox, GBool upsideDown,
228               double sliceX, double sliceY, double sliceW, double sliceH,
229               PDFRectangle *box, GBool *crop);
230
231  void processLinks(OutputDev *out, Catalog *catalog);
232
233  // Get the page's default CTM.
234  void getDefaultCTM(double *ctm, double hDPI, double vDPI,
235                     int rotate, GBool useMediaBox, GBool upsideDown);
236
237private:
238
239  XRef *xref;                   // the xref table for this PDF file
240  Object pageObj;               // page dictionary
241  Ref pageRef;                  // page reference
242  int num;                      // page number
243  PageAttrs *attrs;             // page attributes
244  Object annots;                // annotations array
245  Object contents;              // page contents
246  FormPageWidgets *pageWidgets;                         // the form for that page
247  Object thumb;                 // page thumbnail
248  Object trans;                 // page transition
249  Object actions;               // page addiction actions
250  double duration;              // page duration
251  GBool ok;                     // true if page is valid
252};
253
254#endif
Note: See TracBrowser for help on using the repository browser.