Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: PDF driver 4 : * Purpose: GDALDataset driver for PDF dataset. 5 : * Author: Even Rouault, <even dot rouault at spatialys.com> 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2010-2013, Even Rouault <even dot rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #ifndef PDFIO_H_INCLUDED 14 : #define PDFIO_H_INCLUDED 15 : 16 : #include "cpl_vsi_virtual.h" 17 : 18 : /************************************************************************/ 19 : /* VSIPDFFileStream */ 20 : /************************************************************************/ 21 : 22 : #define BUFFER_SIZE 1024 23 : 24 : class VSIPDFFileStream final : public BaseStream 25 : { 26 : public: 27 : VSIPDFFileStream(VSILFILE *f, const char *pszFilename, Object &&dictA); 28 : VSIPDFFileStream(VSIPDFFileStream *poParent, vsi_l_offset startA, 29 : bool limitedA, vsi_l_offset lengthA, Object &&dictA); 30 : virtual ~VSIPDFFileStream(); 31 : 32 : virtual BaseStream *copy() override; 33 : 34 : virtual Stream *makeSubStream(Goffset startA, bool limitedA, 35 : Goffset lengthA, Object &&dictA) override; 36 : virtual Goffset getPos() override; 37 : virtual Goffset getStart() override; 38 : 39 : virtual void setPos(Goffset pos, int dir = 0) override; 40 : virtual void moveStart(Goffset delta) override; 41 : 42 : virtual StreamKind getKind() const override; 43 : 44 : virtual GooString *getFileName() override; 45 : 46 : virtual int getChar() override; 47 : virtual int getUnfilteredChar() override; 48 : virtual int lookChar() override; 49 : 50 : #if POPPLER_MAJOR_VERSION > 25 || \ 51 : (POPPLER_MAJOR_VERSION == 25 && POPPLER_MINOR_VERSION >= 2) 52 : virtual bool reset() override; 53 : #else 54 : virtual void reset() override; 55 : #endif 56 : 57 : #if POPPLER_MAJOR_VERSION > 25 || \ 58 : (POPPLER_MAJOR_VERSION == 25 && POPPLER_MINOR_VERSION > 2) 59 : virtual bool unfilteredReset() override; 60 : #else 61 : virtual void unfilteredReset() override; 62 : #endif 63 : 64 : virtual void close() override; 65 : 66 0 : bool FoundLinearizedHint() const 67 : { 68 0 : return bFoundLinearizedHint; 69 : } 70 : 71 : private: 72 : virtual bool hasGetChars() override; 73 : virtual int getChars(int nChars, unsigned char *buffer) override; 74 : 75 : VSIPDFFileStream *poParent = nullptr; 76 : GooString *poFilename = nullptr; 77 : VSILFILE *f = nullptr; 78 : vsi_l_offset nStart = 0; 79 : bool bLimited = false; 80 : vsi_l_offset nLength = 0; 81 : 82 : vsi_l_offset nCurrentPos = VSI_L_OFFSET_MAX; 83 : int bHasSavedPos = FALSE; 84 : vsi_l_offset nSavedPos = 0; 85 : 86 : GByte abyBuffer[BUFFER_SIZE]; 87 : int nPosInBuffer = -1; 88 : int nBufferLength = -1; 89 : 90 : bool bFoundLinearizedHint = false; 91 : 92 : int FillBuffer(); 93 : 94 : CPL_DISALLOW_COPY_ASSIGN(VSIPDFFileStream) 95 : }; 96 : 97 : #endif // PDFIO_H_INCLUDED