~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to tests/poppler/poppler/PDFDoc.h

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-05-02 13:11:51 UTC
  • Revision ID: package-import@ubuntu.com-20130502131151-q8dvteqr1ef2x7xz
Tags: upstream-1.4.1~20130504~adb56cb
ImportĀ upstreamĀ versionĀ 1.4.1~20130504~adb56cb

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//========================================================================
 
2
//
 
3
// PDFDoc.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, 2006, 2008 Brad Hards <bradh@frogmouth.net>
 
17
// Copyright (C) 2005, 2009 Albert Astals Cid <aacid@kde.org>
 
18
// Copyright (C) 2008 Julien Rebetez <julienr@svn.gnome.org>
 
19
// Copyright (C) 2008 Pino Toscano <pino@kde.org>
 
20
// Copyright (C) 2008 Carlos Garcia Campos <carlosgc@gnome.org>
 
21
// Copyright (C) 2009 Eric Toombs <ewtoombs@uwaterloo.ca>
 
22
// Copyright (C) 2009 Kovid Goyal <kovid@kovidgoyal.net>
 
23
// Copyright (C) 2010 Hib Eris <hib@hiberis.nl>
 
24
// Copyright (C) 2010 Srinivas Adicherla <srinivas.adicherla@geodesic.com>
 
25
//
 
26
// To see a description of the changes please see the Changelog file that
 
27
// came with your tarball or type make ChangeLog if you are building from git
 
28
//
 
29
//========================================================================
 
30
 
 
31
#ifndef PDFDOC_H
 
32
#define PDFDOC_H
 
33
 
 
34
#ifdef USE_GCC_PRAGMAS
 
35
#pragma interface
 
36
#endif
 
37
 
 
38
#include <stdio.h>
 
39
#include "XRef.h"
 
40
#include "Catalog.h"
 
41
#include "Page.h"
 
42
#include "Annot.h"
 
43
#include "OptionalContent.h"
 
44
 
 
45
class GooString;
 
46
class BaseStream;
 
47
class OutputDev;
 
48
class Links;
 
49
class LinkAction;
 
50
class LinkDest;
 
51
class Outline;
 
52
class Linearization;
 
53
class SecurityHandler;
 
54
class Hints;
 
55
 
 
56
enum PDFWriteMode {
 
57
  writeStandard,
 
58
  writeForceRewrite,
 
59
  writeForceIncremental
 
60
};
 
61
 
 
62
//------------------------------------------------------------------------
 
63
// PDFDoc
 
64
//------------------------------------------------------------------------
 
65
 
 
66
class PDFDoc {
 
67
public:
 
68
 
 
69
  PDFDoc(GooString *fileNameA, GooString *ownerPassword = NULL,
 
70
         GooString *userPassword = NULL, void *guiDataA = NULL);
 
71
 
 
72
#ifdef _WIN32
 
73
  PDFDoc(wchar_t *fileNameA, int fileNameLen, GooString *ownerPassword = NULL,
 
74
         GooString *userPassword = NULL, void *guiDataA = NULL);
 
75
#endif
 
76
 
 
77
  PDFDoc(BaseStream *strA, GooString *ownerPassword = NULL,
 
78
         GooString *userPassword = NULL, void *guiDataA = NULL);
 
79
  ~PDFDoc();
 
80
 
 
81
  static PDFDoc *ErrorPDFDoc(int errorCode, GooString *fileNameA = NULL);
 
82
 
 
83
  // Was PDF document successfully opened?
 
84
  GBool isOk() { return ok; }
 
85
 
 
86
  // Get the error code (if isOk() returns false).
 
87
  int getErrorCode() { return errCode; }
 
88
 
 
89
  // Get the error code returned by fopen() (if getErrorCode() == 
 
90
  // errOpenFile).
 
91
  int getFopenErrno() { return fopenErrno; }
 
92
 
 
93
  // Get file name.
 
94
  GooString *getFileName() { return fileName; }
 
95
 
 
96
  // Get the linearization table.
 
97
  Linearization *getLinearization();
 
98
 
 
99
  // Get the xref table.
 
100
  XRef *getXRef() { return xref; }
 
101
 
 
102
  // Get catalog.
 
103
  Catalog *getCatalog() { return catalog; }
 
104
 
 
105
  // Get optional content configuration
 
106
  OCGs *getOptContentConfig() { return catalog->getOptContentConfig(); }
 
107
 
 
108
  // Get base stream.
 
109
  BaseStream *getBaseStream() { return str; }
 
110
 
 
111
  // Get page parameters.
 
112
  double getPageMediaWidth(int page)
 
113
    { return getPage(page) ? getPage(page)->getMediaWidth() : 0.0 ; }
 
114
  double getPageMediaHeight(int page)
 
115
    { return getPage(page) ? getPage(page)->getMediaHeight() : 0.0 ; }
 
116
  double getPageCropWidth(int page)
 
117
    { return getPage(page) ? getPage(page)->getCropWidth() : 0.0 ; }
 
118
  double getPageCropHeight(int page)
 
119
    { return getPage(page) ? getPage(page)->getCropHeight() : 0.0 ; }
 
120
  int getPageRotate(int page)
 
121
    { return getPage(page) ? getPage(page)->getRotate() : 0 ; }
 
122
 
 
123
  // Get number of pages.
 
124
  int getNumPages();
 
125
 
 
126
  // Return the contents of the metadata stream, or NULL if there is
 
127
  // no metadata.
 
128
  GooString *readMetadata() { return catalog->readMetadata(); }
 
129
 
 
130
  // Return the structure tree root object.
 
131
  Object *getStructTreeRoot() { return catalog->getStructTreeRoot(); }
 
132
 
 
133
  // Get page.
 
134
  Page *getPage(int page);
 
135
 
 
136
  // Display a page.
 
137
  void displayPage(OutputDev *out, int page,
 
138
                   double hDPI, double vDPI, int rotate,
 
139
                   GBool useMediaBox, GBool crop, GBool printing,
 
140
                   GBool (*abortCheckCbk)(void *data) = NULL,
 
141
                   void *abortCheckCbkData = NULL,
 
142
                   GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL,
 
143
                   void *annotDisplayDecideCbkData = NULL);
 
144
 
 
145
  // Display a range of pages.
 
146
  void displayPages(OutputDev *out, int firstPage, int lastPage,
 
147
                    double hDPI, double vDPI, int rotate,
 
148
                    GBool useMediaBox, GBool crop, GBool printing,
 
149
                    GBool (*abortCheckCbk)(void *data) = NULL,
 
150
                    void *abortCheckCbkData = NULL,
 
151
                    GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL,
 
152
                    void *annotDisplayDecideCbkData = NULL);
 
153
 
 
154
  // Display part of a page.
 
155
  void displayPageSlice(OutputDev *out, int page,
 
156
                        double hDPI, double vDPI, int rotate, 
 
157
                        GBool useMediaBox, GBool crop, GBool printing,
 
158
                        int sliceX, int sliceY, int sliceW, int sliceH,
 
159
                        GBool (*abortCheckCbk)(void *data) = NULL,
 
160
                        void *abortCheckCbkData = NULL,
 
161
                        GBool (*annotDisplayDecideCbk)(Annot *annot, void *user_data) = NULL,
 
162
                        void *annotDisplayDecideCbkData = NULL);
 
163
 
 
164
  // Find a page, given its object ID.  Returns page number, or 0 if
 
165
  // not found.
 
166
  int findPage(int num, int gen) { return catalog->findPage(num, gen); }
 
167
 
 
168
  // Returns the links for the current page, transferring ownership to
 
169
  // the caller.
 
170
  Links *getLinks(int page);
 
171
 
 
172
  // Find a named destination.  Returns the link destination, or
 
173
  // NULL if <name> is not a destination.
 
174
  LinkDest *findDest(GooString *name)
 
175
    { return catalog->findDest(name); }
 
176
 
 
177
  // Process the links for a page.
 
178
  void processLinks(OutputDev *out, int page);
 
179
 
 
180
 
 
181
#ifndef DISABLE_OUTLINE
 
182
  // Return the outline object.
 
183
  Outline *getOutline();
 
184
#endif
 
185
 
 
186
  // Is the file encrypted?
 
187
  GBool isEncrypted() { return xref->isEncrypted(); }
 
188
 
 
189
  // Check various permissions.
 
190
  GBool okToPrint(GBool ignoreOwnerPW = gFalse)
 
191
    { return xref->okToPrint(ignoreOwnerPW); }
 
192
  GBool okToPrintHighRes(GBool ignoreOwnerPW = gFalse)
 
193
    { return xref->okToPrintHighRes(ignoreOwnerPW); }
 
194
  GBool okToChange(GBool ignoreOwnerPW = gFalse)
 
195
    { return xref->okToChange(ignoreOwnerPW); }
 
196
  GBool okToCopy(GBool ignoreOwnerPW = gFalse)
 
197
    { return xref->okToCopy(ignoreOwnerPW); }
 
198
  GBool okToAddNotes(GBool ignoreOwnerPW = gFalse)
 
199
    { return xref->okToAddNotes(ignoreOwnerPW); }
 
200
  GBool okToFillForm(GBool ignoreOwnerPW = gFalse)
 
201
    { return xref->okToFillForm(ignoreOwnerPW); }
 
202
  GBool okToAccessibility(GBool ignoreOwnerPW = gFalse)
 
203
    { return xref->okToAccessibility(ignoreOwnerPW); }
 
204
  GBool okToAssemble(GBool ignoreOwnerPW = gFalse)
 
205
    { return xref->okToAssemble(ignoreOwnerPW); }
 
206
 
 
207
 
 
208
  // Is this document linearized?
 
209
  GBool isLinearized();
 
210
 
 
211
  // Return the document's Info dictionary (if any).
 
212
  Object *getDocInfo(Object *obj) { return xref->getDocInfo(obj); }
 
213
  Object *getDocInfoNF(Object *obj) { return xref->getDocInfoNF(obj); }
 
214
 
 
215
  // Return the PDF version specified by the file.
 
216
  int getPDFMajorVersion() { return pdfMajorVersion; }
 
217
  int getPDFMinorVersion() { return pdfMinorVersion; }
 
218
 
 
219
  //Return the PDF ID in the trailer dictionary (if any).
 
220
  GBool getID(GooString *permanent_id, GooString *update_id);
 
221
 
 
222
  // Save this file with another name.
 
223
  int saveAs(GooString *name, PDFWriteMode mode=writeStandard);
 
224
  // Save this file in the given output stream.
 
225
  int saveAs(OutStream *outStr, PDFWriteMode mode=writeStandard);
 
226
  // Save this file with another name without saving changes
 
227
  int saveWithoutChangesAs(GooString *name);
 
228
  // Save this file in the given output stream without saving changes
 
229
  int saveWithoutChangesAs(OutStream *outStr);
 
230
 
 
231
  // Return a pointer to the GUI (XPDFCore or WinPDFCore object).
 
232
  void *getGUIData() { return guiData; }
 
233
 
 
234
private:
 
235
  // Add object to current file stream and return the offset of the beginning of the object
 
236
  Guint writeObject (Object *obj, Ref *ref, OutStream* outStr);
 
237
  void writeDictionnary (Dict* dict, OutStream* outStr);
 
238
  void writeStream (Stream* str, OutStream* outStr);
 
239
  void writeRawStream (Stream* str, OutStream* outStr);
 
240
  void writeTrailer (Guint uxrefOffset, int uxrefSize, OutStream* outStr, GBool incrUpdate);
 
241
  void writeString (GooString* s, OutStream* outStr);
 
242
  void saveIncrementalUpdate (OutStream* outStr);
 
243
  void saveCompleteRewrite (OutStream* outStr);
 
244
 
 
245
  Page *parsePage(int page);
 
246
 
 
247
  // Get hints.
 
248
  Hints *getHints();
 
249
 
 
250
  PDFDoc();
 
251
  void init();
 
252
  GBool setup(GooString *ownerPassword, GooString *userPassword);
 
253
  GBool checkFooter();
 
254
  void checkHeader();
 
255
  GBool checkEncryption(GooString *ownerPassword, GooString *userPassword);
 
256
  // Get the offset of the start xref table.
 
257
  Guint getStartXRef();
 
258
  // Get the offset of the entries in the main XRef table of a
 
259
  // linearized document (0 for non linearized documents).
 
260
  Guint getMainXRefEntriesOffset();
 
261
  Guint strToUnsigned(char *s);
 
262
 
 
263
  GooString *fileName;
 
264
  FILE *file;
 
265
  BaseStream *str;
 
266
  void *guiData;
 
267
  int pdfMajorVersion;
 
268
  int pdfMinorVersion;
 
269
  Linearization *linearization;
 
270
  XRef *xref;
 
271
  SecurityHandler *secHdlr;
 
272
  Catalog *catalog;
 
273
  Hints *hints;
 
274
#ifndef DISABLE_OUTLINE
 
275
  Outline *outline;
 
276
#endif
 
277
  Page **pageCache;
 
278
 
 
279
  GBool ok;
 
280
  int errCode;
 
281
  //If there is an error opening the PDF file with fopen() in the constructor, 
 
282
  //then the POSIX errno will be here.
 
283
  int fopenErrno;
 
284
 
 
285
  Guint startXRefPos;           // offset of last xref table
 
286
};
 
287
 
 
288
#endif