OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #ifndef _FPDF_SERIAL_ | 7 #ifndef _FPDF_SERIAL_ |
8 #define _FPDF_SERIAL_ | 8 #define _FPDF_SERIAL_ |
9 #ifndef _FPDF_PAGE_ | 9 #ifndef _FPDF_PAGE_ |
10 #include "fpdf_page.h" | 10 #include "fpdf_page.h" |
11 #endif | 11 #endif |
12 #ifndef _FPDF_PAGEOBJ_H_ | 12 #ifndef _FPDF_PAGEOBJ_H_ |
13 #include "fpdf_pageobj.h" | 13 #include "fpdf_pageobj.h" |
14 #endif | 14 #endif |
15 class CPDF_ObjectStream; | 15 class CPDF_ObjectStream; |
16 class CPDF_XRefStream; | 16 class CPDF_XRefStream; |
17 CFX_ByteTextBuf& operator << (CFX_ByteTextBuf& buf, const CPDF_Object* pObj); | 17 CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj); |
18 class CPDF_ObjArchiveSaver : public CFX_ArchiveSaver | 18 class CPDF_ObjArchiveSaver : public CFX_ArchiveSaver { |
19 { | 19 public: |
20 public: | 20 friend CPDF_ObjArchiveSaver& operator<<(CPDF_ObjArchiveSaver& ar, |
| 21 const CPDF_Object* pObj); |
21 | 22 |
22 friend CPDF_ObjArchiveSaver&» operator << (CPDF_ObjArchiveSaver& ar, c
onst CPDF_Object* pObj); | 23 protected: |
23 protected: | 24 CFX_MapPtrToPtr m_ObjectMap; |
| 25 }; |
| 26 class CPDF_ObjArchiveLoader : public CFX_ArchiveLoader { |
| 27 public: |
| 28 CPDF_ObjArchiveLoader(FX_LPCBYTE pData, FX_DWORD dwSize) |
| 29 : CFX_ArchiveLoader(pData, dwSize), m_IndirectObjects(NULL) {} |
24 | 30 |
25 CFX_MapPtrToPtr» » » m_ObjectMap; | 31 friend CPDF_ObjArchiveLoader& operator>>(CPDF_ObjArchiveLoader& ar, |
| 32 CPDF_Object*& pObj); |
| 33 |
| 34 protected: |
| 35 CPDF_IndirectObjects m_IndirectObjects; |
26 }; | 36 }; |
27 class CPDF_ObjArchiveLoader : public CFX_ArchiveLoader | 37 class CPDF_PageArchiveSaver : public CPDF_ObjArchiveSaver { |
28 { | 38 public: |
29 public: | 39 CPDF_PageArchiveSaver(CPDF_PageObjects* pPageObjs); |
30 | 40 |
31 CPDF_ObjArchiveLoader(FX_LPCBYTE pData, FX_DWORD dwSize) : CFX_ArchiveLoader
(pData, dwSize), | 41 friend CPDF_PageArchiveSaver& operator<<(CPDF_PageArchiveSaver& ar, |
32 m_IndirectObjects(NULL) {} | 42 CPDF_PageObject* pObj); |
33 | 43 |
34 friend CPDF_ObjArchiveLoader&» operator >> (CPDF_ObjArchiveLoader& ar,
CPDF_Object*& pObj); | 44 friend CPDF_PageArchiveSaver& operator<<(CPDF_PageArchiveSaver& ar, |
35 protected: | 45 CPDF_ClipPath clip_path); |
36 | 46 |
37 CPDF_IndirectObjects» » m_IndirectObjects; | 47 friend CPDF_PageArchiveSaver& operator<<(CPDF_PageArchiveSaver& ar, |
| 48 CPDF_GraphState graph_state); |
| 49 |
| 50 friend CPDF_PageArchiveSaver& operator<<(CPDF_PageArchiveSaver& ar, |
| 51 CPDF_TextState text_state); |
| 52 |
| 53 friend CPDF_PageArchiveSaver& operator<<(CPDF_PageArchiveSaver& ar, |
| 54 CPDF_ColorState color_state); |
| 55 |
| 56 friend CPDF_PageArchiveSaver& operator<<(CPDF_PageArchiveSaver& ar, |
| 57 CPDF_GeneralState general_state); |
| 58 |
| 59 protected: |
| 60 CPDF_ClipPath m_LastClipPath; |
| 61 |
| 62 CPDF_GraphState m_LastGraphState; |
| 63 |
| 64 CPDF_ColorState m_LastColorState; |
| 65 |
| 66 CPDF_TextState m_LastTextState; |
| 67 |
| 68 CPDF_GeneralState m_LastGeneralState; |
| 69 |
| 70 CPDF_PageObjects* m_pCurPage; |
38 }; | 71 }; |
39 class CPDF_PageArchiveSaver : public CPDF_ObjArchiveSaver | 72 class CPDF_PageArchiveLoader : public CPDF_ObjArchiveLoader { |
40 { | 73 public: |
41 public: | 74 CPDF_PageArchiveLoader(CPDF_PageObjects* pPageObjs, |
| 75 FX_LPCBYTE pData, |
| 76 FX_DWORD dwSize); |
42 | 77 |
43 CPDF_PageArchiveSaver(CPDF_PageObjects* pPageObjs); | 78 friend CPDF_PageArchiveLoader& operator>>(CPDF_PageArchiveLoader& ar, |
| 79 CPDF_PageObject*& pObj); |
44 | 80 |
45 friend CPDF_PageArchiveSaver&» operator << (CPDF_PageArchiveSaver& ar,
CPDF_PageObject* pObj); | 81 friend CPDF_PageArchiveLoader& operator>>(CPDF_PageArchiveLoader& ar, |
| 82 CPDF_ClipPath& clip_path); |
46 | 83 |
| 84 friend CPDF_PageArchiveLoader& operator>>(CPDF_PageArchiveLoader& ar, |
| 85 CPDF_GraphState& graph_state); |
47 | 86 |
| 87 friend CPDF_PageArchiveLoader& operator>>(CPDF_PageArchiveLoader& ar, |
| 88 CPDF_TextState& text_state); |
48 | 89 |
49 friend CPDF_PageArchiveSaver&» operator << (CPDF_PageArchiveSaver& ar,
CPDF_ClipPath clip_path); | 90 friend CPDF_PageArchiveLoader& operator>>(CPDF_PageArchiveLoader& ar, |
| 91 CPDF_ColorState& color_state); |
50 | 92 |
51 friend CPDF_PageArchiveSaver&» operator << (CPDF_PageArchiveSaver& ar,
CPDF_GraphState graph_state); | 93 friend CPDF_PageArchiveLoader& operator>>(CPDF_PageArchiveLoader& ar, |
| 94 CPDF_GeneralState& general_state); |
52 | 95 |
53 friend CPDF_PageArchiveSaver&» operator << (CPDF_PageArchiveSaver& ar,
CPDF_TextState text_state); | 96 protected: |
| 97 void PostProcColor(CPDF_Color& color); |
54 | 98 |
55 friend CPDF_PageArchiveSaver&» operator << (CPDF_PageArchiveSaver& ar,
CPDF_ColorState color_state); | 99 CPDF_Object* AddResource(CPDF_Object* pSrcObj, FX_LPCSTR type); |
56 | 100 |
57 friend CPDF_PageArchiveSaver&» operator << (CPDF_PageArchiveSaver& ar,
CPDF_GeneralState general_state); | 101 CPDF_ClipPath m_LastClipPath; |
58 | 102 |
59 protected: | 103 CPDF_GraphState m_LastGraphState; |
60 | 104 |
61 CPDF_ClipPath» » m_LastClipPath; | 105 CPDF_ColorState m_LastColorState; |
62 | 106 |
63 CPDF_GraphState» » m_LastGraphState; | 107 CPDF_TextState m_LastTextState; |
64 | 108 |
65 CPDF_ColorState» » m_LastColorState; | 109 CPDF_GeneralState m_LastGeneralState; |
66 | 110 |
67 CPDF_TextState» » m_LastTextState; | 111 CPDF_PageObjects* m_pCurPage; |
68 | 112 |
69 CPDF_GeneralState» m_LastGeneralState; | 113 CFX_MapPtrToPtr m_ObjectMap; |
| 114 }; |
| 115 #define FPDFCREATE_INCREMENTAL 1 |
| 116 #define FPDFCREATE_NO_ORIGINAL 2 |
| 117 #define FPDFCREATE_PROGRESSIVE 4 |
| 118 #define FPDFCREATE_OBJECTSTREAM 8 |
| 119 class CPDF_Creator : public CFX_Object { |
| 120 public: |
| 121 CPDF_Creator(CPDF_Document* pDoc); |
70 | 122 |
71 CPDF_PageObjects*» m_pCurPage; | 123 ~CPDF_Creator(); |
72 }; | |
73 class CPDF_PageArchiveLoader : public CPDF_ObjArchiveLoader | |
74 { | |
75 public: | |
76 | 124 |
77 CPDF_PageArchiveLoader(CPDF_PageObjects* pPageObjs, FX_LPCBYTE pData, FX_DWO
RD dwSize); | 125 void RemoveSecurity(); |
78 | 126 |
79 friend CPDF_PageArchiveLoader&» operator >> (CPDF_PageArchiveLoader& ar,
CPDF_PageObject*& pObj); | 127 FX_BOOL Create(FX_LPCWSTR filename, FX_DWORD flags = 0); |
80 | 128 |
| 129 FX_BOOL Create(FX_LPCSTR filename, FX_DWORD flags = 0); |
81 | 130 |
| 131 FX_BOOL Create(IFX_StreamWrite* pFile, FX_DWORD flags = 0); |
82 | 132 |
83 friend CPDF_PageArchiveLoader&» operator >> (CPDF_PageArchiveLoader& ar,
CPDF_ClipPath& clip_path); | 133 FX_INT32 Continue(IFX_Pause* pPause = NULL); |
84 | 134 |
85 friend CPDF_PageArchiveLoader&» operator >> (CPDF_PageArchiveLoader& ar,
CPDF_GraphState& graph_state); | 135 FX_BOOL SetFileVersion(FX_INT32 fileVersion = 17); |
86 | 136 |
87 friend CPDF_PageArchiveLoader&» operator >> (CPDF_PageArchiveLoader& ar,
CPDF_TextState& text_state); | 137 protected: |
| 138 CPDF_Document* m_pDocument; |
88 | 139 |
89 friend CPDF_PageArchiveLoader&» operator >> (CPDF_PageArchiveLoader& ar,
CPDF_ColorState& color_state); | 140 CPDF_Parser* m_pParser; |
90 | 141 |
91 friend CPDF_PageArchiveLoader&» operator >> (CPDF_PageArchiveLoader& ar,
CPDF_GeneralState& general_state); | 142 FX_BOOL m_bCompress; |
92 | 143 |
93 protected: | 144 FX_BOOL m_bSecurityChanged; |
94 void» » » » PostProcColor(CPDF_Color& color); | |
95 | 145 |
96 CPDF_Object*» » AddResource(CPDF_Object* pSrcObj, FX_LPCSTR type
); | 146 CPDF_Dictionary* m_pEncryptDict; |
| 147 FX_DWORD m_dwEnryptObjNum; |
| 148 FX_BOOL m_bEncryptCloned; |
97 | 149 |
98 CPDF_ClipPath» » m_LastClipPath; | 150 FX_BOOL m_bStandardSecurity; |
99 | 151 |
100 CPDF_GraphState» » m_LastGraphState; | 152 CPDF_CryptoHandler* m_pCryptoHandler; |
| 153 FX_BOOL m_bNewCrypto; |
101 | 154 |
102 CPDF_ColorState» » m_LastColorState; | 155 FX_BOOL m_bEncryptMetadata; |
103 | 156 |
104 CPDF_TextState» » m_LastTextState; | 157 CPDF_Object* m_pMetadata; |
105 | 158 |
106 CPDF_GeneralState» m_LastGeneralState; | 159 CPDF_XRefStream* m_pXRefStream; |
107 | 160 |
108 CPDF_PageObjects*» m_pCurPage; | 161 FX_INT32 m_ObjectStreamSize; |
109 | 162 |
110 CFX_MapPtrToPtr» » m_ObjectMap; | 163 FX_DWORD m_dwLastObjNum; |
111 }; | 164 FX_BOOL Create(FX_DWORD flags); |
112 #define FPDFCREATE_INCREMENTAL» » 1 | 165 void ResetStandardSecurity(); |
113 #define FPDFCREATE_NO_ORIGINAL» » 2 | 166 void Clear(); |
114 #define FPDFCREATE_PROGRESSIVE» » 4 | 167 FX_INT32 WriteDoc_Stage1(IFX_Pause* pPause); |
115 #define FPDFCREATE_OBJECTSTREAM»» 8 | 168 FX_INT32 WriteDoc_Stage2(IFX_Pause* pPause); |
116 class CPDF_Creator : public CFX_Object | 169 FX_INT32 WriteDoc_Stage3(IFX_Pause* pPause); |
117 { | 170 FX_INT32 WriteDoc_Stage4(IFX_Pause* pPause); |
118 public: | |
119 | 171 |
120 CPDF_Creator(CPDF_Document* pDoc); | 172 CFX_FileBufferArchive m_File; |
121 | 173 |
122 ~CPDF_Creator(); | 174 FX_FILESIZE m_Offset; |
| 175 void InitOldObjNumOffsets(); |
| 176 void InitNewObjNumOffsets(); |
| 177 void AppendNewObjNum(FX_DWORD objbum); |
| 178 FX_INT32 WriteOldIndirectObject(FX_DWORD objnum); |
| 179 FX_INT32 WriteOldObjs(IFX_Pause* pPause); |
| 180 FX_INT32 WriteNewObjs(FX_BOOL bIncremental, IFX_Pause* pPause); |
| 181 FX_INT32 WriteIndirectObj(const CPDF_Object* pObj); |
| 182 FX_INT32 WriteDirectObj(FX_DWORD objnum, |
| 183 const CPDF_Object* pObj, |
| 184 FX_BOOL bEncrypt = TRUE); |
| 185 FX_INT32 WriteIndirectObjectToStream(const CPDF_Object* pObj); |
| 186 FX_INT32 WriteIndirectObj(FX_DWORD objnum, const CPDF_Object* pObj); |
| 187 FX_INT32 WriteIndirectObjectToStream(FX_DWORD objnum, |
| 188 FX_LPCBYTE pBuffer, |
| 189 FX_DWORD dwSize); |
| 190 FX_INT32 AppendObjectNumberToXRef(FX_DWORD objnum); |
| 191 void InitID(FX_BOOL bDefault = TRUE); |
| 192 FX_INT32 WriteStream(const CPDF_Object* pStream, |
| 193 FX_DWORD objnum, |
| 194 CPDF_CryptoHandler* pCrypto); |
123 | 195 |
124 void» » » » RemoveSecurity(); | 196 FX_INT32 m_iStage; |
| 197 FX_DWORD m_dwFlags; |
| 198 FX_POSITION m_Pos; |
| 199 FX_FILESIZE m_XrefStart; |
125 | 200 |
126 FX_BOOL» » » » Create(FX_LPCWSTR filename, FX_DWORD fla
gs = 0); | 201 CFX_FileSizeListArray m_ObjectOffset; |
127 | 202 |
128 FX_BOOL» » » » Create(FX_LPCSTR filename, FX_DWORD flag
s = 0); | 203 CFX_DWordListArray m_ObjectSize; |
| 204 CFX_DWordArray m_NewObjNumArray; |
129 | 205 |
130 FX_BOOL» » » » Create(IFX_StreamWrite* pFile, FX_DWORD
flags = 0); | 206 CPDF_Array* m_pIDArray; |
131 | 207 |
132 FX_INT32» » » Continue(IFX_Pause *pPause = NULL); | 208 FX_INT32 m_FileVersion; |
133 | 209 friend class CPDF_ObjectStream; |
134 FX_BOOL» » » » SetFileVersion(FX_INT32 fileVersion = 17
); | 210 friend class CPDF_XRefStream; |
135 protected: | |
136 | |
137 CPDF_Document*» » m_pDocument; | |
138 | |
139 CPDF_Parser*» » m_pParser; | |
140 | |
141 FX_BOOL» » » » m_bCompress; | |
142 | |
143 FX_BOOL» » » » m_bSecurityChanged; | |
144 | |
145 CPDF_Dictionary*» m_pEncryptDict; | |
146 FX_DWORD» » » m_dwEnryptObjNum; | |
147 FX_BOOL» » » » m_bEncryptCloned; | |
148 | |
149 FX_BOOL» » » » m_bStandardSecurity; | |
150 | |
151 CPDF_CryptoHandler*»m_pCryptoHandler; | |
152 FX_BOOL» » » » m_bNewCrypto; | |
153 | |
154 FX_BOOL» » » » m_bEncryptMetadata; | |
155 | |
156 CPDF_Object*» » m_pMetadata; | |
157 | |
158 CPDF_XRefStream*» m_pXRefStream; | |
159 | |
160 FX_INT32» » » m_ObjectStreamSize; | |
161 | |
162 FX_DWORD» » » m_dwLastObjNum; | |
163 FX_BOOL» » » » Create(FX_DWORD flags); | |
164 void» » » » ResetStandardSecurity(); | |
165 void» » » » Clear(); | |
166 FX_INT32» » » WriteDoc_Stage1(IFX_Pause *pPause); | |
167 FX_INT32» » » WriteDoc_Stage2(IFX_Pause *pPause); | |
168 FX_INT32» » » WriteDoc_Stage3(IFX_Pause *pPause); | |
169 FX_INT32» » » WriteDoc_Stage4(IFX_Pause *pPause); | |
170 | |
171 CFX_FileBufferArchive» m_File; | |
172 | |
173 FX_FILESIZE»» » m_Offset; | |
174 void» » » » InitOldObjNumOffsets(); | |
175 void» » » » InitNewObjNumOffsets(); | |
176 void» » » » AppendNewObjNum(FX_DWORD objbum); | |
177 FX_INT32» » » WriteOldIndirectObject(FX_DWORD objnum); | |
178 FX_INT32» » » WriteOldObjs(IFX_Pause *pPause); | |
179 FX_INT32» » » WriteNewObjs(FX_BOOL bIncremental, IFX_Pause *pP
ause); | |
180 FX_INT32» » » WriteIndirectObj(const CPDF_Object* pObj); | |
181 FX_INT32» » » WriteDirectObj(FX_DWORD objnum, const CPDF_Objec
t* pObj, FX_BOOL bEncrypt = TRUE); | |
182 FX_INT32» » » WriteIndirectObjectToStream(const CPDF_Object* p
Obj); | |
183 FX_INT32» » » WriteIndirectObj(FX_DWORD objnum, const CPDF_Obj
ect* pObj); | |
184 FX_INT32» » » WriteIndirectObjectToStream(FX_DWORD objnum, FX_
LPCBYTE pBuffer, FX_DWORD dwSize); | |
185 FX_INT32» » » AppendObjectNumberToXRef(FX_DWORD objnum); | |
186 void» » » » InitID(FX_BOOL bDefault = TRUE); | |
187 FX_INT32» » » WriteStream(const CPDF_Object* pStream, FX_DWORD
objnum, CPDF_CryptoHandler* pCrypto); | |
188 | |
189 FX_INT32» » » m_iStage; | |
190 FX_DWORD» » » m_dwFlags; | |
191 FX_POSITION»» » m_Pos; | |
192 FX_FILESIZE»» » m_XrefStart; | |
193 | |
194 CFX_FileSizeListArray» m_ObjectOffset; | |
195 | |
196 CFX_DWordListArray» » m_ObjectSize; | |
197 CFX_DWordArray» » m_NewObjNumArray; | |
198 | |
199 CPDF_Array*»» » m_pIDArray; | |
200 | |
201 FX_INT32» » » m_FileVersion; | |
202 friend class CPDF_ObjectStream; | |
203 friend class CPDF_XRefStream; | |
204 }; | 211 }; |
205 #endif | 212 #endif |
OLD | NEW |