1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FPDF_PARSER_ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FPDF_PARSER_ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FX_BASIC_H_ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../fxcrt/fx_ext.h" 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FPDF_OBJECTS_ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fpdf_objects.h" 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Document; 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IPDF_DocParser; 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Parser; 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_SecurityHandler; 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StandardSecurityHandler; 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_CryptoHandler; 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Object; 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_FileRead; 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFDF_Document; 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFDF_Parser; 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_Font; 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_AffineMatrix; 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_FloatRect; 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Point; 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_DocPageData; 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_DocRenderData; 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_ModuleMgr; 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_DIBSource; 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Font; 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Image; 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_ColorSpace; 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Pattern; 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_FontEncoding; 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_IccProfile; 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_PrivateData; 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FPDFPERM_PRINT 0x0004 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FPDFPERM_MODIFY 0x0008 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FPDFPERM_EXTRACT 0x0010 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FPDFPERM_ANNOT_FORM 0x0020 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FPDFPERM_FILL_FORM 0x0100 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FPDFPERM_EXTRACT_ACCESS 0x0200 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FPDFPERM_ASSEMBLE 0x0400 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FPDFPERM_PRINT_HIGH 0x0800 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FPDF_PAGE_MAX_NUM 0xFFFFF 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IPDF_EnumPageHandler 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL EnumPage(CPDF_Dictionary* pPageDict) = 0; 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Document : public CFX_PrivateData, public CPDF_IndirectObjects 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Document(IPDF_DocParser* pParser); 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Document(); 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CPDF_Document(); 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IPDF_DocParser* GetParser() const 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pParser; 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* GetRoot() const 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pRootDict; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* GetInfo() const 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pInfoDict; 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GetID(CFX_ByteString& id1, CFX_ByteString& id2) const 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov id1 = m_ID1; 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov id2 = m_ID2; 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetPageCount() const; 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* GetPage(int iPage); 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetPageIndex(FX_DWORD objnum); 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void EnumPages(IPDF_EnumPageHandler* pHandler); 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD GetUserPermissions(FX_BOOL bCheckRevision = FALSE) const; 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsOwner() const; 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_DocPageData* GetPageData() 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return GetValidatePageData(); 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ClearPageData(); 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void RemoveColorSpaceFromPageData(CPDF_Object* pObject); 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_DocRenderData* GetRenderData() 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return GetValidateRenderData(); 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ClearRenderData(); 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ClearRenderFont(); 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const; 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Font* LoadFont(CPDF_Dictionary* pFontDict); 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Font* FindFont(CPDF_Dictionary* pFontDict); 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_ColorSpace* LoadColorSpace(CPDF_Object* pCSObj, CPDF_Dictionary* pResources = NULL); 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Pattern* LoadPattern(CPDF_Object* pObj, FX_BOOL bShading, const CFX_AffineMatrix* matrix = NULL); 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Image* LoadImageF(CPDF_Object* pObj); 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_StreamAcc* LoadFontFile(CPDF_Stream* pStream); 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_IccProfile* LoadIccProfile(CPDF_Stream* pStream, int nComponents); 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Font* AddWindowsFont(LOGFONTA* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE); 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Font* AddWindowsFont(LOGFONTW* pLogFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE); 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Font* AddMacFont(CTFontRef pFont, FX_BOOL bVert, FX_BOOL bTranslateName = FALSE); 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Font* AddStandardFont(const FX_CHAR* font, CPDF_FontEncoding* pEncoding); 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Font* AddFont(CFX_Font* pFont, int charset, FX_BOOL bVert); 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void CreateNewDoc(); 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* CreateNewPage(int iPage); 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void DeletePage(int iPage); 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void LoadDoc(); 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void LoadAsynDoc(CPDF_Dictionary *pLinearized); 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void LoadPages(); 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* m_pRootDict; 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* m_pInfoDict; 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString m_ID1; 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString m_ID2; 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bLinearized; 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwFirstPageNo; 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwFirstPageObjNum; 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_DWordArray m_PageList; 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int _GetPageCount() const; 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* _FindPDFPage(CPDF_Dictionary* pPages, int iPage, int nPagesToGo, int level); 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int _FindPageIndex(CPDF_Dictionary* pNode, FX_DWORD& skip_count, FX_DWORD objnum, int& index, int level = 0); 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsContentUsedElsewhere(FX_DWORD objnum, CPDF_Dictionary* pPageDict); 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckOCGVisible(CPDF_Dictionary* pOCG, FX_BOOL bPrinting); 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_DocPageData* GetValidatePageData(); 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_DocRenderData* GetValidateRenderData(); 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class CPDF_Creator; 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class CPDF_Parser; 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class CPDF_DataAvail; 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class CPDF_OCContext; 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_DocPageData* m_pDocPage; 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_DocRenderData* m_pDocRender; 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFWORD_EOF 0 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFWORD_NUMBER 1 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFWORD_TEXT 2 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFWORD_DELIMITER 3 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFWORD_NAME 4 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_SimpleParser : public CFX_Object 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_SimpleParser(FX_LPCBYTE pData, FX_DWORD dwSize); 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_SimpleParser(FX_BSTR str); 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteStringC GetWord(); 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL SearchToken(FX_BSTR token); 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL SkipWord(FX_BSTR token); 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL FindTagPair(FX_BSTR start_token, FX_BSTR end_token, 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD& start_pos, FX_DWORD& end_pos); 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL FindTagParam(FX_BSTR token, int nParams); 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD GetPos() 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_dwCurPos; 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetPos(FX_DWORD pos) 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ASSERT(pos <= m_dwSize); 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_dwCurPos = pos; 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ParseWord(FX_LPCBYTE& pStart, FX_DWORD& dwSize, int& type); 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE m_pData; 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwSize; 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwCurPos; 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_SyntaxParser : public CFX_Object 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_SyntaxParser(); 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CPDF_SyntaxParser(); 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void InitParser(IFX_FileRead* pFileAccess, FX_DWORD HeaderOffset); 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE SavePos() 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Pos; 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void RestorePos(FX_FILESIZE pos) 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Pos = pos; 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object* GetObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, int level, struct PARSE_CONTEXT* pContext = NULL, FX_BOOL bDecrypt = TRUE); 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object* GetObjectByStrict(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, FX_DWORD gennum, int level, struct PARSE_CONTEXT* pContext = NULL); 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetDirectNum(); 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetString(FX_DWORD objnum, FX_DWORD gennum); 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetName(); 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetKeyword(); 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GetBinary(FX_BYTE* buffer, FX_DWORD size); 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ToNextLine(); 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ToNextWord(); 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL SearchWord(FX_BSTR word, FX_BOOL bWholeWord, FX_BOOL bForward, FX_FILESIZE limit); 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int SearchMultiWord(FX_BSTR words, FX_BOOL bWholeWord, FX_FILESIZE limit); 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE FindTag(FX_BSTR tag, FX_FILESIZE limit); 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetEncrypt(CPDF_CryptoHandler* pCryptoHandler) 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pCryptoHandler = pCryptoHandler; 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsEncrypted() 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pCryptoHandler != NULL; 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GetCharAt(FX_FILESIZE pos, FX_BYTE& ch); 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL ReadBlock(FX_BYTE* pBuf, FX_DWORD size); 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetNextWord(FX_BOOL& bIsNumber); 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetNextChar(FX_BYTE& ch); 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GetCharAtBackward(FX_FILESIZE pos, FX_BYTE& ch); 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GetNextWord(); 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsWholeWord(FX_FILESIZE startpos, FX_FILESIZE limit, FX_LPCBYTE tag, FX_DWORD taglen); 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString ReadString(); 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString ReadHexString(); 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Stream* ReadStream(CPDF_Dictionary* pDict, PARSE_CONTEXT* pContext, FX_DWORD objnum, FX_DWORD gennum); 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_Pos; 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bFileStream; 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_MetadataObjnum; 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FileRead* m_pFileAccess; 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_HeaderOffset; 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_FileLen; 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE* m_pFileBuf; 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_BufSize; 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_BufOffset; 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_CryptoHandler* m_pCryptoHandler; 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE m_WordBuffer[257]; 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_WordSize; 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bIsNumber; 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_dwWordPos; 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class CPDF_Parser; 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class CPDF_DataAvail; 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFPARSE_TYPEONLY 1 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFPARSE_NOSTREAM 2 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct PARSE_CONTEXT { 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_Flags; 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_DictStart; 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_DictEnd; 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_DataStart; 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_DataEnd; 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IPDF_DocParser : public CFX_Object 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetRootObjNum() = 0; 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetInfoObjNum() = 0; 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_Object* ParseIndirectObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, PARSE_CONTEXT* pContext = NULL) = 0; 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetLastObjNum() = 0; 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_Array* GetIDArray() = 0; 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_Dictionary* GetEncryptDict() = 0; 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsEncrypted() 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return GetEncryptDict() != NULL; 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetPermissions(FX_BOOL bCheckRevision = FALSE) = 0; 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsOwner() = 0; 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) = 0; 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFPARSE_ERROR_SUCCESS 0 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFPARSE_ERROR_FILE 1 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFPARSE_ERROR_FORMAT 2 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFPARSE_ERROR_PASSWORD 3 398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFPARSE_ERROR_HANDLER 4 399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFPARSE_ERROR_CERT 5 400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Parser : public IPDF_DocParser 401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Parser(); 405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CPDF_Parser(); 407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD StartParse(FX_LPCSTR filename, FX_BOOL bReParse = FALSE); 409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD StartParse(FX_LPCWSTR filename, FX_BOOL bReParse = FALSE); 411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD StartParse(IFX_FileRead* pFile, FX_BOOL bReParse = FALSE, FX_BOOL bOwnFileRead = TRUE); 413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void CloseParser(FX_BOOL bReParse = FALSE); 415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetPermissions(FX_BOOL bCheckRevision = FALSE); 417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsOwner(); 419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetPassword(const FX_CHAR* password) 421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Password = password; 423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetPassword() 426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Password; 428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_SecurityHandler* GetSecurityHandler() 431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pSecurityHandler; 433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_CryptoHandler* GetCryptoHandler() 436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Syntax.m_pCryptoHandler; 438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetSecurityHandler(CPDF_SecurityHandler* pSecurityHandler, FX_BOOL bForced = FALSE); 441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetRecipient() 443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_bsRecipient; 445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* GetTrailer() 448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pTrailer; 450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE GetLastXRefOffset() 453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_LastXRefOffset; 455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Document* GetDocument() 458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pDocument; 460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ArrayTemplate<CPDF_Dictionary *> * GetOtherTrailers() 462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return &m_Trailers; 464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetRootObjNum(); 467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetInfoObjNum(); 468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_Array* GetIDArray(); 469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_Dictionary* GetEncryptDict() 470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pEncryptDict; 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_Object* ParseIndirectObject(CPDF_IndirectObjects* pObjList, FX_DWORD objnum, PARSE_CONTEXT* pContext = NULL); 474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetLastObjNum(); 475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsFormStream(FX_DWORD objnum, FX_BOOL& bForm); 476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE GetObjectOffset(FX_DWORD objnum); 478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE GetObjectSize(FX_DWORD objnum); 480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetObjectVersion(FX_DWORD objnum) 482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_ObjVersion[objnum]; 484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void GetIndirectBinary(FX_DWORD objnum, FX_BYTE*& pBuffer, FX_DWORD& size); 487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GetFileStreamOption() 489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Syntax.m_bFileStream; 491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetFileStreamOption(FX_BOOL b) 494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_Syntax.m_bFileStream = b; 496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FileRead* GetFileAccess() const 499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Syntax.m_pFileAccess; 501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 503ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetFileVersion() const 504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_FileVersion; 506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsXRefStream() const 509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_bXRefStream; 511ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object* ParseIndirectObjectAt(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum, 513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct PARSE_CONTEXT* pContext); 514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object* ParseIndirectObjectAtByStrict(CPDF_IndirectObjects* pObjList, FX_FILESIZE pos, FX_DWORD objnum, 516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov struct PARSE_CONTEXT* pContext, FX_FILESIZE *pResultPos); 517ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD StartAsynParse(IFX_FileRead* pFile, FX_BOOL bReParse = FALSE, FX_BOOL bOwnFileRead = TRUE); 519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD GetFirstPageNo() 521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 522ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_dwFirstPageNo; 523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Document* m_pDocument; 527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_SyntaxParser m_Syntax; 529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bOwnFileRead; 530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object* ParseDirect(CPDF_Object* pObj); 531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadAllCrossRefV4(FX_FILESIZE pos); 533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 534ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadAllCrossRefV5(FX_FILESIZE pos); 535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadCrossRefV4(FX_FILESIZE pos, FX_FILESIZE streampos, FX_BOOL bSkip, FX_BOOL bFirst); 537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadCrossRefV5(FX_FILESIZE pos, FX_FILESIZE& prev, FX_BOOL bMainXRef); 539ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* LoadTrailerV4(); 541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL RebuildCrossRef(); 543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD SetEncryptHandler(); 545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ReleaseEncryptHandler(); 547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadLinearizedAllCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount); 549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadLinearizedCrossRefV4(FX_FILESIZE pos, FX_DWORD dwObjCount); 551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadLinearizedAllCrossRefV5(FX_FILESIZE pos); 553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD LoadLinearizedMainXRefTable(); 555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_MapPtrToPtr m_ObjectStreamMap; 557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_StreamAcc* GetObjectStream(FX_DWORD number); 559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 560ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsLinearizedFile(IFX_FileRead* pFileAccess, FX_DWORD offset); 561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_FileVersion; 565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* m_pTrailer; 567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* m_pEncryptDict; 569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetEncryptDictionary(CPDF_Dictionary* pDict); 570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_LastXRefOffset; 572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bXRefStream; 574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_SecurityHandler* m_pSecurityHandler; 577ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bForceUseSecurityHandler; 579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString m_bsRecipient; 581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString m_FilePath; 583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString m_Password; 585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FileSizeArray m_CrossRef; 587ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteArray m_V5Type; 589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FileSizeArray m_SortedOffset; 591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WordArray m_ObjVersion; 593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ArrayTemplate<CPDF_Dictionary *> m_Trailers; 594ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bVersionUpdated; 596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object* m_pLinearized; 598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwFirstPageNo; 600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwXrefStartObjNum; 602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class CPDF_Creator; 603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov friend class CPDF_DataAvail; 604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXCIPHER_NONE 0 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXCIPHER_RC4 1 607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXCIPHER_AES 2 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FXCIPHER_AES2 3 609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_SecurityHandler : public CFX_Object 610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 613ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~CPDF_SecurityHandler() {} 614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict) = 0; 616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetPermissions() = 0; 618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsOwner() = 0; 620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 621ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetCryptInfo(int& cipher, FX_LPCBYTE& buffer, int& keylen) = 0; 622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsMetadataEncrypted() 624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_CryptoHandler* CreateCryptoHandler() = 0; 629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_StandardSecurityHandler* GetStandardHandler() 631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDF_ENCRYPT_CONTENT 0 636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StandardSecurityHandler : public CPDF_SecurityHandler 637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_StandardSecurityHandler(); 640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~CPDF_StandardSecurityHandler(); 642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL OnInit(CPDF_Parser* pParser, CPDF_Dictionary* pEncryptDict); 643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD GetPermissions(); 644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsOwner() 645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_bOwner; 647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL GetCryptInfo(int& cipher, FX_LPCBYTE& buffer, int& keylen); 649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsMetadataEncrypted(); 650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_CryptoHandler* CreateCryptoHandler(); 651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual CPDF_StandardSecurityHandler* GetStandardHandler() 652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return this; 654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray, 657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE user_pass, FX_DWORD user_size, 658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE owner_pass, FX_DWORD owner_size, FX_DWORD type = PDF_ENCRYPT_CONTENT); 659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray, 661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE user_pass, FX_DWORD user_size, FX_DWORD type = PDF_ENCRYPT_CONTENT); 662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetUserPassword(FX_LPCBYTE owner_pass, FX_DWORD pass_size); 664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString GetUserPassword(FX_LPCBYTE owner_pass, FX_DWORD pass_size, FX_INT32 key_len); 665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetVersion() 666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Version; 668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 669ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int GetRevision() 670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_Revision; 672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int CheckPassword(FX_LPCBYTE password, FX_DWORD pass_size, FX_BOOL bOwner, FX_LPBYTE key); 675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int CheckPassword(FX_LPCBYTE password, FX_DWORD pass_size, FX_BOOL bOwner, FX_LPBYTE key, int key_len); 676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate: 677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Version; 679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Revision; 681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Parser* m_pParser; 683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* m_pEncryptDict; 685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict); 687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadDict(CPDF_Dictionary* pEncryptDict, FX_DWORD type, int& cipher, int& key_len); 688ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckUserPassword(FX_LPCBYTE password, FX_DWORD pass_size, 690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bIgnoreEncryptMeta, FX_LPBYTE key, FX_INT32 key_len); 691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckOwnerPassword(FX_LPCBYTE password, FX_DWORD pass_size, FX_LPBYTE key, FX_INT32 key_len); 693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL AES256_CheckPassword(FX_LPCBYTE password, FX_DWORD size, FX_BOOL bOwner, FX_LPBYTE key); 694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AES256_SetPassword(CPDF_Dictionary* pEncryptDict, FX_LPCBYTE password, FX_DWORD size, FX_BOOL bOwner, FX_LPCBYTE key); 695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AES256_SetPerms(CPDF_Dictionary* pEncryptDict, FX_DWORD permission, FX_BOOL bEncryptMetadata, FX_LPCBYTE key); 696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void OnCreate(CPDF_Dictionary* pEncryptDict, CPDF_Array* pIdArray, 697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE user_pass, FX_DWORD user_size, 698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPCBYTE owner_pass, FX_DWORD owner_size, FX_BOOL bDefault, FX_DWORD type); 699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckSecurity(FX_INT32 key_len); 700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bOwner; 702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_Permissions; 704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Cipher; 706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE m_EncryptKey[32]; 708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_KeyLen; 710ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_CryptoHandler : public CFX_Object 712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~CPDF_CryptoHandler() {} 716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler) = 0; 718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD DecryptGetSize(FX_DWORD src_size) = 0; 720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID DecryptStart(FX_DWORD objnum, FX_DWORD gennum) = 0; 722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL DecryptStream(FX_LPVOID context, FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf) = 0; 724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL DecryptFinish(FX_LPVOID context, CFX_BinaryBuf& dest_buf) = 0; 726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD EncryptGetSize(FX_DWORD objnum, FX_DWORD version, FX_LPCBYTE src_buf, FX_DWORD src_size) = 0; 729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL EncryptContent(FX_DWORD objnum, FX_DWORD version, FX_LPCBYTE src_buf, FX_DWORD src_size, 731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE dest_buf, FX_DWORD& dest_size) = 0; 732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void Decrypt(FX_DWORD objnum, FX_DWORD version, CFX_ByteString& str); 734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StandardCryptoHandler : public CPDF_CryptoHandler 736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_StandardCryptoHandler(); 740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual ~CPDF_StandardCryptoHandler(); 742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL Init(int cipher, FX_LPCBYTE key, int keylen); 744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL Init(CPDF_Dictionary* pEncryptDict, CPDF_SecurityHandler* pSecurityHandler); 745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD DecryptGetSize(FX_DWORD src_size); 746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID DecryptStart(FX_DWORD objnum, FX_DWORD gennum); 747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL DecryptStream(FX_LPVOID context, FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf); 748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL DecryptFinish(FX_LPVOID context, CFX_BinaryBuf& dest_buf); 749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_DWORD EncryptGetSize(FX_DWORD objnum, FX_DWORD version, FX_LPCBYTE src_buf, FX_DWORD src_size); 750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL EncryptContent(FX_DWORD objnum, FX_DWORD version, FX_LPCBYTE src_buf, FX_DWORD src_size, 751ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE dest_buf, FX_DWORD& dest_size); 752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void CryptBlock(FX_BOOL bEncrypt, FX_DWORD objnum, FX_DWORD gennum, FX_LPCBYTE src_buf, FX_DWORD src_size, 755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE dest_buf, FX_DWORD& dest_size); 756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_LPVOID CryptStart(FX_DWORD objnum, FX_DWORD gennum, FX_BOOL bEncrypt); 757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL CryptStream(FX_LPVOID context, FX_LPCBYTE src_buf, FX_DWORD src_size, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt); 758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL CryptFinish(FX_LPVOID context, CFX_BinaryBuf& dest_buf, FX_BOOL bEncrypt); 759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE m_EncryptKey[32]; 761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_KeyLen; 763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int m_Cipher; 765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_LPBYTE m_pAESContext; 767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Point : public CFX_Object 769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Point(FX_FLOAT xx, FX_FLOAT yy) 773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov x = xx; 775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov y = yy; 776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FLOAT x; 779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FLOAT y; 781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CPDF_Rect CFX_FloatRect 784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define CPDF_Matrix CFX_AffineMatrix 785ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString PDF_NameDecode(FX_BSTR orig); 786ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString PDF_NameDecode(const CFX_ByteString& orig); 787ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString PDF_NameEncode(const CFX_ByteString& orig); 788ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString PDF_EncodeString(const CFX_ByteString& src, FX_BOOL bHex = FALSE); 789ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString PDF_DecodeText(const CFX_ByteString& str, CFX_CharMap* pCharMap = NULL); 790ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString PDF_DecodeText(FX_LPCBYTE pData, FX_DWORD size, CFX_CharMap* pCharMap = NULL); 791ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString PDF_EncodeText(FX_LPCWSTR pString, int len = -1, CFX_CharMap* pCharMap = NULL); 792ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT PDF_ClipFloat(FX_FLOAT f); 793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFDF_Document : public CPDF_IndirectObjects 794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFDF_Document* CreateNewDoc(); 798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFDF_Document* ParseFile(FX_LPCSTR file_path); 800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFDF_Document* ParseFile(FX_LPCWSTR file_path); 802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFDF_Document* ParseFile(IFX_FileRead *pFile, FX_BOOL bOwnFile = FALSE); 804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static CFDF_Document* ParseMemory(FX_LPCBYTE pData, FX_DWORD size); 806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CFDF_Document(); 808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL WriteFile(FX_LPCSTR file_path) const; 810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL WriteFile(FX_LPCWSTR file_path) const; 812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL WriteFile(IFX_FileWrite *pFile) const; 814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL WriteBuf(CFX_ByteTextBuf& buf) const; 816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* GetRoot() const 818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pRootDict; 820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_WideString GetWin32Path() const; 823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFDF_Document(); 826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ParseStream(IFX_FileRead *pFile, FX_BOOL bOwnFile); 827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* m_pRootDict; 828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FileRead* m_pFile; 829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bOwnFile; 830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 832ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec); 833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid FPDF_FileSpec_SetWin32Path(CPDF_Object* pFileSpec, const CFX_WideString& fullpath); 834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid FlateEncode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size); 836ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_DWORD FlateDecode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size); 837ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_DWORD RunLengthDecode(const FX_BYTE* src_buf, FX_DWORD src_size, FX_LPBYTE& dest_buf, FX_DWORD& dest_size); 838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_NumberTree : public CFX_Object 839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_NumberTree(CPDF_Dictionary* pRoot) 843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pRoot = pRoot; 845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object* LookupValue(int num); 848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary* m_pRoot; 851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_FileAvail 854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsDataAvail( FX_FILESIZE offset, FX_DWORD size) = 0; 858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IFX_DownloadHints 860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void AddSegment(FX_FILESIZE offset, FX_DWORD size) = 0; 864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDF_IS_LINEARIZED 1 866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDF_NOT_LINEARIZED 0 867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDF_UNKNOW_LINEARIZED -1 868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFFORM_NOTAVAIL 0 869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFFORM_AVAIL 1 870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFFORM_NOTEXIST 2 871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass IPDF_DataAvail 872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints) = 0; 876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void SetDocument(CPDF_Document* pDoc) = 0; 879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints) = 0; 882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsLinearized() = 0; 884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_INT32 IsFormAvail(IFX_DownloadHints *pHints) = 0; 886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_INT32 IsLinearizedPDF() = 0; 888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void GetLinearizedMainXRefInfo(FX_FILESIZE *pPos, FX_DWORD *pSize) = 0; 890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_SortObjNumArray : public CFX_Object 892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void AddObjNum(FX_DWORD dwObjNum); 896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL Find(FX_DWORD dwObjNum); 898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void RemoveAll() 900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_number_array.RemoveAll(); 902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL BinarySearch(FX_DWORD value, int &iNext); 906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_DWordArray m_number_array; 909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovenum PDF_PAGENODE_TYPE { 911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_PAGENODE_UNKOWN = 0, 912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_PAGENODE_PAGE, 913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_PAGENODE_PAGES, 914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_PAGENODE_ARRAY, 915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_PageNode : public CFX_Object 917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_PageNode() : m_type(PDF_PAGENODE_UNKOWN) {} 920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CPDF_PageNode(); 921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_PAGENODE_TYPE m_type; 922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwPageNo; 923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_PtrArray m_childNode; 924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovenum PDF_DATAAVAIL_STATUS { 926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_HEADER = 0, 927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_FIRSTPAGE, 928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_FIRSTPAGE_PREPARE, 929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_END, 930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_CROSSREF, 931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_CROSSREF_ITEM, 932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_CROSSREF_STREAM, 933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_TRAILER, 934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_LOADALLCRSOSSREF, 935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_ROOT, 936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_INFO, 937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_ACROFORM, 938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_ACROFORM_SUBOBJECT, 939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_PAGETREE, 940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_PAGE, 941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_PAGE_LATERLOAD, 942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_RESOURCES, 943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_DONE, 944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_ERROR, 945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_LOADALLFILE, 946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_TRAILER_APPEND 947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_DataAvail : public CFX_Object, public IPDF_DataAvail 949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_DataAvail(IFX_FileAvail* pFileAvail, IFX_FileRead* pFileRead); 953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ~CPDF_DataAvail(); 954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsDocAvail(IFX_DownloadHints* pHints); 956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 957ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void SetDocument(CPDF_Document* pDoc); 959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsPageAvail(int iPage, IFX_DownloadHints* pHints); 962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_INT32 IsFormAvail(IFX_DownloadHints *pHints); 964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_INT32 IsLinearizedPDF(); 966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL IsLinearized() 968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_bLinearized; 970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void GetLinearizedMainXRefInfo(FX_FILESIZE *pPos, FX_DWORD *pSize); 973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FileRead* GetFileRead() const 974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pFileRead; 976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FileAvail* GetFileAvail() const 978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return m_pFileAvail; 980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD GetObjectSize(FX_DWORD objnum, FX_FILESIZE& offset); 983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsObjectsAvail(CFX_PtrArray& obj_array, FX_BOOL bParsePage, IFX_DownloadHints* pHints, CFX_PtrArray &ret_array); 984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckDocStatus(IFX_DownloadHints *pHints); 985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckHeader(IFX_DownloadHints* pHints); 986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckFirstPage(IFX_DownloadHints *pHints); 987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckEnd(IFX_DownloadHints *pHints); 988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckCrossRef(IFX_DownloadHints* pHints); 989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckCrossRefItem(IFX_DownloadHints *pHints); 990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckTrailer(IFX_DownloadHints* pHints); 991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckRoot(IFX_DownloadHints* pHints); 992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckInfo(IFX_DownloadHints* pHints); 993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckPages(IFX_DownloadHints* pHints); 994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckPage(IFX_DownloadHints* pHints); 995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckResources(IFX_DownloadHints* pHints); 996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckAnnots(IFX_DownloadHints* pHints); 997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckAcroForm(IFX_DownloadHints* pHints); 998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckAcroFormSubObject(IFX_DownloadHints* pHints); 999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckTrailerAppend(IFX_DownloadHints* pHints); 1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckPageStatus(IFX_DownloadHints* pHints); 1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckAllCrossRefStream(IFX_DownloadHints *pHints); 1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD CheckCrossRefStream(IFX_DownloadHints *pHints, FX_FILESIZE &xref_offset); 1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsLinearizedFile(FX_LPBYTE pData, FX_DWORD dwLen); 1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void SetStartOffset(FX_FILESIZE dwOffset); 1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GetNextToken(CFX_ByteString &token); 1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GetNextChar(FX_BYTE &ch); 1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object * ParseIndirectObjectAt(FX_FILESIZE pos, FX_DWORD objnum); 1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object * GetObject(FX_DWORD objnum, IFX_DownloadHints* pHints, FX_BOOL *pExistInFile); 1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL GetPageKids(CPDF_Parser *pParser, CPDF_Object *pPages); 1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL PreparePageItem(); 1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadPages(IFX_DownloadHints* pHints); 1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadAllXref(IFX_DownloadHints* pHints); 1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadAllFile(IFX_DownloadHints* pHints); 1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckLinearizedData(IFX_DownloadHints* pHints); 1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckFileResources(IFX_DownloadHints* pHints); 1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckPageAnnots(int iPage, IFX_DownloadHints* pHints); 1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckLinearizedFirstPage(int iPage, IFX_DownloadHints* pHints); 1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL HaveResourceAncestor(CPDF_Dictionary *pDict); 1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckPage(FX_INT32 iPage, IFX_DownloadHints* pHints); 1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadDocPages(IFX_DownloadHints* pHints); 1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL LoadDocPage(FX_INT32 iPage, IFX_DownloadHints* pHints); 1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckPageNode(CPDF_PageNode &pageNodes, FX_INT32 iPage, FX_INT32 &iCount, IFX_DownloadHints* pHints); 1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckUnkownPageNode(FX_DWORD dwPageNo, CPDF_PageNode *pPageNode, IFX_DownloadHints* pHints); 1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckArrayPageNode(FX_DWORD dwPageNo, CPDF_PageNode *pPageNode, IFX_DownloadHints* pHints); 1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL CheckPageCount(IFX_DownloadHints* pHints); 1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL IsFirstCheck(int iPage); 1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void ResetFirstCheck(int iPage); 1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Parser m_parser; 1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_SyntaxParser m_syntaxParser; 1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object *m_pRoot; 1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwRootObjNum; 1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwInfoObjNum; 1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object *m_pLinearized; 1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object *m_pTrailer; 1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bDocAvail; 1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_dwHeaderOffset; 1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_dwLastXRefOffset; 1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_dwXRefOffset; 1052ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_dwTrailerOffset; 1054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_dwCurrentOffset; 1056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PDF_DATAAVAIL_STATUS m_docStatus; 1058ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1059ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FileAvail* m_pFileAvail; 1060ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1061ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov IFX_FileRead* m_pFileRead; 1062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1063ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_dwFileLen; 1064ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1065ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Document* m_pDocument; 1066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_SortObjNumArray m_objnum_array; 1068ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_PtrArray m_objs_array; 1070ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1071ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_Pos; 1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_bufferOffset; 1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_bufferSize; 1076ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1077ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_ByteString m_WordBuf; 1078ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1079ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE m_WordBuffer[257]; 1080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1081ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_WordSize; 1082ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1083ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BYTE m_bufferData[512]; 1084ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1085ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_FileSizeArray m_CrossOffset; 1086ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1087ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_DWordArray m_XRefStreamList; 1088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1089ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_DWordArray m_PageObjList; 1090ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1091ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_PagesObjNum; 1092ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1093ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bLinearized; 1094ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwFirstPageNo; 1096ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1097ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bLinearedDataOK; 1098ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bMainXRefLoad; 1100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bMainXRefLoadedOK; 1102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bPagesTreeLoad; 1104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bPagesLoad; 1106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Parser * m_pCurrentParser; 1108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_dwCurrentXRefSteam; 1110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bAnnotsLoad; 1112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bHaveAcroForm; 1114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwAcroFormObjNum; 1116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bAcroFormLoad; 1118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object * m_pAcroForm; 1120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_PtrArray m_arrayAcroforms; 1122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Dictionary * m_pPageDict; 1124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Object * m_pPageResource; 1126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bNeedDownLoadResource; 1128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bPageLoadedOK; 1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bLinearizedFormParamLoad; 1132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_PtrArray m_PagesArray; 1134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_DWORD m_dwEncryptObjNum; 1136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_FILESIZE m_dwPrevXRefOffset; 1138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bTotalLoadPageTree; 1140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL m_bCurPageDictLoadOK; 1142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_PageNode m_pageNodes; 1144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_CMapDWordToDWord * m_pageMapCheckState; 1146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_CMapDWordToDWord * m_pagesLoadState; 1148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 1149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 1150