00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef XREF_H
00010 #define XREF_H
00011
00012 #include <aconf.h>
00013
00014 #ifdef USE_GCC_PRAGMAS
00015 #pragma interface
00016 #endif
00017
00018 #include "gtypes.h"
00019 #include "Object.h"
00020
00021 class Dict;
00022 class Stream;
00023 namespace xpdf
00024 {
00025 class Parser;
00026 }
00027
00028
00029 class ObjectStream;
00030
00031
00032
00033
00034
00035 enum XRefEntryType {
00036 xrefEntryFree,
00037 xrefEntryUncompressed,
00038 xrefEntryCompressed
00039 };
00040
00041 struct XRefEntry {
00042 Guint offset;
00043 int gen;
00044 XRefEntryType type;
00045 };
00046
00047 class XRef {
00048 public:
00049
00050
00051 XRef(BaseStream *strA, GString *ownerPassword, GString *userPassword);
00052
00053
00054 ~XRef();
00055
00056
00057 GBool isOk() { return ok; }
00058
00059
00060 int getErrorCode() { return errCode; }
00061
00062
00063 #ifndef NO_DECRYPTION
00064 GBool isEncrypted() { return encrypted; }
00065 #else
00066 GBool isEncrypted() { return gFalse; }
00067 #endif
00068
00069
00070 GBool okToPrint(GBool ignoreOwnerPW = gFalse);
00071 GBool okToChange(GBool ignoreOwnerPW = gFalse);
00072 GBool okToCopy(GBool ignoreOwnerPW = gFalse);
00073 GBool okToAddNotes(GBool ignoreOwnerPW = gFalse);
00074
00075
00076 Object *getCatalog(Object *obj) { return fetch(rootNum, rootGen, obj); }
00077
00078
00079 Object *fetch(int num, int gen, Object *obj);
00080
00081
00082 Object *getDocInfo(Object *obj);
00083 Object *getDocInfoNF(Object *obj);
00084
00085
00086 int getNumObjects() { return size; }
00087
00088
00089 Guint getLastXRefPos() { return lastXRefPos; }
00090
00091
00092 int getRootNum() { return rootNum; }
00093 int getRootGen() { return rootGen; }
00094
00095
00096
00097 GBool getStreamEnd(Guint streamStart, Guint *streamEnd);
00098
00099
00100 int getSize() { return size; }
00101 XRefEntry *getEntry(int i) { return &entries[i]; }
00102 Object *getTrailerDict() { return &trailerDict; }
00103
00104 private:
00105
00106 BaseStream *str;
00107 Guint start;
00108
00109 XRefEntry *entries;
00110 int size;
00111 int rootNum, rootGen;
00112 GBool ok;
00113 int errCode;
00114 Object trailerDict;
00115 Guint lastXRefPos;
00116 Guint *streamEnds;
00117
00118 int streamEndsLen;
00119 ObjectStream *objStr;
00120 #ifndef NO_DECRYPTION
00121 GBool encrypted;
00122 int encVersion;
00123 int encRevision;
00124 int keyLength;
00125 int permFlags;
00126 Guchar fileKey[16];
00127 GBool ownerPasswordOk;
00128 #endif
00129
00130 Guint getStartXref();
00131 GBool readXRef(Guint *pos);
00132 GBool readXRefTable(xpdf::Parser *parser, Guint *pos);
00133 GBool readXRefStreamSection(Stream *xrefStr, int *w, int first, int n);
00134 GBool readXRefStream(Stream *xrefStr, Guint *pos);
00135 GBool constructXRef();
00136 GBool checkEncrypted(GString *ownerPassword, GString *userPassword);
00137 Guint strToUnsigned(char *s);
00138 };
00139
00140 #endif