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_PAGE_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _FPDF_PAGE_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FPDF_PARSER_
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fpdf_parser.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FPDF_RESOURCE_
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "fpdf_resource.h"
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _FX_DIB_H_
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../fxge/fx_dib.h"
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_PageObjects;
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Page;
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Form;
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_ParseOptions;
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_PageObject;
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_PageRenderCache;
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StreamFilter;
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_AllStates;
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_ContentParser;
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_StreamContentParser;
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_ResourceNaming;
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFTRANS_GROUP			0x0100
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFTRANS_ISOLATED		0x0200
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDFTRANS_KNOCKOUT		0x0400
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDF_CONTENT_NOT_PARSED	0
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDF_CONTENT_PARSING		1
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define PDF_CONTENT_PARSED		2
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_PageObjects : public CFX_Object
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_PageObjects(FX_BOOL bReleaseMembers = TRUE);
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_PageObjects();
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void				ContinueParse(IFX_Pause* pPause);
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int					GetParseState() const
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_ParseState;
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL				IsParsed() const
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_ParseState == PDF_CONTENT_PARSED;
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int					EstimateParseProgress() const;
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_POSITION			GetFirstObjectPosition() const
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_ObjectList.GetHeadPosition();
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_POSITION			GetLastObjectPosition() const
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_ObjectList.GetTailPosition();
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_PageObject*	GetNextObject(FX_POSITION& pos) const
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return (CPDF_PageObject*)m_ObjectList.GetNext(pos);
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_PageObject*	GetPrevObject(FX_POSITION& pos) const
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return (CPDF_PageObject*)m_ObjectList.GetPrev(pos);
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_PageObject*	GetObjectAt(FX_POSITION pos) const
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return (CPDF_PageObject*)m_ObjectList.GetAt(pos);
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_DWORD			CountObjects() const
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_ObjectList.GetCount();
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int					GetObjectIndex(CPDF_PageObject* pObj) const;
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_PageObject*	GetObjectByIndex(int index) const;
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_POSITION			InsertObject(FX_POSITION posInsertAfter, CPDF_PageObject* pNewObject);
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void				Transform(const CFX_AffineMatrix& matrix);
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL				BackgroundAlphaNeeded() const
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_bBackgroundAlphaNeeded;
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_FloatRect		CalcBoundingBox() const;
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary*	m_pFormDict;
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Stream*		m_pFormStream;
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Document*		m_pDocument;
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary*	m_pPageResources;
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Dictionary*	m_pResources;
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_FloatRect		m_BBox;
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    int					m_Transparency;
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class		CPDF_ContentParser;
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class		CPDF_StreamContentParser;
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class		CPDF_AllStates;
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_PtrList			m_ObjectList;
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL				m_bBackgroundAlphaNeeded;
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL				m_bReleaseMembers;
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void				LoadTransInfo();
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void                ClearCacheObjects();
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ContentParser*	m_pParser;
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL				m_ParseState;
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Page : public CPDF_PageObjects, public CFX_PrivateData
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Page();
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_Page();
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void				Load(CPDF_Document* pDocument, CPDF_Dictionary* pPageDict, FX_BOOL bPageCache = TRUE);
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void				StartParse(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void				ParseContent(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void				GetDisplayMatrix(CFX_AffineMatrix& matrix, int xPos, int yPos,
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                         int xSize, int ySize, int iRotate) const;
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT			GetPageWidth() const
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_PageWidth;
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT			GetPageHeight() const
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_PageHeight;
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_FloatRect		GetPageBBox() const
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_BBox;
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    const CFX_AffineMatrix&	GetPageMatrix() const
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_PageMatrix;
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Object*		GetPageAttr(FX_BSTR name) const;
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_PageRenderCache*	GetRenderCache() const
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    {
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        return m_pPageRender;
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    }
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void				ClearRenderCache();
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    friend class		CPDF_ContentParser;
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT			m_PageWidth;
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_FLOAT			m_PageHeight;
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_AffineMatrix	m_PageMatrix;
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_PageRenderCache*	m_pPageRender;
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_ParseOptions : public CFX_Object
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_ParseOptions();
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL				m_bTextOnly;
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL				m_bMarkedContent;
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL				m_bSeparateForm;
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL				m_bDecodeInlineImage;
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_Form : public CPDF_PageObjects
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Form(CPDF_Document* pDocument, CPDF_Dictionary* pPageResources, CPDF_Stream* pFormStream, CPDF_Dictionary* pParentResources = NULL);
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_Form();
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void				StartParse(CPDF_AllStates* pGraphicStates,  CFX_AffineMatrix* pParentMatrix,
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                   CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level = 0);
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void				ParseContent(CPDF_AllStates* pGraphicStates, CFX_AffineMatrix* pParentMatrix,
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                     CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level = 0);
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Form*			Clone() const;
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CPDF_PageContentGenerate : public CFX_Object
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_PageContentGenerate(CPDF_Page* pPage);
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    ~CPDF_PageContentGenerate();
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    FX_BOOL InsertPageObject(CPDF_PageObject* pPageObject);
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void GenerateContent();
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void TransformContent(CFX_Matrix& matrix);
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void            ProcessImage(CFX_ByteTextBuf& buf, CPDF_ImageObject* pImageObj);
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    void            ProcessForm(CFX_ByteTextBuf& buf, FX_LPCBYTE data, FX_DWORD size, CFX_Matrix& matrix);
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_ByteString  RealizeResource(CPDF_Object* pResourceObj, const FX_CHAR* szType);
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Page*      m_pPage;
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CPDF_Document*  m_pDocument;
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    CFX_PtrArray    m_pageObjects;
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
250