1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_SERIAL_H_ 8 #define CORE_INCLUDE_FPDFAPI_FPDF_SERIAL_H_ 9 10 #include "fpdf_page.h" 11 #include "fpdf_pageobj.h" 12 13 class CPDF_ObjectStream; 14 class CPDF_XRefStream; 15 CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj); 16 #define FPDFCREATE_INCREMENTAL 1 17 #define FPDFCREATE_NO_ORIGINAL 2 18 #define FPDFCREATE_PROGRESSIVE 4 19 #define FPDFCREATE_OBJECTSTREAM 8 20 21 class CPDF_Creator { 22 public: 23 CPDF_Creator(CPDF_Document* pDoc); 24 ~CPDF_Creator(); 25 26 void RemoveSecurity(); 27 FX_BOOL Create(IFX_StreamWrite* pFile, FX_DWORD flags = 0); 28 int32_t Continue(IFX_Pause* pPause = NULL); 29 FX_BOOL SetFileVersion(int32_t fileVersion = 17); 30 31 protected: 32 CPDF_Document* m_pDocument; 33 34 CPDF_Parser* m_pParser; 35 36 FX_BOOL m_bCompress; 37 38 FX_BOOL m_bSecurityChanged; 39 40 CPDF_Dictionary* m_pEncryptDict; 41 FX_DWORD m_dwEnryptObjNum; 42 FX_BOOL m_bEncryptCloned; 43 44 FX_BOOL m_bStandardSecurity; 45 46 CPDF_CryptoHandler* m_pCryptoHandler; 47 FX_BOOL m_bNewCrypto; 48 49 FX_BOOL m_bEncryptMetadata; 50 51 CPDF_Object* m_pMetadata; 52 53 CPDF_XRefStream* m_pXRefStream; 54 55 int32_t m_ObjectStreamSize; 56 57 FX_DWORD m_dwLastObjNum; 58 FX_BOOL Create(FX_DWORD flags); 59 void ResetStandardSecurity(); 60 void Clear(); 61 int32_t WriteDoc_Stage1(IFX_Pause* pPause); 62 int32_t WriteDoc_Stage2(IFX_Pause* pPause); 63 int32_t WriteDoc_Stage3(IFX_Pause* pPause); 64 int32_t WriteDoc_Stage4(IFX_Pause* pPause); 65 66 CFX_FileBufferArchive m_File; 67 68 FX_FILESIZE m_Offset; 69 void InitOldObjNumOffsets(); 70 void InitNewObjNumOffsets(); 71 void AppendNewObjNum(FX_DWORD objbum); 72 int32_t WriteOldIndirectObject(FX_DWORD objnum); 73 int32_t WriteOldObjs(IFX_Pause* pPause); 74 int32_t WriteNewObjs(FX_BOOL bIncremental, IFX_Pause* pPause); 75 int32_t WriteIndirectObj(const CPDF_Object* pObj); 76 int32_t WriteDirectObj(FX_DWORD objnum, 77 const CPDF_Object* pObj, 78 FX_BOOL bEncrypt = TRUE); 79 int32_t WriteIndirectObjectToStream(const CPDF_Object* pObj); 80 int32_t WriteIndirectObj(FX_DWORD objnum, const CPDF_Object* pObj); 81 int32_t WriteIndirectObjectToStream(FX_DWORD objnum, 82 const uint8_t* pBuffer, 83 FX_DWORD dwSize); 84 int32_t AppendObjectNumberToXRef(FX_DWORD objnum); 85 void InitID(FX_BOOL bDefault = TRUE); 86 int32_t WriteStream(const CPDF_Object* pStream, 87 FX_DWORD objnum, 88 CPDF_CryptoHandler* pCrypto); 89 90 int32_t m_iStage; 91 FX_DWORD m_dwFlags; 92 FX_POSITION m_Pos; 93 FX_FILESIZE m_XrefStart; 94 CFX_FileSizeListArray m_ObjectOffset; 95 CFX_DWordArray m_NewObjNumArray; 96 CPDF_Array* m_pIDArray; 97 int32_t m_FileVersion; 98 99 friend class CPDF_ObjectStream; 100 friend class CPDF_XRefStream; 101 }; 102 103 #endif // CORE_INCLUDE_FPDFAPI_FPDF_SERIAL_H_ 104