X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=pdf2swf%2Fxpdf%2FXRef.h;h=f9dede3e70c33f1374688c6124e70df04af1af28;hb=f3bc04e70501213ea1d9d2aa22d5c2fa550dab3f;hp=e2260d0c33cf9ded044ac83ee41d9f18ab74172b;hpb=fc554a43712b76d16b41ec77dd311b4a78b1ef6b;p=swftools.git diff --git a/pdf2swf/xpdf/XRef.h b/pdf2swf/xpdf/XRef.h index e2260d0..f9dede3 100644 --- a/pdf2swf/xpdf/XRef.h +++ b/pdf2swf/xpdf/XRef.h @@ -2,14 +2,16 @@ // // XRef.h // -// Copyright 1996 Derek B. Noonburg +// Copyright 1996-2003 Glyph & Cog, LLC // //======================================================================== #ifndef XREF_H #define XREF_H -#ifdef __GNUC__ +#include + +#ifdef USE_GCC_PRAGMAS #pragma interface #endif @@ -18,22 +20,30 @@ class Dict; class Stream; +class Parser; +class ObjectStream; //------------------------------------------------------------------------ // XRef //------------------------------------------------------------------------ +enum XRefEntryType { + xrefEntryFree, + xrefEntryUncompressed, + xrefEntryCompressed +}; + struct XRefEntry { - int offset; + Guint offset; int gen; - GBool used; + XRefEntryType type; }; class XRef { public: // Constructor. Read xref table from stream. - XRef(BaseStream *str, GString *userPassword); + XRef(BaseStream *strA); // Destructor. ~XRef(); @@ -41,18 +51,21 @@ public: // Is xref table valid? GBool isOk() { return ok; } + // Get the error code (if isOk() returns false). + int getErrorCode() { return errCode; } + + // Set the encryption parameters. + void setEncryption(int permFlagsA, GBool ownerPasswordOkA, + Guchar *fileKeyA, int keyLengthA, int encVersionA); + // Is the file encrypted? -#ifndef NO_DECRYPTION GBool isEncrypted() { return encrypted; } -#else - GBool isEncrypted() { return gFalse; } -#endif // Check various permissions. - GBool okToPrint(); - GBool okToChange(); - GBool okToCopy(); - GBool okToAddNotes(); + GBool okToPrint(GBool ignoreOwnerPW = gFalse); + GBool okToChange(GBool ignoreOwnerPW = gFalse); + GBool okToCopy(GBool ignoreOwnerPW = gFalse); + GBool okToAddNotes(GBool ignoreOwnerPW = gFalse); // Get catalog object. Object *getCatalog(Object *obj) { return fetch(rootNum, rootGen, obj); } @@ -62,51 +75,57 @@ public: // Return the document's Info dictionary (if any). Object *getDocInfo(Object *obj); + Object *getDocInfoNF(Object *obj); // Return the number of objects in the xref table. int getNumObjects() { return size; } // Return the offset of the last xref table. - int getLastXRefPos() { return lastXRefPos; } + Guint getLastXRefPos() { return lastXRefPos; } // Return the catalog object reference. int getRootNum() { return rootNum; } int getRootGen() { return rootGen; } // Get end position for a stream in a damaged file. - // Returns -1 if unknown or file is not damaged. - int getStreamEnd(int start); + // Returns false if unknown or file is not damaged. + GBool getStreamEnd(Guint streamStart, Guint *streamEnd); + + // Direct access. + int getSize() { return size; } + XRefEntry *getEntry(int i) { return &entries[i]; } + Object *getTrailerDict() { return &trailerDict; } private: BaseStream *str; // input stream - int start; // offset in file (to allow for garbage + Guint start; // offset in file (to allow for garbage // at beginning of file) XRefEntry *entries; // xref entries int size; // size of array int rootNum, rootGen; // catalog dict GBool ok; // true if xref table is valid + int errCode; // error code (if is false) Object trailerDict; // trailer dictionary - int lastXRefPos; // offset of last xref table - int *streamEnds; // 'endstream' positions - only used in + Guint lastXRefPos; // offset of last xref table + Guint *streamEnds; // 'endstream' positions - only used in // damaged files int streamEndsLen; // number of valid entries in streamEnds -#ifndef NO_DECRYPTION + ObjectStream *objStr; // cached object stream GBool encrypted; // true if file is encrypted int permFlags; // permission bits + GBool ownerPasswordOk; // true if owner password is correct Guchar fileKey[16]; // file decryption key -#endif - - int readTrailer(); - GBool readXRef(int *pos); + int keyLength; // length of key, in bytes + int encVersion; // encryption algorithm + + Guint getStartXref(); + GBool readXRef(Guint *pos); + GBool readXRefTable(Parser *parser, Guint *pos); + GBool readXRefStreamSection(Stream *xrefStr, int *w, int first, int n); + GBool readXRefStream(Stream *xrefStr, Guint *pos); GBool constructXRef(); - GBool checkEncrypted(GString *userPassword); + Guint strToUnsigned(char *s); }; -//------------------------------------------------------------------------ -// The global xref table -//------------------------------------------------------------------------ - -extern XRef *xref; - #endif