1 // Copyright 2016 The PDFium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef CORE_FPDFAPI_PAGE_CPDF_FORM_H_ 8 #define CORE_FPDFAPI_PAGE_CPDF_FORM_H_ 9 10 #include <set> 11 #include <utility> 12 13 #include "core/fpdfapi/font/cpdf_font.h" 14 #include "core/fpdfapi/page/cpdf_pageobjectholder.h" 15 #include "core/fxcrt/retain_ptr.h" 16 17 class CFX_Matrix; 18 class CPDF_AllStates; 19 class CPDF_Dictionary; 20 class CPDF_Document; 21 class CPDF_Stream; 22 class CPDF_Type3Char; 23 24 class CPDF_Form final : public CPDF_PageObjectHolder, 25 public CPDF_Font::FormIface { 26 public: 27 // Helper method to choose the first non-null resources dictionary. 28 static CPDF_Dictionary* ChooseResourcesDict(CPDF_Dictionary* pResources, 29 CPDF_Dictionary* pParentResources, 30 CPDF_Dictionary* pPageResources); 31 32 CPDF_Form(CPDF_Document* pDocument, 33 RetainPtr<CPDF_Dictionary> pPageResources, 34 RetainPtr<CPDF_Stream> pFormStream); 35 CPDF_Form(CPDF_Document* pDocument, 36 RetainPtr<CPDF_Dictionary> pPageResources, 37 RetainPtr<CPDF_Stream> pFormStream, 38 CPDF_Dictionary* pParentResources); 39 ~CPDF_Form() override; 40 41 // CPDF_Font::FormIface: 42 void ParseContentForType3Char(CPDF_Type3Char* pType3Char) override; 43 bool HasPageObjects() const override; 44 CFX_FloatRect CalcBoundingBox() const override; 45 absl::optional<std::pair<RetainPtr<CFX_DIBitmap>, CFX_Matrix>> 46 GetBitmapAndMatrixFromSoleImageOfForm() const override; 47 48 void ParseContent(); 49 void ParseContent(const CPDF_AllStates* pGraphicStates, 50 const CFX_Matrix* pParentMatrix, 51 std::set<const uint8_t*>* pParsedSet); 52 53 RetainPtr<const CPDF_Stream> GetStream() const; 54 55 private: 56 void ParseContentInternal(const CPDF_AllStates* pGraphicStates, 57 const CFX_Matrix* pParentMatrix, 58 CPDF_Type3Char* pType3Char, 59 std::set<const uint8_t*>* pParsedSet); 60 61 std::set<const uint8_t*> m_ParsedSet; 62 RetainPtr<CPDF_Stream> const m_pFormStream; 63 }; 64 65 #endif // CORE_FPDFAPI_PAGE_CPDF_FORM_H_ 66