File indexing completed on 2025-12-10 10:23:47
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef HINTS_H
0014 #define HINTS_H
0015
0016 #include <cstring>
0017 #include <vector>
0018 #include "PDFDoc.h"
0019
0020 class Stream;
0021 class BaseStream;
0022 class Linearization;
0023 class XRef;
0024
0025
0026
0027
0028
0029 class Hints
0030 {
0031 public:
0032 Hints(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr);
0033 ~Hints();
0034
0035 Hints(const Hints &) = delete;
0036 Hints &operator=(const Hints &) = delete;
0037
0038 bool isOk() const;
0039
0040 int getPageObjectNum(int page);
0041 Goffset getPageOffset(int page);
0042 std::vector<ByteRange> *getPageRanges(int page);
0043
0044 private:
0045 void readTables(BaseStream *str, Linearization *linearization, XRef *xref, SecurityHandler *secHdlr);
0046 bool readPageOffsetTable(Stream *str);
0047 bool readSharedObjectsTable(Stream *str);
0048
0049 unsigned int hintsOffset;
0050 unsigned int hintsLength;
0051 unsigned int hintsOffset2;
0052 unsigned int hintsLength2;
0053 unsigned int mainXRefEntriesOffset;
0054
0055 int nPages;
0056 int pageFirst;
0057 int pageObjectFirst;
0058 Goffset pageOffsetFirst;
0059 unsigned int pageEndFirst;
0060
0061 unsigned int nObjectLeast;
0062 unsigned int objectOffsetFirst;
0063 unsigned int nBitsDiffObjects;
0064 unsigned int pageLengthLeast;
0065 unsigned int nBitsDiffPageLength;
0066 unsigned int OffsetStreamLeast;
0067 unsigned int nBitsOffsetStream;
0068 unsigned int lengthStreamLeast;
0069 unsigned int nBitsLengthStream;
0070 unsigned int nBitsNumShared;
0071 unsigned int nBitsShared;
0072 unsigned int nBitsNumerator;
0073 unsigned int denominator;
0074
0075 unsigned int *nObjects;
0076 int *pageObjectNum;
0077 unsigned int *xRefOffset;
0078 unsigned int *pageLength;
0079 Goffset *pageOffset;
0080 unsigned int *numSharedObject;
0081 unsigned int **sharedObjectId;
0082
0083 unsigned int *groupLength;
0084 unsigned int *groupOffset;
0085 unsigned int *groupHasSignature;
0086 unsigned int *groupNumObjects;
0087 unsigned int *groupXRefOffset;
0088 bool ok;
0089 };
0090
0091 #endif