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.
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_
8 #define CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_
10 #include "../fxge/fx_dib.h"
11 #include "fpdf_parser.h"
12 #include "fpdf_resource.h"
14 class CPDF_PageObjects;
17 class CPDF_ParseOptions;
18 class CPDF_PageObject;
19 class CPDF_PageRenderCache;
20 class CPDF_StreamFilter;
22 class CPDF_ContentParser;
23 class CPDF_StreamContentParser;
24 class CPDF_ResourceNaming;
25 #define PDFTRANS_GROUP 0x0100
26 #define PDFTRANS_ISOLATED 0x0200
27 #define PDFTRANS_KNOCKOUT 0x0400
28 #define PDF_CONTENT_NOT_PARSED 0
29 #define PDF_CONTENT_PARSING 1
30 #define PDF_CONTENT_PARSED 2
31 class CPDF_PageObjects
35 CPDF_PageObjects(FX_BOOL bReleaseMembers = TRUE);
42 void ContinueParse(IFX_Pause* pPause);
44 int GetParseState() const
49 FX_BOOL IsParsed() const
51 return m_ParseState == PDF_CONTENT_PARSED;
54 int EstimateParseProgress() const;
59 FX_POSITION GetFirstObjectPosition() const
61 return m_ObjectList.GetHeadPosition();
64 FX_POSITION GetLastObjectPosition() const
66 return m_ObjectList.GetTailPosition();
69 CPDF_PageObject* GetNextObject(FX_POSITION& pos) const
71 return (CPDF_PageObject*)m_ObjectList.GetNext(pos);
74 CPDF_PageObject* GetPrevObject(FX_POSITION& pos) const
76 return (CPDF_PageObject*)m_ObjectList.GetPrev(pos);
79 CPDF_PageObject* GetObjectAt(FX_POSITION pos) const
81 return (CPDF_PageObject*)m_ObjectList.GetAt(pos);
84 FX_DWORD CountObjects() const
86 return m_ObjectList.GetCount();
89 int GetObjectIndex(CPDF_PageObject* pObj) const;
91 CPDF_PageObject* GetObjectByIndex(int index) const;
97 FX_POSITION InsertObject(FX_POSITION posInsertAfter, CPDF_PageObject* pNewObject);
99 void Transform(const CFX_AffineMatrix& matrix);
101 FX_BOOL BackgroundAlphaNeeded() const
103 return m_bBackgroundAlphaNeeded;
106 CFX_FloatRect CalcBoundingBox() const;
108 CPDF_Dictionary* m_pFormDict;
110 CPDF_Stream* m_pFormStream;
112 CPDF_Document* m_pDocument;
114 CPDF_Dictionary* m_pPageResources;
116 CPDF_Dictionary* m_pResources;
118 CFX_FloatRect m_BBox;
123 friend class CPDF_ContentParser;
124 friend class CPDF_StreamContentParser;
125 friend class CPDF_AllStates;
127 CFX_PtrList m_ObjectList;
129 FX_BOOL m_bBackgroundAlphaNeeded;
131 FX_BOOL m_bReleaseMembers;
132 void LoadTransInfo();
133 void ClearCacheObjects();
135 CPDF_ContentParser* m_pParser;
137 FX_BOOL m_ParseState;
139 class CPDF_Page : public CPDF_PageObjects, public CFX_PrivateData
147 void Load(CPDF_Document* pDocument, CPDF_Dictionary* pPageDict, FX_BOOL bPageCache = TRUE);
149 void StartParse(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);
151 void ParseContent(CPDF_ParseOptions* pOptions = NULL, FX_BOOL bReParse = FALSE);
153 void GetDisplayMatrix(CFX_AffineMatrix& matrix, int xPos, int yPos,
154 int xSize, int ySize, int iRotate) const;
156 FX_FLOAT GetPageWidth() const
161 FX_FLOAT GetPageHeight() const
166 CFX_FloatRect GetPageBBox() const
171 const CFX_AffineMatrix& GetPageMatrix() const
176 CPDF_Object* GetPageAttr(FX_BSTR name) const;
180 CPDF_PageRenderCache* GetRenderCache() const
182 return m_pPageRender;
185 void ClearRenderCache();
188 friend class CPDF_ContentParser;
190 FX_FLOAT m_PageWidth;
192 FX_FLOAT m_PageHeight;
194 CFX_AffineMatrix m_PageMatrix;
196 CPDF_PageRenderCache* m_pPageRender;
198 class CPDF_ParseOptions
206 FX_BOOL m_bMarkedContent;
208 FX_BOOL m_bSeparateForm;
210 FX_BOOL m_bDecodeInlineImage;
212 class CPDF_Form : public CPDF_PageObjects
216 CPDF_Form(CPDF_Document* pDocument, CPDF_Dictionary* pPageResources, CPDF_Stream* pFormStream, CPDF_Dictionary* pParentResources = NULL);
220 void StartParse(CPDF_AllStates* pGraphicStates, CFX_AffineMatrix* pParentMatrix,
221 CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level = 0);
223 void ParseContent(CPDF_AllStates* pGraphicStates, CFX_AffineMatrix* pParentMatrix,
224 CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOptions, int level = 0);
226 CPDF_Form* Clone() const;
228 class CPDF_PageContentGenerate
231 CPDF_PageContentGenerate(CPDF_Page* pPage);
232 ~CPDF_PageContentGenerate();
233 FX_BOOL InsertPageObject(CPDF_PageObject* pPageObject);
234 void GenerateContent();
235 void TransformContent(CFX_Matrix& matrix);
237 void ProcessImage(CFX_ByteTextBuf& buf, CPDF_ImageObject* pImageObj);
238 void ProcessForm(CFX_ByteTextBuf& buf, const uint8_t* data, FX_DWORD size, CFX_Matrix& matrix);
239 CFX_ByteString RealizeResource(CPDF_Object* pResourceObj, const FX_CHAR* szType);
242 CPDF_Document* m_pDocument;
243 CFX_PtrArray m_pageObjects;
246 #endif // CORE_INCLUDE_FPDFAPI_FPDF_PAGE_H_