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