// Copyright 2016 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef CORE_FPDFAPI_PAGE_CPDF_DOCPAGEDATA_H_ #define CORE_FPDFAPI_PAGE_CPDF_DOCPAGEDATA_H_ #include #include #include #include "core/fpdfapi/font/cpdf_font.h" #include "core/fpdfapi/page/cpdf_colorspace.h" #include "core/fpdfapi/parser/cpdf_document.h" #include "core/fxcrt/fx_coordinates.h" #include "core/fxcrt/fx_string.h" #include "core/fxcrt/observed_ptr.h" #include "core/fxcrt/retain_ptr.h" #include "core/fxcrt/unowned_ptr.h" class CFX_Font; class CPDF_Dictionary; class CPDF_FontEncoding; class CPDF_IccProfile; class CPDF_Image; class CPDF_Object; class CPDF_Pattern; class CPDF_Stream; class CPDF_StreamAcc; class CPDF_DocPageData : public CPDF_Document::PageDataIface, public CPDF_Font::FormFactoryIface { public: static CPDF_DocPageData* FromDocument(const CPDF_Document* pDoc); CPDF_DocPageData(); ~CPDF_DocPageData() override; // CPDF_Document::PageDataIface: void ClearStockFont() override; RetainPtr GetFontFileStreamAcc( const CPDF_Stream* pFontStream) override; void MaybePurgeFontFileStreamAcc(const CPDF_Stream* pFontStream) override; // CPDF_Font::FormFactoryIFace: std::unique_ptr CreateForm( CPDF_Document* pDocument, CPDF_Dictionary* pPageResources, CPDF_Stream* pFormStream) override; bool IsForceClear() const { return m_bForceClear; } RetainPtr AddFont(std::unique_ptr pFont, int charset); RetainPtr GetFont(CPDF_Dictionary* pFontDict); RetainPtr AddStandardFont(const ByteString& fontName, const CPDF_FontEncoding* pEncoding); RetainPtr GetStandardFont(const ByteString& fontName, const CPDF_FontEncoding* pEncoding); #if defined(OS_WIN) RetainPtr AddWindowsFont(LOGFONTA* pLogFont); #endif // Loads a colorspace. RetainPtr GetColorSpace(const CPDF_Object* pCSObj, const CPDF_Dictionary* pResources); // Loads a colorspace in a context that might be while loading another // colorspace. |pVisited| is passed recursively to avoid circular calls // involving CPDF_ColorSpace::Load(). RetainPtr GetColorSpaceGuarded( const CPDF_Object* pCSObj, const CPDF_Dictionary* pResources, std::set* pVisited); RetainPtr GetPattern(CPDF_Object* pPatternObj, bool bShading, const CFX_Matrix& matrix); RetainPtr GetImage(uint32_t dwStreamObjNum); void MaybePurgeImage(uint32_t dwStreamObjNum); RetainPtr GetIccProfile(const CPDF_Stream* pProfileStream); private: // Loads a colorspace in a context that might be while loading another // colorspace, or even in a recursive call from this method itself. |pVisited| // is passed recursively to avoid circular calls involving // CPDF_ColorSpace::Load() and |pVisitedInternal| is also passed recursively // to avoid circular calls with this method calling itself. RetainPtr GetColorSpaceInternal( const CPDF_Object* pCSObj, const CPDF_Dictionary* pResources, std::set* pVisited, std::set* pVisitedInternal); size_t CalculateEncodingDict(int charset, CPDF_Dictionary* pBaseDict); CPDF_Dictionary* ProcessbCJK( CPDF_Dictionary* pBaseDict, int charset, ByteString basefont, std::function Insert); void Clear(bool bForceRelease); bool m_bForceClear = false; // Specific destruction order may be required between maps. std::map> m_HashProfileMap; std::map> m_ColorSpaceMap; std::map> m_FontFileMap; std::map> m_IccProfileMap; std::map> m_PatternMap; std::map> m_ImageMap; std::map> m_FontMap; }; #endif // CORE_FPDFAPI_PAGE_CPDF_DOCPAGEDATA_H_