summaryrefslogtreecommitdiff
path: root/core/include/fpdfapi/fpdf_resource.h
diff options
context:
space:
mode:
Diffstat (limited to 'core/include/fpdfapi/fpdf_resource.h')
-rw-r--r--core/include/fpdfapi/fpdf_resource.h1323
1 files changed, 602 insertions, 721 deletions
diff --git a/core/include/fpdfapi/fpdf_resource.h b/core/include/fpdfapi/fpdf_resource.h
index 5c8cc85217..c41a306d54 100644
--- a/core/include/fpdfapi/fpdf_resource.h
+++ b/core/include/fpdfapi/fpdf_resource.h
@@ -51,911 +51,792 @@ const FX_CHAR* GetAdobeCharName(int iBaseEncoding,
const CFX_ByteString* pCharNames,
int charcode);
-template <class T> class CPDF_CountedObject
-{
-public:
- explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) { }
- void reset(T* ptr) { // CAUTION: tosses prior ref counts.
- m_nCount = 1;
- m_pObj = ptr;
- }
- void clear() { // Now you're all weak ptrs ...
- delete m_pObj;
- m_pObj = nullptr;
- }
- T* get() const { return m_pObj; }
- T* AddRef() { FXSYS_assert(m_pObj); ++m_nCount; return m_pObj; }
- void RemoveRef() { if (m_nCount) --m_nCount; }
- size_t use_count() const { return m_nCount; }
-
-protected:
- size_t m_nCount;
- T* m_pObj;
+template <class T>
+class CPDF_CountedObject {
+ public:
+ explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) {}
+ void reset(T* ptr) { // CAUTION: tosses prior ref counts.
+ m_nCount = 1;
+ m_pObj = ptr;
+ }
+ void clear() { // Now you're all weak ptrs ...
+ delete m_pObj;
+ m_pObj = nullptr;
+ }
+ T* get() const { return m_pObj; }
+ T* AddRef() {
+ FXSYS_assert(m_pObj);
+ ++m_nCount;
+ return m_pObj;
+ }
+ void RemoveRef() {
+ if (m_nCount)
+ --m_nCount;
+ }
+ size_t use_count() const { return m_nCount; }
+
+ protected:
+ size_t m_nCount;
+ T* m_pObj;
};
using CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>;
using CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>;
-#define PDFFONT_TYPE1 1
-#define PDFFONT_TRUETYPE 2
-#define PDFFONT_TYPE3 3
-#define PDFFONT_CIDFONT 4
-#define PDFFONT_FIXEDPITCH 1
-#define PDFFONT_SERIF 2
-#define PDFFONT_SYMBOLIC 4
-#define PDFFONT_SCRIPT 8
-#define PDFFONT_NONSYMBOLIC 32
-#define PDFFONT_ITALIC 64
-#define PDFFONT_ALLCAP 0x10000
-#define PDFFONT_SMALLCAP 0x20000
-#define PDFFONT_FORCEBOLD 0x40000
-#define PDFFONT_USEEXTERNATTR 0x80000
-class CPDF_Font
-{
-public:
- static CPDF_Font* CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary* pFontDict);
- static CPDF_Font* GetStockFont(CPDF_Document* pDoc, const CFX_ByteStringC& fontname);
-
- virtual ~CPDF_Font();
-
- bool IsFontType(int fonttype) const { return fonttype == m_FontType; }
- int GetFontType() const { return m_FontType; }
-
- CFX_ByteString GetFontTypeName() const;
-
- const CFX_ByteString& GetBaseFont() const
- {
- return m_BaseFont;
- }
+#define PDFFONT_TYPE1 1
+#define PDFFONT_TRUETYPE 2
+#define PDFFONT_TYPE3 3
+#define PDFFONT_CIDFONT 4
+#define PDFFONT_FIXEDPITCH 1
+#define PDFFONT_SERIF 2
+#define PDFFONT_SYMBOLIC 4
+#define PDFFONT_SCRIPT 8
+#define PDFFONT_NONSYMBOLIC 32
+#define PDFFONT_ITALIC 64
+#define PDFFONT_ALLCAP 0x10000
+#define PDFFONT_SMALLCAP 0x20000
+#define PDFFONT_FORCEBOLD 0x40000
+#define PDFFONT_USEEXTERNATTR 0x80000
+class CPDF_Font {
+ public:
+ static CPDF_Font* CreateFontF(CPDF_Document* pDoc,
+ CPDF_Dictionary* pFontDict);
+ static CPDF_Font* GetStockFont(CPDF_Document* pDoc,
+ const CFX_ByteStringC& fontname);
- const CFX_SubstFont* GetSubstFont() const
- {
- return m_Font.GetSubstFont();
- }
+ virtual ~CPDF_Font();
- FX_DWORD GetFlags() const
- {
- return m_Flags;
- }
+ bool IsFontType(int fonttype) const { return fonttype == m_FontType; }
+ int GetFontType() const { return m_FontType; }
- virtual FX_BOOL IsVertWriting()const;
+ CFX_ByteString GetFontTypeName() const;
+ const CFX_ByteString& GetBaseFont() const { return m_BaseFont; }
+ const CFX_SubstFont* GetSubstFont() const { return m_Font.GetSubstFont(); }
+ FX_DWORD GetFlags() const { return m_Flags; }
- CPDF_Type1Font* GetType1Font() const
- {
- return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL;
- }
+ virtual FX_BOOL IsVertWriting() const;
- CPDF_TrueTypeFont* GetTrueTypeFont() const
- {
- return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this : NULL;
- }
+ CPDF_Type1Font* GetType1Font() const {
+ return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL;
+ }
- CPDF_CIDFont* GetCIDFont() const
- {
- return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL;
- }
+ CPDF_TrueTypeFont* GetTrueTypeFont() const {
+ return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this
+ : NULL;
+ }
- CPDF_Type3Font* GetType3Font() const
- {
- return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL;
- }
+ CPDF_CIDFont* GetCIDFont() const {
+ return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL;
+ }
+ CPDF_Type3Font* GetType3Font() const {
+ return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL;
+ }
- FX_BOOL IsEmbedded() const
- {
- return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL;
- }
+ FX_BOOL IsEmbedded() const {
+ return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL;
+ }
- virtual FX_BOOL IsUnicodeCompatible() const
- {
- return FALSE;
- }
+ virtual FX_BOOL IsUnicodeCompatible() const { return FALSE; }
- CPDF_StreamAcc* GetFontFile() const
- {
- return m_pFontFile;
- }
+ CPDF_StreamAcc* GetFontFile() const { return m_pFontFile; }
- CPDF_Dictionary* GetFontDict() const
- {
- return m_pFontDict;
- }
+ CPDF_Dictionary* GetFontDict() const { return m_pFontDict; }
- FX_BOOL IsStandardFont() const;
+ FX_BOOL IsStandardFont() const;
- FXFT_Face GetFace() const
- {
- return m_Font.GetFace();
- }
+ FXFT_Face GetFace() const { return m_Font.GetFace(); }
- virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const
- {
- if (offset < 0 || nStrLen < 1) {
- return 0;
- }
- uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen-1];
- return static_cast<FX_DWORD>(ch);
+ virtual FX_DWORD GetNextChar(const FX_CHAR* pString,
+ int nStrLen,
+ int& offset) const {
+ if (offset < 0 || nStrLen < 1) {
+ return 0;
}
+ uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen - 1];
+ return static_cast<FX_DWORD>(ch);
+ }
- virtual int CountChar(const FX_CHAR* pString, int size) const
- {
- return size;
- }
+ virtual int CountChar(const FX_CHAR* pString, int size) const { return size; }
- void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const;
+ void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const;
- virtual int AppendChar(FX_CHAR* buf, FX_DWORD charcode) const
- {
- *buf = (FX_CHAR)charcode;
- return 1;
- }
+ virtual int AppendChar(FX_CHAR* buf, FX_DWORD charcode) const {
+ *buf = (FX_CHAR)charcode;
+ return 1;
+ }
- virtual int GetCharSize(FX_DWORD charcode) const
- {
- return 1;
- }
+ virtual int GetCharSize(FX_DWORD charcode) const { return 1; }
+ virtual int GlyphFromCharCode(FX_DWORD charcode,
+ FX_BOOL* pVertGlyph = NULL) = 0;
+ virtual int GlyphFromCharCodeExt(FX_DWORD charcode) {
+ return GlyphFromCharCode(charcode);
+ }
+ CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const;
+ FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const;
- virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) = 0;
- virtual int GlyphFromCharCodeExt(FX_DWORD charcode)
- {
- return GlyphFromCharCode(charcode);
- }
+ CFX_CharMap* GetCharMap() { return m_pCharMap; }
- CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const;
+ CFX_ByteString EncodeString(const CFX_WideString& str) const;
- FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const;
+ CFX_WideString DecodeString(const CFX_ByteString& str) const;
- CFX_CharMap* GetCharMap()
- {
- return m_pCharMap;
- }
+ void GetFontBBox(FX_RECT& rect) const { rect = m_FontBBox; }
- CFX_ByteString EncodeString(const CFX_WideString& str) const;
+ int GetTypeAscent() const { return m_Ascent; }
- CFX_WideString DecodeString(const CFX_ByteString& str) const;
+ int GetTypeDescent() const { return m_Descent; }
+ int GetItalicAngle() const { return m_ItalicAngle; }
+ int GetStemV() const { return m_StemV; }
+ int GetStringWidth(const FX_CHAR* pString, int size);
- void GetFontBBox(FX_RECT& rect) const
- {
- rect = m_FontBBox;
- }
+ virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0;
- int GetTypeAscent() const
- {
- return m_Ascent;
- }
-
- int GetTypeDescent() const
- {
- return m_Descent;
- }
-
- int GetItalicAngle() const
- {
- return m_ItalicAngle;
- }
-
- int GetStemV() const
- {
- return m_StemV;
- }
+ virtual int GetCharTypeWidth(FX_DWORD charcode);
- int GetStringWidth(const FX_CHAR* pString, int size);
+ virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0;
- virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0;
+ CPDF_Document* m_pDocument;
- virtual int GetCharTypeWidth(FX_DWORD charcode);
+ class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0);
- virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0;
+ CFX_Font m_Font;
+ protected:
+ explicit CPDF_Font(int fonttype);
+ FX_BOOL Initialize();
- CPDF_Document* m_pDocument;
+ FX_BOOL Load();
- class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0);
+ virtual FX_BOOL _Load() = 0;
- CFX_Font m_Font;
+ virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0;
-protected:
- explicit CPDF_Font(int fonttype);
+ virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;
- FX_BOOL Initialize();
+ void LoadUnicodeMap();
- FX_BOOL Load();
+ void LoadPDFEncoding(CPDF_Object* pEncoding,
+ int& iBaseEncoding,
+ CFX_ByteString*& pCharNames,
+ FX_BOOL bEmbedded,
+ FX_BOOL bTrueType);
- virtual FX_BOOL _Load() = 0;
+ void LoadFontDescriptor(CPDF_Dictionary*);
- virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0;
+ void LoadCharWidths(FX_WORD* pWidths);
- virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;
+ void CheckFontMetrics();
- void LoadUnicodeMap();
+ CFX_CharMap* m_pCharMap;
- void LoadPDFEncoding(CPDF_Object* pEncoding, int& iBaseEncoding,
- CFX_ByteString*& pCharNames, FX_BOOL bEmbedded, FX_BOOL bTrueType);
+ CFX_ByteString m_BaseFont;
- void LoadFontDescriptor(CPDF_Dictionary*);
+ CPDF_StreamAcc* m_pFontFile;
- void LoadCharWidths(FX_WORD* pWidths);
+ CPDF_Dictionary* m_pFontDict;
- void CheckFontMetrics();
+ CPDF_ToUnicodeMap* m_pToUnicodeMap;
- CFX_CharMap* m_pCharMap;
+ FX_BOOL m_bToUnicodeLoaded;
+ int m_Flags;
+ FX_RECT m_FontBBox;
- CFX_ByteString m_BaseFont;
+ int m_StemV;
- CPDF_StreamAcc* m_pFontFile;
+ int m_Ascent;
- CPDF_Dictionary* m_pFontDict;
-
- CPDF_ToUnicodeMap* m_pToUnicodeMap;
-
- FX_BOOL m_bToUnicodeLoaded;
+ int m_Descent;
+ int m_ItalicAngle;
+ private:
+ const int m_FontType;
+};
+#define PDFFONT_ENCODING_BUILTIN 0
+#define PDFFONT_ENCODING_WINANSI 1
+#define PDFFONT_ENCODING_MACROMAN 2
+#define PDFFONT_ENCODING_MACEXPERT 3
+#define PDFFONT_ENCODING_STANDARD 4
+#define PDFFONT_ENCODING_ADOBE_SYMBOL 5
+#define PDFFONT_ENCODING_ZAPFDINGBATS 6
+#define PDFFONT_ENCODING_PDFDOC 7
+#define PDFFONT_ENCODING_MS_SYMBOL 8
+#define PDFFONT_ENCODING_UNICODE 9
+class CPDF_FontEncoding {
+ public:
+ CPDF_FontEncoding();
+ CPDF_FontEncoding(int PredefinedEncoding);
- int m_Flags;
+ void LoadEncoding(CPDF_Object* pEncoding);
- FX_RECT m_FontBBox;
+ FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const;
- int m_StemV;
+ FX_WCHAR UnicodeFromCharCode(uint8_t charcode) const {
+ return m_Unicodes[charcode];
+ }
- int m_Ascent;
+ int CharCodeFromUnicode(FX_WCHAR unicode) const;
- int m_Descent;
+ void SetUnicode(uint8_t charcode, FX_WCHAR unicode) {
+ m_Unicodes[charcode] = unicode;
+ }
- int m_ItalicAngle;
+ CPDF_Object* Realize();
-private:
- const int m_FontType;
+ public:
+ FX_WCHAR m_Unicodes[256];
};
-#define PDFFONT_ENCODING_BUILTIN 0
-#define PDFFONT_ENCODING_WINANSI 1
-#define PDFFONT_ENCODING_MACROMAN 2
-#define PDFFONT_ENCODING_MACEXPERT 3
-#define PDFFONT_ENCODING_STANDARD 4
-#define PDFFONT_ENCODING_ADOBE_SYMBOL 5
-#define PDFFONT_ENCODING_ZAPFDINGBATS 6
-#define PDFFONT_ENCODING_PDFDOC 7
-#define PDFFONT_ENCODING_MS_SYMBOL 8
-#define PDFFONT_ENCODING_UNICODE 9
-class CPDF_FontEncoding
-{
-public:
-
- CPDF_FontEncoding();
-
- CPDF_FontEncoding(int PredefinedEncoding);
-
- void LoadEncoding(CPDF_Object* pEncoding);
-
- FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const;
-
- FX_WCHAR UnicodeFromCharCode(uint8_t charcode) const
- {
- return m_Unicodes[charcode];
- }
- int CharCodeFromUnicode(FX_WCHAR unicode) const;
+class CPDF_SimpleFont : public CPDF_Font {
+ public:
+ explicit CPDF_SimpleFont(int fonttype);
+ ~CPDF_SimpleFont() override;
- void SetUnicode(uint8_t charcode, FX_WCHAR unicode)
- {
- m_Unicodes[charcode] = unicode;
- }
-
- CPDF_Object* Realize();
-public:
+ CPDF_FontEncoding* GetEncoding() { return &m_Encoding; }
+ int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
+ void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
+ int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override;
+ FX_BOOL IsUnicodeCompatible() const override;
- FX_WCHAR m_Unicodes[256];
-};
+ protected:
+ FX_BOOL LoadCommon();
-class CPDF_SimpleFont : public CPDF_Font
-{
-public:
- explicit CPDF_SimpleFont(int fonttype);
- ~CPDF_SimpleFont() override;
+ void LoadSubstFont();
- CPDF_FontEncoding* GetEncoding()
- {
- return &m_Encoding;
- }
- int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
- void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
- int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) override;
- FX_BOOL IsUnicodeCompatible() const override;
+ void LoadFaceMetrics();
-protected:
- FX_BOOL LoadCommon();
+ virtual void LoadGlyphMap() = 0;
- void LoadSubstFont();
+ FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override {
+ return m_Encoding.UnicodeFromCharCode((uint8_t)charcode);
+ }
- void LoadFaceMetrics();
+ FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override {
+ return m_Encoding.CharCodeFromUnicode(Unicode);
+ }
- virtual void LoadGlyphMap() = 0;
+ void LoadCharMetrics(int charcode);
- FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override
- {
- return m_Encoding.UnicodeFromCharCode((uint8_t)charcode);
- }
-
- FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override
- {
- return m_Encoding.CharCodeFromUnicode(Unicode);
- }
-
- void LoadCharMetrics(int charcode);
-
- CPDF_FontEncoding m_Encoding;
- FX_WORD m_GlyphIndex[256];
- FX_WORD m_ExtGID[256];
- CFX_ByteString* m_pCharNames;
- int m_BaseEncoding;
- FX_WORD m_CharWidth[256];
- FX_SMALL_RECT m_CharBBox[256];
- FX_BOOL m_bUseFontWidth;
+ CPDF_FontEncoding m_Encoding;
+ FX_WORD m_GlyphIndex[256];
+ FX_WORD m_ExtGID[256];
+ CFX_ByteString* m_pCharNames;
+ int m_BaseEncoding;
+ FX_WORD m_CharWidth[256];
+ FX_SMALL_RECT m_CharBBox[256];
+ FX_BOOL m_bUseFontWidth;
};
-class CPDF_Type1Font : public CPDF_SimpleFont
-{
-public:
+class CPDF_Type1Font : public CPDF_SimpleFont {
+ public:
+ CPDF_Type1Font();
- CPDF_Type1Font();
+ int GetBase14Font() { return m_Base14Font; }
+ virtual int GlyphFromCharCodeExt(FX_DWORD charcode);
- int GetBase14Font()
- {
- return m_Base14Font;
- }
- virtual int GlyphFromCharCodeExt(FX_DWORD charcode);
-protected:
- virtual FX_BOOL _Load();
+ protected:
+ virtual FX_BOOL _Load();
- int m_Base14Font;
- virtual void LoadGlyphMap();
-};
-class CPDF_TrueTypeFont : public CPDF_SimpleFont
-{
-public:
-
- CPDF_TrueTypeFont();
-protected:
- virtual FX_BOOL _Load();
- virtual void LoadGlyphMap();
+ int m_Base14Font;
+ virtual void LoadGlyphMap();
};
-class CPDF_Type3Char
-{
-public:
-
- CPDF_Type3Char();
-
- ~CPDF_Type3Char();
+class CPDF_TrueTypeFont : public CPDF_SimpleFont {
+ public:
+ CPDF_TrueTypeFont();
- FX_BOOL LoadBitmap(CPDF_RenderContext* pContext);
-
- FX_BOOL m_bColored;
+ protected:
+ virtual FX_BOOL _Load();
+ virtual void LoadGlyphMap();
+};
+class CPDF_Type3Char {
+ public:
+ CPDF_Type3Char();
- FX_BOOL m_bPageRequired;
+ ~CPDF_Type3Char();
+ FX_BOOL LoadBitmap(CPDF_RenderContext* pContext);
+ FX_BOOL m_bColored;
- CPDF_Form* m_pForm;
+ FX_BOOL m_bPageRequired;
- CFX_AffineMatrix m_ImageMatrix;
+ CPDF_Form* m_pForm;
- CFX_DIBitmap* m_pBitmap;
+ CFX_AffineMatrix m_ImageMatrix;
+ CFX_DIBitmap* m_pBitmap;
- int m_Width;
+ int m_Width;
- FX_RECT m_BBox;
+ FX_RECT m_BBox;
};
-class CPDF_Type3Font : public CPDF_SimpleFont
-{
-public:
- CPDF_Type3Font();
- ~CPDF_Type3Font() override;
-
- void SetPageResources(CPDF_Dictionary* pResources)
- {
- m_pPageResources = pResources;
- }
- CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0);
- int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
- int GetCharTypeWidth(FX_DWORD charcode) override
- {
- return GetCharWidthF(charcode);
- }
- void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
- CFX_AffineMatrix& GetFontMatrix()
- {
- return m_FontMatrix;
- }
- void CheckType3FontMetrics();
-
-protected:
- CFX_AffineMatrix m_FontMatrix;
-
-private:
- FX_BOOL _Load() override;
- void LoadGlyphMap() override {}
-
- int m_CharWidthL[256];
- CPDF_Dictionary* m_pCharProcs;
- CPDF_Dictionary* m_pPageResources;
- CPDF_Dictionary* m_pFontResources;
- CFX_MapPtrToPtr m_CacheMap;
- CFX_MapPtrToPtr m_DeletedMap;
+class CPDF_Type3Font : public CPDF_SimpleFont {
+ public:
+ CPDF_Type3Font();
+ ~CPDF_Type3Font() override;
+
+ void SetPageResources(CPDF_Dictionary* pResources) {
+ m_pPageResources = pResources;
+ }
+ CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0);
+ int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
+ int GetCharTypeWidth(FX_DWORD charcode) override {
+ return GetCharWidthF(charcode);
+ }
+ void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
+ CFX_AffineMatrix& GetFontMatrix() { return m_FontMatrix; }
+ void CheckType3FontMetrics();
+
+ protected:
+ CFX_AffineMatrix m_FontMatrix;
+
+ private:
+ FX_BOOL _Load() override;
+ void LoadGlyphMap() override {}
+
+ int m_CharWidthL[256];
+ CPDF_Dictionary* m_pCharProcs;
+ CPDF_Dictionary* m_pPageResources;
+ CPDF_Dictionary* m_pFontResources;
+ CFX_MapPtrToPtr m_CacheMap;
+ CFX_MapPtrToPtr m_DeletedMap;
};
-#define CIDSET_UNKNOWN 0
-#define CIDSET_GB1 1
-#define CIDSET_CNS1 2
-#define CIDSET_JAPAN1 3
-#define CIDSET_KOREA1 4
-#define CIDSET_UNICODE 5
-#define NUMBER_OF_CIDSETS 6
-
-class CPDF_CIDFont : public CPDF_Font
-{
-public:
-
- CPDF_CIDFont();
-
- ~CPDF_CIDFont() override;
-
- FX_BOOL LoadGB2312();
- int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) override;
- int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
- void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
- FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
-
- FX_BOOL IsTrueType() const
- {
- return !m_bType1;
- }
-
- virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offset) const override;
- int CountChar(const FX_CHAR* pString, int size) const override;
- int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override;
- int GetCharSize(FX_DWORD charcode) const override;
-
- int GetCharset() const
- {
- return m_Charset;
- }
-
- const uint8_t* GetCIDTransform(FX_WORD CID) const;
- FX_BOOL IsVertWriting() const override;
- short GetVertWidth(FX_WORD CID) const;
- void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const;
- FX_BOOL IsUnicodeCompatible() const override;
- virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const;
-
-protected:
- friend class CPDF_Font;
-
- FX_BOOL _Load() override;
- FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override;
- FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override;
- int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL *pVertGlyph);
- void LoadMetricsArray(CPDF_Array* pArray, CFX_DWordArray& result, int nElements);
- void LoadSubstFont();
-
- CPDF_CMap* m_pCMap;
- CPDF_CMap* m_pAllocatedCMap;
- CPDF_CID2UnicodeMap* m_pCID2UnicodeMap;
- int m_Charset;
- FX_BOOL m_bType1;
- CPDF_StreamAcc* m_pCIDToGIDMap;
- FX_BOOL m_bCIDIsGID;
- FX_WORD m_DefaultWidth;
- FX_WORD* m_pAnsiWidths;
- FX_SMALL_RECT m_CharBBox[256];
- CFX_DWordArray m_WidthList;
- short m_DefaultVY;
- short m_DefaultW1;
- CFX_DWordArray m_VertMetrics;
- FX_BOOL m_bAdobeCourierStd;
- CFX_CTTGSUBTable* m_pTTGSUBTable;
+#define CIDSET_UNKNOWN 0
+#define CIDSET_GB1 1
+#define CIDSET_CNS1 2
+#define CIDSET_JAPAN1 3
+#define CIDSET_KOREA1 4
+#define CIDSET_UNICODE 5
+#define NUMBER_OF_CIDSETS 6
+
+class CPDF_CIDFont : public CPDF_Font {
+ public:
+ CPDF_CIDFont();
+
+ ~CPDF_CIDFont() override;
+
+ FX_BOOL LoadGB2312();
+ int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override;
+ int GetCharWidthF(FX_DWORD charcode, int level = 0) override;
+ void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override;
+ FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
+
+ FX_BOOL IsTrueType() const { return !m_bType1; }
+
+ virtual FX_DWORD GetNextChar(const FX_CHAR* pString,
+ int nStrLen,
+ int& offset) const override;
+ int CountChar(const FX_CHAR* pString, int size) const override;
+ int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override;
+ int GetCharSize(FX_DWORD charcode) const override;
+
+ int GetCharset() const { return m_Charset; }
+
+ const uint8_t* GetCIDTransform(FX_WORD CID) const;
+ FX_BOOL IsVertWriting() const override;
+ short GetVertWidth(FX_WORD CID) const;
+ void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const;
+ FX_BOOL IsUnicodeCompatible() const override;
+ virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const;
+
+ protected:
+ friend class CPDF_Font;
+
+ FX_BOOL _Load() override;
+ FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override;
+ FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override;
+ int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL* pVertGlyph);
+ void LoadMetricsArray(CPDF_Array* pArray,
+ CFX_DWordArray& result,
+ int nElements);
+ void LoadSubstFont();
+
+ CPDF_CMap* m_pCMap;
+ CPDF_CMap* m_pAllocatedCMap;
+ CPDF_CID2UnicodeMap* m_pCID2UnicodeMap;
+ int m_Charset;
+ FX_BOOL m_bType1;
+ CPDF_StreamAcc* m_pCIDToGIDMap;
+ FX_BOOL m_bCIDIsGID;
+ FX_WORD m_DefaultWidth;
+ FX_WORD* m_pAnsiWidths;
+ FX_SMALL_RECT m_CharBBox[256];
+ CFX_DWordArray m_WidthList;
+ short m_DefaultVY;
+ short m_DefaultW1;
+ CFX_DWordArray m_VertMetrics;
+ FX_BOOL m_bAdobeCourierStd;
+ CFX_CTTGSUBTable* m_pTTGSUBTable;
};
-#define PDFCS_DEVICEGRAY 1
-#define PDFCS_DEVICERGB 2
-#define PDFCS_DEVICECMYK 3
-#define PDFCS_CALGRAY 4
-#define PDFCS_CALRGB 5
-#define PDFCS_LAB 6
-#define PDFCS_ICCBASED 7
-#define PDFCS_SEPARATION 8
-#define PDFCS_DEVICEN 9
-#define PDFCS_INDEXED 10
-#define PDFCS_PATTERN 11
-
-class CPDF_ColorSpace
-{
-public:
-
- static CPDF_ColorSpace* GetStockCS(int Family);
-
- static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj);
-
- void ReleaseCS();
-
- int GetBufSize() const;
-
- FX_FLOAT* CreateBuf();
-
- void GetDefaultColor(FX_FLOAT* buf) const;
-
- int CountComponents() const
- {
- return m_nComponents;
- }
-
- int GetFamily() const
- {
- return m_Family;
- }
-
- virtual void GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const
- {
- value = 0;
- min = 0;
- max = 1.0f;
- }
-
- FX_BOOL sRGB() const;
-
-
-
- virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const = 0;
-
- virtual FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const
- {
- return FALSE;
- }
-
-
-
-
- FX_BOOL GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const;
-
- FX_BOOL SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const;
-
-
- virtual void TranslateImageLine(uint8_t* dest_buf, const uint8_t* src_buf, int pixels,
- int image_width, int image_height, FX_BOOL bTransMask = FALSE) const;
-
- CPDF_Array*& GetArray()
- {
- return m_pArray;
- }
-
- int GetMaxIndex() const;
-
- virtual CPDF_ColorSpace* GetBaseCS() const
- {
- return NULL;
- }
-
- virtual void EnableStdConversion(FX_BOOL bEnabled);
-
- CPDF_Document* const m_pDocument;
-
-protected:
- CPDF_ColorSpace(CPDF_Document* pDoc, int family, int nComponents)
- : m_pDocument(pDoc),
- m_Family(family),
- m_nComponents(nComponents),
- m_pArray(nullptr),
- m_dwStdConversion(0) {
- }
- virtual ~CPDF_ColorSpace() {}
- virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
- {
- return TRUE;
- }
- virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const
- {
- return FALSE;
- }
- virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const
- {
- return FALSE;
- }
-
- int m_Family;
-
- int m_nComponents;
-
- CPDF_Array* m_pArray;
-
- FX_DWORD m_dwStdConversion;
+#define PDFCS_DEVICEGRAY 1
+#define PDFCS_DEVICERGB 2
+#define PDFCS_DEVICECMYK 3
+#define PDFCS_CALGRAY 4
+#define PDFCS_CALRGB 5
+#define PDFCS_LAB 6
+#define PDFCS_ICCBASED 7
+#define PDFCS_SEPARATION 8
+#define PDFCS_DEVICEN 9
+#define PDFCS_INDEXED 10
+#define PDFCS_PATTERN 11
+
+class CPDF_ColorSpace {
+ public:
+ static CPDF_ColorSpace* GetStockCS(int Family);
+
+ static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj);
+
+ void ReleaseCS();
+
+ int GetBufSize() const;
+
+ FX_FLOAT* CreateBuf();
+
+ void GetDefaultColor(FX_FLOAT* buf) const;
+
+ int CountComponents() const { return m_nComponents; }
+
+ int GetFamily() const { return m_Family; }
+
+ virtual void GetDefaultValue(int iComponent,
+ FX_FLOAT& value,
+ FX_FLOAT& min,
+ FX_FLOAT& max) const {
+ value = 0;
+ min = 0;
+ max = 1.0f;
+ }
+
+ FX_BOOL sRGB() const;
+
+ virtual FX_BOOL GetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT& R,
+ FX_FLOAT& G,
+ FX_FLOAT& B) const = 0;
+
+ virtual FX_BOOL SetRGB(FX_FLOAT* pBuf,
+ FX_FLOAT R,
+ FX_FLOAT G,
+ FX_FLOAT B) const {
+ return FALSE;
+ }
+
+ FX_BOOL GetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT& c,
+ FX_FLOAT& m,
+ FX_FLOAT& y,
+ FX_FLOAT& k) const;
+
+ FX_BOOL SetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT c,
+ FX_FLOAT m,
+ FX_FLOAT y,
+ FX_FLOAT k) const;
+
+ virtual void TranslateImageLine(uint8_t* dest_buf,
+ const uint8_t* src_buf,
+ int pixels,
+ int image_width,
+ int image_height,
+ FX_BOOL bTransMask = FALSE) const;
+
+ CPDF_Array*& GetArray() { return m_pArray; }
+
+ int GetMaxIndex() const;
+
+ virtual CPDF_ColorSpace* GetBaseCS() const { return NULL; }
+
+ virtual void EnableStdConversion(FX_BOOL bEnabled);
+
+ CPDF_Document* const m_pDocument;
+
+ protected:
+ CPDF_ColorSpace(CPDF_Document* pDoc, int family, int nComponents)
+ : m_pDocument(pDoc),
+ m_Family(family),
+ m_nComponents(nComponents),
+ m_pArray(nullptr),
+ m_dwStdConversion(0) {}
+ virtual ~CPDF_ColorSpace() {}
+ virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) {
+ return TRUE;
+ }
+ virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT& c,
+ FX_FLOAT& m,
+ FX_FLOAT& y,
+ FX_FLOAT& k) const {
+ return FALSE;
+ }
+ virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf,
+ FX_FLOAT c,
+ FX_FLOAT m,
+ FX_FLOAT y,
+ FX_FLOAT k) const {
+ return FALSE;
+ }
+
+ int m_Family;
+
+ int m_nComponents;
+
+ CPDF_Array* m_pArray;
+
+ FX_DWORD m_dwStdConversion;
};
-class CPDF_Color
-{
-public:
+class CPDF_Color {
+ public:
+ CPDF_Color() : m_pCS(NULL), m_pBuffer(NULL) {}
- CPDF_Color() :m_pCS(NULL), m_pBuffer(NULL)
- {
- }
+ CPDF_Color(int family);
- CPDF_Color(int family);
+ ~CPDF_Color();
- ~CPDF_Color();
+ FX_BOOL IsNull() const { return m_pBuffer == NULL; }
- FX_BOOL IsNull() const
- {
- return m_pBuffer == NULL;
- }
+ FX_BOOL IsEqual(const CPDF_Color& other) const;
- FX_BOOL IsEqual(const CPDF_Color& other) const;
+ FX_BOOL IsPattern() const {
+ return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN;
+ }
- FX_BOOL IsPattern() const
- {
- return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN;
- }
+ void Copy(const CPDF_Color* pSrc);
- void Copy(const CPDF_Color* pSrc);
+ void SetColorSpace(CPDF_ColorSpace* pCS);
- void SetColorSpace(CPDF_ColorSpace* pCS);
+ void SetValue(FX_FLOAT* comp);
- void SetValue(FX_FLOAT* comp);
+ void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps);
- void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps);
+ FX_BOOL GetRGB(int& R, int& G, int& B) const;
- FX_BOOL GetRGB(int& R, int& G, int& B) const;
+ CPDF_Pattern* GetPattern() const;
- CPDF_Pattern* GetPattern() const;
+ CPDF_ColorSpace* GetPatternCS() const;
- CPDF_ColorSpace* GetPatternCS() const;
+ FX_FLOAT* GetPatternColor() const;
- FX_FLOAT* GetPatternColor() const;
+ CPDF_ColorSpace* m_pCS;
- CPDF_ColorSpace* m_pCS;
-
-protected:
- void ReleaseBuffer();
- void ReleaseColorSpace();
- FX_FLOAT* m_pBuffer;
+ protected:
+ void ReleaseBuffer();
+ void ReleaseColorSpace();
+ FX_FLOAT* m_pBuffer;
};
-#define PATTERN_TILING 1
-#define PATTERN_SHADING 2
-class CPDF_Pattern
-{
-public:
-
- virtual ~CPDF_Pattern();
- void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
+#define PATTERN_TILING 1
+#define PATTERN_SHADING 2
+class CPDF_Pattern {
+ public:
+ virtual ~CPDF_Pattern();
+ void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
- CPDF_Object* m_pPatternObj;
+ CPDF_Object* m_pPatternObj;
- int m_PatternType;
+ int m_PatternType;
- CFX_AffineMatrix m_Pattern2Form;
- CFX_AffineMatrix m_ParentMatrix;
+ CFX_AffineMatrix m_Pattern2Form;
+ CFX_AffineMatrix m_ParentMatrix;
- CPDF_Document* m_pDocument;
+ CPDF_Document* m_pDocument;
-protected:
- CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix);
- FX_BOOL m_bForceClear;
+ protected:
+ CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix);
+ FX_BOOL m_bForceClear;
};
-class CPDF_TilingPattern : public CPDF_Pattern
-{
-public:
-
- CPDF_TilingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, const CFX_AffineMatrix* parentMatrix);
-
- virtual ~CPDF_TilingPattern();
-
- FX_BOOL Load();
-
+class CPDF_TilingPattern : public CPDF_Pattern {
+ public:
+ CPDF_TilingPattern(CPDF_Document* pDoc,
+ CPDF_Object* pPatternObj,
+ const CFX_AffineMatrix* parentMatrix);
+ virtual ~CPDF_TilingPattern();
- FX_BOOL m_bColored;
+ FX_BOOL Load();
- CFX_FloatRect m_BBox;
+ FX_BOOL m_bColored;
- FX_FLOAT m_XStep;
+ CFX_FloatRect m_BBox;
- FX_FLOAT m_YStep;
+ FX_FLOAT m_XStep;
+ FX_FLOAT m_YStep;
-
- CPDF_Form* m_pForm;
+ CPDF_Form* m_pForm;
};
-class CPDF_ShadingPattern : public CPDF_Pattern
-{
-public:
+class CPDF_ShadingPattern : public CPDF_Pattern {
+ public:
+ CPDF_ShadingPattern(CPDF_Document* pDoc,
+ CPDF_Object* pPatternObj,
+ FX_BOOL bShading,
+ const CFX_AffineMatrix* parentMatrix);
- CPDF_ShadingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* parentMatrix);
+ virtual ~CPDF_ShadingPattern();
- virtual ~CPDF_ShadingPattern();
+ CPDF_Object* m_pShadingObj;
- CPDF_Object* m_pShadingObj;
+ FX_BOOL m_bShadingObj;
- FX_BOOL m_bShadingObj;
+ FX_BOOL Load();
- FX_BOOL Load();
+ FX_BOOL Reload();
- FX_BOOL Reload();
+ int m_ShadingType;
- int m_ShadingType;
+ CPDF_ColorSpace* m_pCS; // Still keep m_pCS as some CPDF_ColorSpace (name
+ // object) are not managed as counted objects. Refer
+ // to CPDF_DocPageData::GetColorSpace.
- CPDF_ColorSpace* m_pCS; // Still keep m_pCS as some CPDF_ColorSpace (name object) are not managed as counted objects. Refer to CPDF_DocPageData::GetColorSpace.
+ CPDF_CountedColorSpace* m_pCountedCS;
- CPDF_CountedColorSpace* m_pCountedCS;
+ CPDF_Function* m_pFunctions[4];
- CPDF_Function* m_pFunctions[4];
+ int m_nFuncs;
- int m_nFuncs;
-protected:
- void Clear();
+ protected:
+ void Clear();
};
struct CPDF_MeshVertex {
- FX_FLOAT x, y;
- FX_FLOAT r, g, b;
+ FX_FLOAT x, y;
+ FX_FLOAT r, g, b;
};
-class CPDF_MeshStream
-{
-public:
-
- FX_BOOL Load(CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs, CPDF_ColorSpace* pCS);
-
- FX_DWORD GetFlag();
-
- void GetCoords(FX_FLOAT& x, FX_FLOAT& y);
-
- void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b);
-
- FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap);
-
- FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex, int count, CFX_AffineMatrix* pObject2Bitmap);
- CPDF_Function** m_pFuncs;
- CPDF_ColorSpace* m_pCS;
- FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps;
- FX_DWORD m_CoordMax, m_CompMax;
- FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax;
- FX_FLOAT m_ColorMin[8], m_ColorMax[8];
- CPDF_StreamAcc m_Stream;
- CFX_BitStream m_BitStream;
+class CPDF_MeshStream {
+ public:
+ FX_BOOL Load(CPDF_Stream* pShadingStream,
+ CPDF_Function** pFuncs,
+ int nFuncs,
+ CPDF_ColorSpace* pCS);
+
+ FX_DWORD GetFlag();
+
+ void GetCoords(FX_FLOAT& x, FX_FLOAT& y);
+
+ void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b);
+
+ FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap);
+
+ FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex,
+ int count,
+ CFX_AffineMatrix* pObject2Bitmap);
+ CPDF_Function** m_pFuncs;
+ CPDF_ColorSpace* m_pCS;
+ FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps;
+ FX_DWORD m_CoordMax, m_CompMax;
+ FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax;
+ FX_FLOAT m_ColorMin[8], m_ColorMax[8];
+ CPDF_StreamAcc m_Stream;
+ CFX_BitStream m_BitStream;
};
-#define PDF_IMAGE_NO_COMPRESS 0x0000
-#define PDF_IMAGE_LOSSY_COMPRESS 0x0001
-#define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002
-#define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004
-#define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008
-class CPDF_ImageSetParam
-{
-public:
- CPDF_ImageSetParam()
- : pMatteColor(NULL)
- , nQuality(80)
- {
- }
- FX_ARGB* pMatteColor;
- int32_t nQuality;
+#define PDF_IMAGE_NO_COMPRESS 0x0000
+#define PDF_IMAGE_LOSSY_COMPRESS 0x0001
+#define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002
+#define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004
+#define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008
+class CPDF_ImageSetParam {
+ public:
+ CPDF_ImageSetParam() : pMatteColor(NULL), nQuality(80) {}
+ FX_ARGB* pMatteColor;
+ int32_t nQuality;
};
-class CPDF_Image
-{
-public:
+class CPDF_Image {
+ public:
+ CPDF_Image(CPDF_Document* pDoc);
- CPDF_Image(CPDF_Document* pDoc);
+ ~CPDF_Image();
- ~CPDF_Image();
+ FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline);
- FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline);
+ void Release();
- void Release();
+ CPDF_Image* Clone();
- CPDF_Image* Clone();
+ FX_BOOL IsInline() { return m_bInline; }
- FX_BOOL IsInline()
- {
- return m_bInline;
- }
+ void SetInlineDict(CPDF_Dictionary* pDict) { m_pInlineDict = pDict; }
- void SetInlineDict(CPDF_Dictionary* pDict)
- {
- m_pInlineDict = pDict;
- }
+ CPDF_Dictionary* GetInlineDict() const { return m_pInlineDict; }
- CPDF_Dictionary* GetInlineDict() const
- {
- return m_pInlineDict;
- }
+ CPDF_Stream* GetStream() const { return m_pStream; }
- CPDF_Stream* GetStream() const
- {
- return m_pStream;
- }
+ CPDF_Dictionary* GetDict() const {
+ return m_pStream ? m_pStream->GetDict() : NULL;
+ }
- CPDF_Dictionary* GetDict() const
- {
- return m_pStream? m_pStream->GetDict(): NULL;
- }
-
- CPDF_Dictionary* GetOC() const
- {
- return m_pOC;
- }
-
- CPDF_Document* GetDocument() const
- {
- return m_pDocument;
- }
+ CPDF_Dictionary* GetOC() const { return m_pOC; }
+ CPDF_Document* GetDocument() const { return m_pDocument; }
+ int32_t GetPixelHeight() const { return m_Height; }
- int32_t GetPixelHeight() const
- {
- return m_Height;
- }
-
- int32_t GetPixelWidth() const
- {
- return m_Width;
- }
-
-
- FX_BOOL IsMask() const
- {
- return m_bIsMask;
- }
-
- FX_BOOL IsInterpol() const
- {
- return m_bInterpolate;
- }
+ int32_t GetPixelWidth() const { return m_Width; }
- CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL, FX_DWORD* pMatteColor = NULL, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE) const;
+ FX_BOOL IsMask() const { return m_bIsMask; }
+ FX_BOOL IsInterpol() const { return m_bInterpolate; }
+ CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL,
+ FX_DWORD* pMatteColor = NULL,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE) const;
- void SetImage(const CFX_DIBitmap* pDIBitmap, int32_t iCompress, IFX_FileWrite *pFileWrite = NULL, IFX_FileRead *pFileRead = NULL, const CFX_DIBitmap* pMask = NULL, const CPDF_ImageSetParam* pParam = NULL);
+ void SetImage(const CFX_DIBitmap* pDIBitmap,
+ int32_t iCompress,
+ IFX_FileWrite* pFileWrite = NULL,
+ IFX_FileRead* pFileRead = NULL,
+ const CFX_DIBitmap* pMask = NULL,
+ const CPDF_ImageSetParam* pParam = NULL);
- void SetJpegImage(uint8_t* pImageData, FX_DWORD size);
+ void SetJpegImage(uint8_t* pImageData, FX_DWORD size);
- void SetJpegImage(IFX_FileRead *pFile);
+ void SetJpegImage(IFX_FileRead* pFile);
- void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap);
+ void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap);
-public:
- FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE);
- FX_BOOL Continue(IFX_Pause* pPause);
- CFX_DIBSource* DetachBitmap();
- CFX_DIBSource* DetachMask();
- CFX_DIBSource* m_pDIBSource;
- CFX_DIBSource* m_pMask;
- FX_DWORD m_MatteColor;
-private:
+ public:
+ FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource,
+ CPDF_Dictionary* pPageResource,
+ FX_BOOL bStdCS = FALSE,
+ FX_DWORD GroupFamily = 0,
+ FX_BOOL bLoadMask = FALSE);
+ FX_BOOL Continue(IFX_Pause* pPause);
+ CFX_DIBSource* DetachBitmap();
+ CFX_DIBSource* DetachMask();
+ CFX_DIBSource* m_pDIBSource;
+ CFX_DIBSource* m_pMask;
+ FX_DWORD m_MatteColor;
- CPDF_Stream* m_pStream;
- FX_BOOL m_bInline;
- CPDF_Dictionary* m_pInlineDict;
+ private:
+ CPDF_Stream* m_pStream;
+ FX_BOOL m_bInline;
+ CPDF_Dictionary* m_pInlineDict;
- int32_t m_Height;
+ int32_t m_Height;
- int32_t m_Width;
+ int32_t m_Width;
- FX_BOOL m_bIsMask;
+ FX_BOOL m_bIsMask;
- FX_BOOL m_bInterpolate;
+ FX_BOOL m_bInterpolate;
- CPDF_Document* m_pDocument;
+ CPDF_Document* m_pDocument;
- CPDF_Dictionary* m_pOC;
- CPDF_Dictionary* InitJPEG(uint8_t* pData, FX_DWORD size);
+ CPDF_Dictionary* m_pOC;
+ CPDF_Dictionary* InitJPEG(uint8_t* pData, FX_DWORD size);
};
#endif // CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_