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