| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ | 7 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ |
| 8 #define CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ | 8 #define CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ |
| 9 | 9 |
| 10 #include "../fxcrt/fx_system.h" | 10 #include "../fxcrt/fx_system.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 const FX_CHAR* PDF_CharNameFromPredefinedCharSet(int encoding, | 44 const FX_CHAR* PDF_CharNameFromPredefinedCharSet(int encoding, |
| 45 uint8_t charcode); | 45 uint8_t charcode); |
| 46 | 46 |
| 47 FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode); | 47 FX_WCHAR FT_UnicodeFromCharCode(int encoding, FX_DWORD charcode); |
| 48 FX_DWORD FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode); | 48 FX_DWORD FT_CharCodeFromUnicode(int encoding, FX_WCHAR unicode); |
| 49 const FX_WORD* PDF_UnicodesForPredefinedCharSet(int encoding); | 49 const FX_WORD* PDF_UnicodesForPredefinedCharSet(int encoding); |
| 50 const FX_CHAR* GetAdobeCharName(int iBaseEncoding, | 50 const FX_CHAR* GetAdobeCharName(int iBaseEncoding, |
| 51 const CFX_ByteString* pCharNames, | 51 const CFX_ByteString* pCharNames, |
| 52 int charcode); | 52 int charcode); |
| 53 | 53 |
| 54 template <class T> class CPDF_CountedObject | 54 template <class T> |
| 55 { | 55 class CPDF_CountedObject { |
| 56 public: | 56 public: |
| 57 explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) { } | 57 explicit CPDF_CountedObject(T* ptr) : m_nCount(1), m_pObj(ptr) {} |
| 58 void reset(T* ptr) { // CAUTION: tosses prior ref counts. | 58 void reset(T* ptr) { // CAUTION: tosses prior ref counts. |
| 59 m_nCount = 1; | 59 m_nCount = 1; |
| 60 m_pObj = ptr; | 60 m_pObj = ptr; |
| 61 } | 61 } |
| 62 void clear() { // Now you're all weak ptrs ... | 62 void clear() { // Now you're all weak ptrs ... |
| 63 delete m_pObj; | 63 delete m_pObj; |
| 64 m_pObj = nullptr; | 64 m_pObj = nullptr; |
| 65 } | 65 } |
| 66 T* get() const { return m_pObj; } | 66 T* get() const { return m_pObj; } |
| 67 T* AddRef() { FXSYS_assert(m_pObj); ++m_nCount; return m_pObj; } | 67 T* AddRef() { |
| 68 void RemoveRef() { if (m_nCount) --m_nCount; } | 68 FXSYS_assert(m_pObj); |
| 69 size_t use_count() const { return m_nCount; } | 69 ++m_nCount; |
| 70 | 70 return m_pObj; |
| 71 protected: | 71 } |
| 72 size_t m_nCount; | 72 void RemoveRef() { |
| 73 T* m_pObj; | 73 if (m_nCount) |
| 74 --m_nCount; |
| 75 } |
| 76 size_t use_count() const { return m_nCount; } |
| 77 |
| 78 protected: |
| 79 size_t m_nCount; |
| 80 T* m_pObj; |
| 74 }; | 81 }; |
| 75 using CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>; | 82 using CPDF_CountedColorSpace = CPDF_CountedObject<CPDF_ColorSpace>; |
| 76 using CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>; | 83 using CPDF_CountedPattern = CPDF_CountedObject<CPDF_Pattern>; |
| 77 #define PDFFONT_TYPE1» » » 1 | 84 #define PDFFONT_TYPE1 1 |
| 78 #define PDFFONT_TRUETYPE» » 2 | 85 #define PDFFONT_TRUETYPE 2 |
| 79 #define PDFFONT_TYPE3» » » 3 | 86 #define PDFFONT_TYPE3 3 |
| 80 #define PDFFONT_CIDFONT»» » 4 | 87 #define PDFFONT_CIDFONT 4 |
| 81 #define PDFFONT_FIXEDPITCH» » 1 | 88 #define PDFFONT_FIXEDPITCH 1 |
| 82 #define PDFFONT_SERIF» » » 2 | 89 #define PDFFONT_SERIF 2 |
| 83 #define PDFFONT_SYMBOLIC» » 4 | 90 #define PDFFONT_SYMBOLIC 4 |
| 84 #define PDFFONT_SCRIPT» » » 8 | 91 #define PDFFONT_SCRIPT 8 |
| 85 #define PDFFONT_NONSYMBOLIC» » 32 | 92 #define PDFFONT_NONSYMBOLIC 32 |
| 86 #define PDFFONT_ITALIC» » » 64 | 93 #define PDFFONT_ITALIC 64 |
| 87 #define PDFFONT_ALLCAP» » » 0x10000 | 94 #define PDFFONT_ALLCAP 0x10000 |
| 88 #define PDFFONT_SMALLCAP» » 0x20000 | 95 #define PDFFONT_SMALLCAP 0x20000 |
| 89 #define PDFFONT_FORCEBOLD» » 0x40000 | 96 #define PDFFONT_FORCEBOLD 0x40000 |
| 90 #define PDFFONT_USEEXTERNATTR» 0x80000 | 97 #define PDFFONT_USEEXTERNATTR 0x80000 |
| 91 class CPDF_Font | 98 class CPDF_Font { |
| 92 { | 99 public: |
| 93 public: | 100 static CPDF_Font* CreateFontF(CPDF_Document* pDoc, |
| 94 static CPDF_Font*» » CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary
* pFontDict); | 101 CPDF_Dictionary* pFontDict); |
| 95 static CPDF_Font*» » GetStockFont(CPDF_Document* pDoc, const CFX_Byte
StringC& fontname); | 102 static CPDF_Font* GetStockFont(CPDF_Document* pDoc, |
| 96 | 103 const CFX_ByteStringC& fontname); |
| 97 virtual ~CPDF_Font(); | 104 |
| 98 | 105 virtual ~CPDF_Font(); |
| 99 bool IsFontType(int fonttype) const { return fonttype == m_FontType; } | 106 |
| 100 int»GetFontType() const { return m_FontType; } | 107 bool IsFontType(int fonttype) const { return fonttype == m_FontType; } |
| 101 | 108 int GetFontType() const { return m_FontType; } |
| 102 CFX_ByteString» » » GetFontTypeName() const; | 109 |
| 103 | 110 CFX_ByteString GetFontTypeName() const; |
| 104 const CFX_ByteString&» GetBaseFont() const | 111 |
| 105 { | 112 const CFX_ByteString& GetBaseFont() const { return m_BaseFont; } |
| 106 return m_BaseFont; | 113 |
| 114 const CFX_SubstFont* GetSubstFont() const { return m_Font.GetSubstFont(); } |
| 115 |
| 116 FX_DWORD GetFlags() const { return m_Flags; } |
| 117 |
| 118 virtual FX_BOOL IsVertWriting() const; |
| 119 |
| 120 CPDF_Type1Font* GetType1Font() const { |
| 121 return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL; |
| 122 } |
| 123 |
| 124 CPDF_TrueTypeFont* GetTrueTypeFont() const { |
| 125 return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this |
| 126 : NULL; |
| 127 } |
| 128 |
| 129 CPDF_CIDFont* GetCIDFont() const { |
| 130 return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL; |
| 131 } |
| 132 |
| 133 CPDF_Type3Font* GetType3Font() const { |
| 134 return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL; |
| 135 } |
| 136 |
| 137 FX_BOOL IsEmbedded() const { |
| 138 return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL; |
| 139 } |
| 140 |
| 141 virtual FX_BOOL IsUnicodeCompatible() const { return FALSE; } |
| 142 |
| 143 CPDF_StreamAcc* GetFontFile() const { return m_pFontFile; } |
| 144 |
| 145 CPDF_Dictionary* GetFontDict() const { return m_pFontDict; } |
| 146 |
| 147 FX_BOOL IsStandardFont() const; |
| 148 |
| 149 FXFT_Face GetFace() const { return m_Font.GetFace(); } |
| 150 |
| 151 virtual FX_DWORD GetNextChar(const FX_CHAR* pString, |
| 152 int nStrLen, |
| 153 int& offset) const { |
| 154 if (offset < 0 || nStrLen < 1) { |
| 155 return 0; |
| 107 } | 156 } |
| 108 | 157 uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen - 1]; |
| 109 const CFX_SubstFont* GetSubstFont() const | 158 return static_cast<FX_DWORD>(ch); |
| 110 { | 159 } |
| 111 return m_Font.GetSubstFont(); | 160 |
| 112 } | 161 virtual int CountChar(const FX_CHAR* pString, int size) const { return size; } |
| 113 | 162 |
| 114 FX_DWORD GetFlags() const | 163 void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const; |
| 115 { | 164 |
| 116 return m_Flags; | 165 virtual int AppendChar(FX_CHAR* buf, FX_DWORD charcode) const { |
| 117 } | 166 *buf = (FX_CHAR)charcode; |
| 118 | 167 return 1; |
| 119 virtual FX_BOOL IsVertWriting()const; | 168 } |
| 120 | 169 |
| 121 | 170 virtual int GetCharSize(FX_DWORD charcode) const { return 1; } |
| 122 | 171 |
| 123 | 172 virtual int GlyphFromCharCode(FX_DWORD charcode, |
| 124 CPDF_Type1Font* GetType1Font() const | 173 FX_BOOL* pVertGlyph = NULL) = 0; |
| 125 { | 174 virtual int GlyphFromCharCodeExt(FX_DWORD charcode) { |
| 126 return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL
; | 175 return GlyphFromCharCode(charcode); |
| 127 } | 176 } |
| 128 | 177 |
| 129 CPDF_TrueTypeFont* GetTrueTypeFont() const | 178 CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const; |
| 130 { | 179 |
| 131 return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this
: NULL; | 180 FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const; |
| 132 } | 181 |
| 133 | 182 CFX_CharMap* GetCharMap() { return m_pCharMap; } |
| 134 CPDF_CIDFont* GetCIDFont() const | 183 |
| 135 { | 184 CFX_ByteString EncodeString(const CFX_WideString& str) const; |
| 136 return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NU
LL; | 185 |
| 137 } | 186 CFX_WideString DecodeString(const CFX_ByteString& str) const; |
| 138 | 187 |
| 139 CPDF_Type3Font* GetType3Font() const | 188 void GetFontBBox(FX_RECT& rect) const { rect = m_FontBBox; } |
| 140 { | 189 |
| 141 return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NU
LL; | 190 int GetTypeAscent() const { return m_Ascent; } |
| 142 } | 191 |
| 143 | 192 int GetTypeDescent() const { return m_Descent; } |
| 144 | 193 |
| 145 FX_BOOL IsEmbedded() const | 194 int GetItalicAngle() const { return m_ItalicAngle; } |
| 146 { | 195 |
| 147 return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL; | 196 int GetStemV() const { return m_StemV; } |
| 148 } | 197 |
| 149 | 198 int GetStringWidth(const FX_CHAR* pString, int size); |
| 150 virtual FX_BOOL IsUnicodeCompatible() const | 199 |
| 151 { | 200 virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0; |
| 152 return FALSE; | 201 |
| 153 } | 202 virtual int GetCharTypeWidth(FX_DWORD charcode); |
| 154 | 203 |
| 155 CPDF_StreamAcc* GetFontFile() const | 204 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0; |
| 156 { | 205 |
| 157 return m_pFontFile; | 206 CPDF_Document* m_pDocument; |
| 158 } | 207 |
| 159 | 208 class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0); |
| 160 CPDF_Dictionary* GetFontDict() const | 209 |
| 161 { | 210 CFX_Font m_Font; |
| 162 return m_pFontDict; | 211 |
| 163 } | 212 protected: |
| 164 | 213 explicit CPDF_Font(int fonttype); |
| 165 FX_BOOL IsStandardFont() const; | 214 |
| 166 | 215 FX_BOOL Initialize(); |
| 167 FXFT_Face GetFace() const | 216 |
| 168 { | 217 FX_BOOL Load(); |
| 169 return m_Font.GetFace(); | 218 |
| 170 } | 219 virtual FX_BOOL _Load() = 0; |
| 171 | 220 |
| 172 virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen,
int& offset) const | 221 virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0; |
| 173 { | 222 |
| 174 if (offset < 0 || nStrLen < 1) { | 223 virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0; |
| 175 return 0; | 224 |
| 176 } | 225 void LoadUnicodeMap(); |
| 177 uint8_t ch = offset < nStrLen ? pString[offset++] : pString[nStrLen-1]; | 226 |
| 178 return static_cast<FX_DWORD>(ch); | 227 void LoadPDFEncoding(CPDF_Object* pEncoding, |
| 179 } | 228 int& iBaseEncoding, |
| 180 | 229 CFX_ByteString*& pCharNames, |
| 181 virtual int CountChar(const FX_CHAR* pString, int si
ze) const | 230 FX_BOOL bEmbedded, |
| 182 { | 231 FX_BOOL bTrueType); |
| 183 return size; | 232 |
| 184 } | 233 void LoadFontDescriptor(CPDF_Dictionary*); |
| 185 | 234 |
| 186 void AppendChar(CFX_ByteString& str,
FX_DWORD charcode) const; | 235 void LoadCharWidths(FX_WORD* pWidths); |
| 187 | 236 |
| 188 virtual int AppendChar(FX_CHAR* buf, FX_DWORD charco
de) const | 237 void CheckFontMetrics(); |
| 189 { | 238 |
| 190 *buf = (FX_CHAR)charcode; | 239 CFX_CharMap* m_pCharMap; |
| 191 return 1; | 240 |
| 192 } | 241 CFX_ByteString m_BaseFont; |
| 193 | 242 |
| 194 virtual int GetCharSize(FX_DWORD charcode) const | 243 CPDF_StreamAcc* m_pFontFile; |
| 195 { | 244 |
| 196 return 1; | 245 CPDF_Dictionary* m_pFontDict; |
| 197 } | 246 |
| 198 | 247 CPDF_ToUnicodeMap* m_pToUnicodeMap; |
| 199 | 248 |
| 200 | 249 FX_BOOL m_bToUnicodeLoaded; |
| 201 | 250 |
| 202 virtual int GlyphFromCharCode(FX_DWORD charcode, FX_
BOOL *pVertGlyph = NULL) = 0; | 251 int m_Flags; |
| 203 virtual int GlyphFromCharCodeExt(FX_DWORD charcode) | 252 |
| 204 { | 253 FX_RECT m_FontBBox; |
| 205 return GlyphFromCharCode(charcode); | 254 |
| 206 } | 255 int m_StemV; |
| 207 | 256 |
| 208 CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) c
onst; | 257 int m_Ascent; |
| 209 | 258 |
| 210 FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) co
nst; | 259 int m_Descent; |
| 211 | 260 |
| 212 CFX_CharMap* GetCharMap() | 261 int m_ItalicAngle; |
| 213 { | 262 |
| 214 return m_pCharMap; | 263 private: |
| 215 } | 264 const int m_FontType; |
| 216 | 265 }; |
| 217 CFX_ByteString EncodeString(const CFX_WideString& str)
const; | 266 #define PDFFONT_ENCODING_BUILTIN 0 |
| 218 | 267 #define PDFFONT_ENCODING_WINANSI 1 |
| 219 CFX_WideString DecodeString(const CFX_ByteString& str)
const; | 268 #define PDFFONT_ENCODING_MACROMAN 2 |
| 220 | 269 #define PDFFONT_ENCODING_MACEXPERT 3 |
| 221 | 270 #define PDFFONT_ENCODING_STANDARD 4 |
| 222 | 271 #define PDFFONT_ENCODING_ADOBE_SYMBOL 5 |
| 223 | 272 #define PDFFONT_ENCODING_ZAPFDINGBATS 6 |
| 224 void GetFontBBox(FX_RECT& rect) const | 273 #define PDFFONT_ENCODING_PDFDOC 7 |
| 225 { | 274 #define PDFFONT_ENCODING_MS_SYMBOL 8 |
| 226 rect = m_FontBBox; | 275 #define PDFFONT_ENCODING_UNICODE 9 |
| 227 } | 276 class CPDF_FontEncoding { |
| 228 | 277 public: |
| 229 int GetTypeAscent() const | 278 CPDF_FontEncoding(); |
| 230 { | 279 |
| 231 return m_Ascent; | 280 CPDF_FontEncoding(int PredefinedEncoding); |
| 232 } | 281 |
| 233 | 282 void LoadEncoding(CPDF_Object* pEncoding); |
| 234 int GetTypeDescent() const | 283 |
| 235 { | 284 FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const; |
| 236 return m_Descent; | 285 |
| 237 } | 286 FX_WCHAR UnicodeFromCharCode(uint8_t charcode) const { |
| 238 | 287 return m_Unicodes[charcode]; |
| 239 int GetItalicAngle() const | 288 } |
| 240 { | 289 |
| 241 return m_ItalicAngle; | 290 int CharCodeFromUnicode(FX_WCHAR unicode) const; |
| 242 } | 291 |
| 243 | 292 void SetUnicode(uint8_t charcode, FX_WCHAR unicode) { |
| 244 int GetStemV() const | 293 m_Unicodes[charcode] = unicode; |
| 245 { | 294 } |
| 246 return m_StemV; | 295 |
| 247 } | 296 CPDF_Object* Realize(); |
| 248 | 297 |
| 249 int GetStringWidth(const FX_CHAR* pS
tring, int size); | 298 public: |
| 250 | 299 FX_WCHAR m_Unicodes[256]; |
| 251 virtual int GetCharWidthF(FX_DWORD charcode, int lev
el = 0) = 0; | 300 }; |
| 252 | 301 |
| 253 virtual int GetCharTypeWidth(FX_DWORD charcode); | 302 class CPDF_SimpleFont : public CPDF_Font { |
| 254 | 303 public: |
| 255 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT&
rect, int level = 0) = 0; | 304 explicit CPDF_SimpleFont(int fonttype); |
| 256 | 305 ~CPDF_SimpleFont() override; |
| 257 | 306 |
| 258 | 307 CPDF_FontEncoding* GetEncoding() { return &m_Encoding; } |
| 259 CPDF_Document* m_pDocument; | 308 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; |
| 260 | 309 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; |
| 261 class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width
= 0); | 310 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override; |
| 262 | 311 FX_BOOL IsUnicodeCompatible() const override; |
| 263 CFX_Font m_Font; | 312 |
| 264 | 313 protected: |
| 265 protected: | 314 FX_BOOL LoadCommon(); |
| 266 explicit CPDF_Font(int fonttype); | 315 |
| 267 | 316 void LoadSubstFont(); |
| 268 FX_BOOL Initialize(); | 317 |
| 269 | 318 void LoadFaceMetrics(); |
| 270 FX_BOOL Load(); | 319 |
| 271 | 320 virtual void LoadGlyphMap() = 0; |
| 272 virtual FX_BOOL _Load() = 0; | 321 |
| 273 | 322 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override { |
| 274 virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const =
0; | 323 return m_Encoding.UnicodeFromCharCode((uint8_t)charcode); |
| 275 | 324 } |
| 276 virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0
; | 325 |
| 277 | 326 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override { |
| 278 void LoadUnicodeMap(); | 327 return m_Encoding.CharCodeFromUnicode(Unicode); |
| 279 | 328 } |
| 280 void LoadPDFEncoding(CPDF_Object* pEn
coding, int& iBaseEncoding, | 329 |
| 281 CFX_ByteString*& pCharNames, FX_BOOL
bEmbedded, FX_BOOL bTrueType); | 330 void LoadCharMetrics(int charcode); |
| 282 | 331 |
| 283 void LoadFontDescriptor(CPDF_Dictiona
ry*); | 332 CPDF_FontEncoding m_Encoding; |
| 284 | 333 FX_WORD m_GlyphIndex[256]; |
| 285 void LoadCharWidths(FX_WORD* pWidths)
; | 334 FX_WORD m_ExtGID[256]; |
| 286 | 335 CFX_ByteString* m_pCharNames; |
| 287 void CheckFontMetrics(); | 336 int m_BaseEncoding; |
| 288 | 337 FX_WORD m_CharWidth[256]; |
| 289 CFX_CharMap* m_pCharMap; | 338 FX_SMALL_RECT m_CharBBox[256]; |
| 290 | 339 FX_BOOL m_bUseFontWidth; |
| 291 | 340 }; |
| 292 | 341 |
| 293 CFX_ByteString m_BaseFont; | 342 class CPDF_Type1Font : public CPDF_SimpleFont { |
| 294 | 343 public: |
| 295 CPDF_StreamAcc* m_pFontFile; | 344 CPDF_Type1Font(); |
| 296 | 345 |
| 297 CPDF_Dictionary* m_pFontDict; | 346 int GetBase14Font() { return m_Base14Font; } |
| 298 | 347 virtual int GlyphFromCharCodeExt(FX_DWORD charcode); |
| 299 CPDF_ToUnicodeMap* m_pToUnicodeMap; | 348 |
| 300 | 349 protected: |
| 301 FX_BOOL m_bToUnicodeLoaded; | 350 virtual FX_BOOL _Load(); |
| 302 | 351 |
| 303 | 352 int m_Base14Font; |
| 304 | 353 virtual void LoadGlyphMap(); |
| 305 | 354 }; |
| 306 int m_Flags; | 355 class CPDF_TrueTypeFont : public CPDF_SimpleFont { |
| 307 | 356 public: |
| 308 FX_RECT m_FontBBox; | 357 CPDF_TrueTypeFont(); |
| 309 | 358 |
| 310 int m_StemV; | 359 protected: |
| 311 | 360 virtual FX_BOOL _Load(); |
| 312 int m_Ascent; | 361 virtual void LoadGlyphMap(); |
| 313 | 362 }; |
| 314 int m_Descent; | 363 class CPDF_Type3Char { |
| 315 | 364 public: |
| 316 int m_ItalicAngle; | 365 CPDF_Type3Char(); |
| 317 | 366 |
| 318 private: | 367 ~CPDF_Type3Char(); |
| 319 const int m_FontType; | 368 |
| 320 }; | 369 FX_BOOL LoadBitmap(CPDF_RenderContext* pContext); |
| 321 #define PDFFONT_ENCODING_BUILTIN 0 | 370 |
| 322 #define PDFFONT_ENCODING_WINANSI 1 | 371 FX_BOOL m_bColored; |
| 323 #define PDFFONT_ENCODING_MACROMAN 2 | 372 |
| 324 #define PDFFONT_ENCODING_MACEXPERT 3 | 373 FX_BOOL m_bPageRequired; |
| 325 #define PDFFONT_ENCODING_STANDARD 4 | 374 |
| 326 #define PDFFONT_ENCODING_ADOBE_SYMBOL 5 | 375 CPDF_Form* m_pForm; |
| 327 #define PDFFONT_ENCODING_ZAPFDINGBATS 6 | 376 |
| 328 #define PDFFONT_ENCODING_PDFDOC 7 | 377 CFX_AffineMatrix m_ImageMatrix; |
| 329 #define PDFFONT_ENCODING_MS_SYMBOL 8 | 378 |
| 330 #define PDFFONT_ENCODING_UNICODE 9 | 379 CFX_DIBitmap* m_pBitmap; |
| 331 class CPDF_FontEncoding | 380 |
| 332 { | 381 int m_Width; |
| 333 public: | 382 |
| 334 | 383 FX_RECT m_BBox; |
| 335 CPDF_FontEncoding(); | 384 }; |
| 336 | 385 class CPDF_Type3Font : public CPDF_SimpleFont { |
| 337 CPDF_FontEncoding(int PredefinedEncoding); | 386 public: |
| 338 | 387 CPDF_Type3Font(); |
| 339 void LoadEncoding(CPDF_Object* pEncod
ing); | 388 ~CPDF_Type3Font() override; |
| 340 | 389 |
| 341 FX_BOOL IsIdentical(CPDF_FontEncoding* p
Another) const; | 390 void SetPageResources(CPDF_Dictionary* pResources) { |
| 342 | 391 m_pPageResources = pResources; |
| 343 FX_WCHAR UnicodeFromCharCode(uint8_t charcode) co
nst | 392 } |
| 344 { | 393 CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0); |
| 345 return m_Unicodes[charcode]; | 394 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; |
| 346 } | 395 int GetCharTypeWidth(FX_DWORD charcode) override { |
| 347 | 396 return GetCharWidthF(charcode); |
| 348 int CharCodeFromUnicode(FX_WCHAR uni
code) const; | 397 } |
| 349 | 398 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; |
| 350 void SetUnicode(uint8_t charcode, FX_
WCHAR unicode) | 399 CFX_AffineMatrix& GetFontMatrix() { return m_FontMatrix; } |
| 351 { | 400 void CheckType3FontMetrics(); |
| 352 m_Unicodes[charcode] = unicode; | 401 |
| 353 } | 402 protected: |
| 354 | 403 CFX_AffineMatrix m_FontMatrix; |
| 355 CPDF_Object* Realize(); | 404 |
| 356 public: | 405 private: |
| 357 | 406 FX_BOOL _Load() override; |
| 358 FX_WCHAR m_Unicodes[256]; | 407 void LoadGlyphMap() override {} |
| 359 }; | 408 |
| 360 | 409 int m_CharWidthL[256]; |
| 361 class CPDF_SimpleFont : public CPDF_Font | 410 CPDF_Dictionary* m_pCharProcs; |
| 362 { | 411 CPDF_Dictionary* m_pPageResources; |
| 363 public: | 412 CPDF_Dictionary* m_pFontResources; |
| 364 explicit CPDF_SimpleFont(int fonttype); | 413 CFX_MapPtrToPtr m_CacheMap; |
| 365 ~CPDF_SimpleFont() override; | 414 CFX_MapPtrToPtr m_DeletedMap; |
| 366 | 415 }; |
| 367 CPDF_FontEncoding* GetEncoding() | 416 |
| 368 { | 417 #define CIDSET_UNKNOWN 0 |
| 369 return &m_Encoding; | 418 #define CIDSET_GB1 1 |
| 370 } | 419 #define CIDSET_CNS1 2 |
| 371 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; | 420 #define CIDSET_JAPAN1 3 |
| 372 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; | 421 #define CIDSET_KOREA1 4 |
| 373 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) overrid
e; | 422 #define CIDSET_UNICODE 5 |
| 374 FX_BOOL IsUnicodeCompatible() const override; | 423 #define NUMBER_OF_CIDSETS 6 |
| 375 | 424 |
| 376 protected: | 425 class CPDF_CIDFont : public CPDF_Font { |
| 377 FX_BOOL LoadCommon(); | 426 public: |
| 378 | 427 CPDF_CIDFont(); |
| 379 void LoadSubstFont(); | 428 |
| 380 | 429 ~CPDF_CIDFont() override; |
| 381 void LoadFaceMetrics(); | 430 |
| 382 | 431 FX_BOOL LoadGB2312(); |
| 383 virtual void LoadGlyphMap() = 0; | 432 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL* pVertGlyph = NULL) override; |
| 384 | 433 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; |
| 385 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override | 434 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; |
| 386 { | 435 FX_WORD CIDFromCharCode(FX_DWORD charcode) const; |
| 387 return m_Encoding.UnicodeFromCharCode((uint8_t)charcode); | 436 |
| 388 } | 437 FX_BOOL IsTrueType() const { return !m_bType1; } |
| 389 | 438 |
| 390 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override | 439 virtual FX_DWORD GetNextChar(const FX_CHAR* pString, |
| 391 { | 440 int nStrLen, |
| 392 return m_Encoding.CharCodeFromUnicode(Unicode); | 441 int& offset) const override; |
| 393 } | 442 int CountChar(const FX_CHAR* pString, int size) const override; |
| 394 | 443 int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override; |
| 395 void LoadCharMetrics(int charcode); | 444 int GetCharSize(FX_DWORD charcode) const override; |
| 396 | 445 |
| 397 CPDF_FontEncoding m_Encoding; | 446 int GetCharset() const { return m_Charset; } |
| 398 FX_WORD m_GlyphIndex[256]; | 447 |
| 399 FX_WORD m_ExtGID[256]; | 448 const uint8_t* GetCIDTransform(FX_WORD CID) const; |
| 400 CFX_ByteString* m_pCharNames; | 449 FX_BOOL IsVertWriting() const override; |
| 401 int m_BaseEncoding; | 450 short GetVertWidth(FX_WORD CID) const; |
| 402 FX_WORD m_CharWidth[256]; | 451 void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const; |
| 403 FX_SMALL_RECT m_CharBBox[256]; | 452 FX_BOOL IsUnicodeCompatible() const override; |
| 404 FX_BOOL m_bUseFontWidth; | 453 virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const; |
| 405 }; | 454 |
| 406 | 455 protected: |
| 407 class CPDF_Type1Font : public CPDF_SimpleFont | 456 friend class CPDF_Font; |
| 408 { | 457 |
| 409 public: | 458 FX_BOOL _Load() override; |
| 410 | 459 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override; |
| 411 CPDF_Type1Font(); | 460 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override; |
| 412 | 461 int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL* pVertGlyph); |
| 413 int GetBase14Font() | 462 void LoadMetricsArray(CPDF_Array* pArray, |
| 414 { | 463 CFX_DWordArray& result, |
| 415 return m_Base14Font; | 464 int nElements); |
| 416 } | 465 void LoadSubstFont(); |
| 417 virtual int GlyphFromCharCodeExt(FX_DWORD charcode); | 466 |
| 418 protected: | 467 CPDF_CMap* m_pCMap; |
| 419 virtual FX_BOOL _Load(); | 468 CPDF_CMap* m_pAllocatedCMap; |
| 420 | 469 CPDF_CID2UnicodeMap* m_pCID2UnicodeMap; |
| 421 int m_Base14Font; | 470 int m_Charset; |
| 422 virtual void LoadGlyphMap(); | 471 FX_BOOL m_bType1; |
| 423 }; | 472 CPDF_StreamAcc* m_pCIDToGIDMap; |
| 424 class CPDF_TrueTypeFont : public CPDF_SimpleFont | 473 FX_BOOL m_bCIDIsGID; |
| 425 { | 474 FX_WORD m_DefaultWidth; |
| 426 public: | 475 FX_WORD* m_pAnsiWidths; |
| 427 | 476 FX_SMALL_RECT m_CharBBox[256]; |
| 428 CPDF_TrueTypeFont(); | 477 CFX_DWordArray m_WidthList; |
| 429 protected: | 478 short m_DefaultVY; |
| 430 virtual FX_BOOL _Load(); | 479 short m_DefaultW1; |
| 431 virtual void LoadGlyphMap(); | 480 CFX_DWordArray m_VertMetrics; |
| 432 }; | 481 FX_BOOL m_bAdobeCourierStd; |
| 433 class CPDF_Type3Char | 482 CFX_CTTGSUBTable* m_pTTGSUBTable; |
| 434 { | 483 }; |
| 435 public: | 484 |
| 436 | 485 #define PDFCS_DEVICEGRAY 1 |
| 437 CPDF_Type3Char(); | 486 #define PDFCS_DEVICERGB 2 |
| 438 | 487 #define PDFCS_DEVICECMYK 3 |
| 439 ~CPDF_Type3Char(); | 488 #define PDFCS_CALGRAY 4 |
| 440 | 489 #define PDFCS_CALRGB 5 |
| 441 FX_BOOL LoadBitmap(CPDF_RenderContext* pContext); | 490 #define PDFCS_LAB 6 |
| 442 | 491 #define PDFCS_ICCBASED 7 |
| 443 FX_BOOL m_bColored; | 492 #define PDFCS_SEPARATION 8 |
| 444 | 493 #define PDFCS_DEVICEN 9 |
| 445 FX_BOOL m_bPageRequired; | 494 #define PDFCS_INDEXED 10 |
| 446 | 495 #define PDFCS_PATTERN 11 |
| 447 | 496 |
| 448 | 497 class CPDF_ColorSpace { |
| 449 CPDF_Form* m_pForm; | 498 public: |
| 450 | 499 static CPDF_ColorSpace* GetStockCS(int Family); |
| 451 CFX_AffineMatrix m_ImageMatrix; | 500 |
| 452 | 501 static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj); |
| 453 CFX_DIBitmap* m_pBitmap; | 502 |
| 454 | 503 void ReleaseCS(); |
| 455 | 504 |
| 456 int m_Width; | 505 int GetBufSize() const; |
| 457 | 506 |
| 458 FX_RECT m_BBox; | 507 FX_FLOAT* CreateBuf(); |
| 459 }; | 508 |
| 460 class CPDF_Type3Font : public CPDF_SimpleFont | 509 void GetDefaultColor(FX_FLOAT* buf) const; |
| 461 { | 510 |
| 462 public: | 511 int CountComponents() const { return m_nComponents; } |
| 463 CPDF_Type3Font(); | 512 |
| 464 ~CPDF_Type3Font() override; | 513 int GetFamily() const { return m_Family; } |
| 465 | 514 |
| 466 void SetPageResources(CPDF_Dictionary* pResources) | 515 virtual void GetDefaultValue(int iComponent, |
| 467 { | 516 FX_FLOAT& value, |
| 468 m_pPageResources = pResources; | 517 FX_FLOAT& min, |
| 469 } | 518 FX_FLOAT& max) const { |
| 470 CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0); | 519 value = 0; |
| 471 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; | 520 min = 0; |
| 472 int GetCharTypeWidth(FX_DWORD charcode) override | 521 max = 1.0f; |
| 473 { | 522 } |
| 474 return GetCharWidthF(charcode); | 523 |
| 475 } | 524 FX_BOOL sRGB() const; |
| 476 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; | 525 |
| 477 CFX_AffineMatrix& GetFontMatrix() | 526 virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, |
| 478 { | 527 FX_FLOAT& R, |
| 479 return m_FontMatrix; | 528 FX_FLOAT& G, |
| 480 } | 529 FX_FLOAT& B) const = 0; |
| 481 void CheckType3FontMetrics(); | 530 |
| 482 | 531 virtual FX_BOOL SetRGB(FX_FLOAT* pBuf, |
| 483 protected: | 532 FX_FLOAT R, |
| 484 CFX_AffineMatrix m_FontMatrix; | 533 FX_FLOAT G, |
| 485 | 534 FX_FLOAT B) const { |
| 486 private: | 535 return FALSE; |
| 487 FX_BOOL _Load() override; | 536 } |
| 488 void LoadGlyphMap() override {} | 537 |
| 489 | 538 FX_BOOL GetCMYK(FX_FLOAT* pBuf, |
| 490 int m_CharWidthL[256]; | 539 FX_FLOAT& c, |
| 491 CPDF_Dictionary* m_pCharProcs; | 540 FX_FLOAT& m, |
| 492 CPDF_Dictionary* m_pPageResources; | 541 FX_FLOAT& y, |
| 493 CPDF_Dictionary* m_pFontResources; | 542 FX_FLOAT& k) const; |
| 494 CFX_MapPtrToPtr m_CacheMap; | 543 |
| 495 CFX_MapPtrToPtr m_DeletedMap; | 544 FX_BOOL SetCMYK(FX_FLOAT* pBuf, |
| 496 }; | 545 FX_FLOAT c, |
| 497 | 546 FX_FLOAT m, |
| 498 #define CIDSET_UNKNOWN 0 | 547 FX_FLOAT y, |
| 499 #define CIDSET_GB1 1 | 548 FX_FLOAT k) const; |
| 500 #define CIDSET_CNS1 2 | 549 |
| 501 #define CIDSET_JAPAN1 3 | 550 virtual void TranslateImageLine(uint8_t* dest_buf, |
| 502 #define CIDSET_KOREA1 4 | 551 const uint8_t* src_buf, |
| 503 #define CIDSET_UNICODE 5 | 552 int pixels, |
| 504 #define NUMBER_OF_CIDSETS 6 | 553 int image_width, |
| 505 | 554 int image_height, |
| 506 class CPDF_CIDFont : public CPDF_Font | 555 FX_BOOL bTransMask = FALSE) const; |
| 507 { | 556 |
| 508 public: | 557 CPDF_Array*& GetArray() { return m_pArray; } |
| 509 | 558 |
| 510 CPDF_CIDFont(); | 559 int GetMaxIndex() const; |
| 511 | 560 |
| 512 ~CPDF_CIDFont() override; | 561 virtual CPDF_ColorSpace* GetBaseCS() const { return NULL; } |
| 513 | 562 |
| 514 FX_BOOL LoadGB2312(); | 563 virtual void EnableStdConversion(FX_BOOL bEnabled); |
| 515 int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) overrid
e; | 564 |
| 516 int GetCharWidthF(FX_DWORD charcode, int level = 0) override; | 565 CPDF_Document* const m_pDocument; |
| 517 void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) override; | 566 |
| 518 FX_WORD CIDFromCharCode(FX_DWORD charcode) const; | 567 protected: |
| 519 | 568 CPDF_ColorSpace(CPDF_Document* pDoc, int family, int nComponents) |
| 520 FX_BOOL IsTrueType() const | 569 : m_pDocument(pDoc), |
| 521 { | 570 m_Family(family), |
| 522 return !m_bType1; | 571 m_nComponents(nComponents), |
| 523 } | 572 m_pArray(nullptr), |
| 524 | 573 m_dwStdConversion(0) {} |
| 525 virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int nStrLen, int& offse
t) const override; | 574 virtual ~CPDF_ColorSpace() {} |
| 526 int CountChar(const FX_CHAR* pString, int size) const override; | 575 virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) { |
| 527 int AppendChar(FX_CHAR* str, FX_DWORD charcode) const override; | 576 return TRUE; |
| 528 int GetCharSize(FX_DWORD charcode) const override; | 577 } |
| 529 | 578 virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, |
| 530 int GetCharset() const | 579 FX_FLOAT& c, |
| 531 { | 580 FX_FLOAT& m, |
| 532 return m_Charset; | 581 FX_FLOAT& y, |
| 533 } | 582 FX_FLOAT& k) const { |
| 534 | 583 return FALSE; |
| 535 const uint8_t* GetCIDTransform(FX_WORD CID) const; | 584 } |
| 536 FX_BOOL IsVertWriting() const override; | 585 virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, |
| 537 short GetVertWidth(FX_WORD CID) const; | 586 FX_FLOAT c, |
| 538 void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const; | 587 FX_FLOAT m, |
| 539 FX_BOOL IsUnicodeCompatible() const override; | 588 FX_FLOAT y, |
| 540 virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const; | 589 FX_FLOAT k) const { |
| 541 | 590 return FALSE; |
| 542 protected: | 591 } |
| 543 friend class CPDF_Font; | 592 |
| 544 | 593 int m_Family; |
| 545 FX_BOOL _Load() override; | 594 |
| 546 FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const override; | 595 int m_nComponents; |
| 547 FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const override; | 596 |
| 548 int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL *pVertGlyph); | 597 CPDF_Array* m_pArray; |
| 549 void LoadMetricsArray(CPDF_Array* pArray, CFX_DWordArray& result, int nEleme
nts); | 598 |
| 550 void LoadSubstFont(); | 599 FX_DWORD m_dwStdConversion; |
| 551 | 600 }; |
| 552 CPDF_CMap* m_pCMap; | 601 class CPDF_Color { |
| 553 CPDF_CMap* m_pAllocatedCMap; | 602 public: |
| 554 CPDF_CID2UnicodeMap* m_pCID2UnicodeMap; | 603 CPDF_Color() : m_pCS(NULL), m_pBuffer(NULL) {} |
| 555 int m_Charset; | 604 |
| 556 FX_BOOL m_bType1; | 605 CPDF_Color(int family); |
| 557 CPDF_StreamAcc* m_pCIDToGIDMap; | 606 |
| 558 FX_BOOL m_bCIDIsGID; | 607 ~CPDF_Color(); |
| 559 FX_WORD m_DefaultWidth; | 608 |
| 560 FX_WORD* m_pAnsiWidths; | 609 FX_BOOL IsNull() const { return m_pBuffer == NULL; } |
| 561 FX_SMALL_RECT m_CharBBox[256]; | 610 |
| 562 CFX_DWordArray m_WidthList; | 611 FX_BOOL IsEqual(const CPDF_Color& other) const; |
| 563 short m_DefaultVY; | 612 |
| 564 short m_DefaultW1; | 613 FX_BOOL IsPattern() const { |
| 565 CFX_DWordArray m_VertMetrics; | 614 return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN; |
| 566 FX_BOOL m_bAdobeCourierStd; | 615 } |
| 567 CFX_CTTGSUBTable* m_pTTGSUBTable; | 616 |
| 568 }; | 617 void Copy(const CPDF_Color* pSrc); |
| 569 | 618 |
| 570 #define PDFCS_DEVICEGRAY 1 | 619 void SetColorSpace(CPDF_ColorSpace* pCS); |
| 571 #define PDFCS_DEVICERGB 2 | 620 |
| 572 #define PDFCS_DEVICECMYK 3 | 621 void SetValue(FX_FLOAT* comp); |
| 573 #define PDFCS_CALGRAY 4 | 622 |
| 574 #define PDFCS_CALRGB 5 | 623 void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps); |
| 575 #define PDFCS_LAB 6 | 624 |
| 576 #define PDFCS_ICCBASED 7 | 625 FX_BOOL GetRGB(int& R, int& G, int& B) const; |
| 577 #define PDFCS_SEPARATION 8 | 626 |
| 578 #define PDFCS_DEVICEN 9 | 627 CPDF_Pattern* GetPattern() const; |
| 579 #define PDFCS_INDEXED 10 | 628 |
| 580 #define PDFCS_PATTERN 11 | 629 CPDF_ColorSpace* GetPatternCS() const; |
| 581 | 630 |
| 582 class CPDF_ColorSpace | 631 FX_FLOAT* GetPatternColor() const; |
| 583 { | 632 |
| 584 public: | 633 CPDF_ColorSpace* m_pCS; |
| 585 | 634 |
| 586 static CPDF_ColorSpace* GetStockCS(int Family); | 635 protected: |
| 587 | 636 void ReleaseBuffer(); |
| 588 static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj); | 637 void ReleaseColorSpace(); |
| 589 | 638 FX_FLOAT* m_pBuffer; |
| 590 void ReleaseCS(); | 639 }; |
| 591 | 640 #define PATTERN_TILING 1 |
| 592 int GetBufSize() const; | 641 #define PATTERN_SHADING 2 |
| 593 | 642 class CPDF_Pattern { |
| 594 FX_FLOAT* CreateBuf(); | 643 public: |
| 595 | 644 virtual ~CPDF_Pattern(); |
| 596 void GetDefaultColor(FX_FLOAT* buf) c
onst; | 645 void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; } |
| 597 | 646 |
| 598 int CountComponents() const | 647 CPDF_Object* m_pPatternObj; |
| 599 { | 648 |
| 600 return m_nComponents; | 649 int m_PatternType; |
| 601 } | 650 |
| 602 | 651 CFX_AffineMatrix m_Pattern2Form; |
| 603 int GetFamily() const | 652 CFX_AffineMatrix m_ParentMatrix; |
| 604 { | 653 |
| 605 return m_Family; | 654 CPDF_Document* m_pDocument; |
| 606 } | 655 |
| 607 | 656 protected: |
| 608 virtual void GetDefaultValue(int iComponent, FX_FLOAT
& value, FX_FLOAT& min, FX_FLOAT& max) const | 657 CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix); |
| 609 { | 658 FX_BOOL m_bForceClear; |
| 610 value = 0; | 659 }; |
| 611 min = 0; | 660 |
| 612 max = 1.0f; | 661 class CPDF_TilingPattern : public CPDF_Pattern { |
| 613 } | 662 public: |
| 614 | 663 CPDF_TilingPattern(CPDF_Document* pDoc, |
| 615 FX_BOOL sRGB() const; | 664 CPDF_Object* pPatternObj, |
| 616 | 665 const CFX_AffineMatrix* parentMatrix); |
| 617 | 666 |
| 618 | 667 virtual ~CPDF_TilingPattern(); |
| 619 virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_F
LOAT& G, FX_FLOAT& B) const = 0; | 668 |
| 620 | 669 FX_BOOL Load(); |
| 621 virtual FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FL
OAT G, FX_FLOAT B) const | 670 |
| 622 { | 671 FX_BOOL m_bColored; |
| 623 return FALSE; | 672 |
| 624 } | 673 CFX_FloatRect m_BBox; |
| 625 | 674 |
| 626 | 675 FX_FLOAT m_XStep; |
| 627 | 676 |
| 628 | 677 FX_FLOAT m_YStep; |
| 629 FX_BOOL GetCMYK(FX_FLOAT* pBuf, FX_FLOAT
& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const; | 678 |
| 630 | 679 CPDF_Form* m_pForm; |
| 631 FX_BOOL SetCMYK(FX_FLOAT* pBuf, FX_FLOAT
c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const; | 680 }; |
| 632 | 681 class CPDF_ShadingPattern : public CPDF_Pattern { |
| 633 | 682 public: |
| 634 virtual void TranslateImageLine(uint8_t* dest_buf, co
nst uint8_t* src_buf, int pixels, | 683 CPDF_ShadingPattern(CPDF_Document* pDoc, |
| 635 int image_width, int image_height, FX_BOOL bTransMask = FALSE) const
; | 684 CPDF_Object* pPatternObj, |
| 636 | 685 FX_BOOL bShading, |
| 637 CPDF_Array*& GetArray() | 686 const CFX_AffineMatrix* parentMatrix); |
| 638 { | 687 |
| 639 return m_pArray; | 688 virtual ~CPDF_ShadingPattern(); |
| 640 } | 689 |
| 641 | 690 CPDF_Object* m_pShadingObj; |
| 642 int GetMaxIndex() const; | 691 |
| 643 | 692 FX_BOOL m_bShadingObj; |
| 644 virtual CPDF_ColorSpace* GetBaseCS() const | 693 |
| 645 { | 694 FX_BOOL Load(); |
| 646 return NULL; | 695 |
| 647 } | 696 FX_BOOL Reload(); |
| 648 | 697 |
| 649 virtual void EnableStdConversion(FX_BOOL bEnabled); | 698 int m_ShadingType; |
| 650 | 699 |
| 651 CPDF_Document* const m_pDocument; | 700 CPDF_ColorSpace* m_pCS; // Still keep m_pCS as some CPDF_ColorSpace (name |
| 652 | 701 // object) are not managed as counted objects. Refer |
| 653 protected: | 702 // to CPDF_DocPageData::GetColorSpace. |
| 654 CPDF_ColorSpace(CPDF_Document* pDoc, int family, int nComponents) | 703 |
| 655 : m_pDocument(pDoc), | 704 CPDF_CountedColorSpace* m_pCountedCS; |
| 656 m_Family(family), | 705 |
| 657 m_nComponents(nComponents), | 706 CPDF_Function* m_pFunctions[4]; |
| 658 m_pArray(nullptr), | 707 |
| 659 m_dwStdConversion(0) { | 708 int m_nFuncs; |
| 660 } | 709 |
| 661 virtual ~CPDF_ColorSpace() {} | 710 protected: |
| 662 virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array*
pArray) | 711 void Clear(); |
| 663 { | |
| 664 return TRUE; | |
| 665 } | |
| 666 virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, F
X_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const | |
| 667 { | |
| 668 return FALSE; | |
| 669 } | |
| 670 virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX
_FLOAT m, FX_FLOAT y, FX_FLOAT k) const | |
| 671 { | |
| 672 return FALSE; | |
| 673 } | |
| 674 | |
| 675 int m_Family; | |
| 676 | |
| 677 int m_nComponents; | |
| 678 | |
| 679 CPDF_Array* m_pArray; | |
| 680 | |
| 681 FX_DWORD m_dwStdConversion; | |
| 682 }; | |
| 683 class CPDF_Color | |
| 684 { | |
| 685 public: | |
| 686 | |
| 687 CPDF_Color() :m_pCS(NULL), m_pBuffer(NULL) | |
| 688 { | |
| 689 } | |
| 690 | |
| 691 CPDF_Color(int family); | |
| 692 | |
| 693 ~CPDF_Color(); | |
| 694 | |
| 695 FX_BOOL IsNull() const | |
| 696 { | |
| 697 return m_pBuffer == NULL; | |
| 698 } | |
| 699 | |
| 700 FX_BOOL IsEqual(const CPDF_Color& other)
const; | |
| 701 | |
| 702 FX_BOOL IsPattern() const | |
| 703 { | |
| 704 return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN; | |
| 705 } | |
| 706 | |
| 707 void Copy(const CPDF_Color* pSrc); | |
| 708 | |
| 709 void SetColorSpace(CPDF_ColorSpace* p
CS); | |
| 710 | |
| 711 void SetValue(FX_FLOAT* comp); | |
| 712 | |
| 713 void SetValue(CPDF_Pattern* pPattern,
FX_FLOAT* comp, int ncomps); | |
| 714 | |
| 715 FX_BOOL GetRGB(int& R, int& G, int& B) c
onst; | |
| 716 | |
| 717 CPDF_Pattern* GetPattern() const; | |
| 718 | |
| 719 CPDF_ColorSpace* GetPatternCS() const; | |
| 720 | |
| 721 FX_FLOAT* GetPatternColor() const; | |
| 722 | |
| 723 CPDF_ColorSpace* m_pCS; | |
| 724 | |
| 725 protected: | |
| 726 void ReleaseBuffer(); | |
| 727 void ReleaseColorSpace(); | |
| 728 FX_FLOAT* m_pBuffer; | |
| 729 }; | |
| 730 #define PATTERN_TILING 1 | |
| 731 #define PATTERN_SHADING 2 | |
| 732 class CPDF_Pattern | |
| 733 { | |
| 734 public: | |
| 735 | |
| 736 virtual ~CPDF_Pattern(); | |
| 737 void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; } | |
| 738 | |
| 739 CPDF_Object* m_pPatternObj; | |
| 740 | |
| 741 int m_PatternType; | |
| 742 | |
| 743 CFX_AffineMatrix m_Pattern2Form; | |
| 744 CFX_AffineMatrix m_ParentMatrix; | |
| 745 | |
| 746 CPDF_Document* m_pDocument; | |
| 747 | |
| 748 protected: | |
| 749 CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix); | |
| 750 FX_BOOL m_bForceClear; | |
| 751 }; | |
| 752 | |
| 753 class CPDF_TilingPattern : public CPDF_Pattern | |
| 754 { | |
| 755 public: | |
| 756 | |
| 757 CPDF_TilingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, const CFX_
AffineMatrix* parentMatrix); | |
| 758 | |
| 759 virtual ~CPDF_TilingPattern(); | |
| 760 | |
| 761 FX_BOOL Load(); | |
| 762 | |
| 763 | |
| 764 | |
| 765 FX_BOOL m_bColored; | |
| 766 | |
| 767 CFX_FloatRect m_BBox; | |
| 768 | |
| 769 FX_FLOAT m_XStep; | |
| 770 | |
| 771 FX_FLOAT m_YStep; | |
| 772 | |
| 773 | |
| 774 | |
| 775 CPDF_Form* m_pForm; | |
| 776 }; | |
| 777 class CPDF_ShadingPattern : public CPDF_Pattern | |
| 778 { | |
| 779 public: | |
| 780 | |
| 781 CPDF_ShadingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, FX_BOOL b
Shading, const CFX_AffineMatrix* parentMatrix); | |
| 782 | |
| 783 virtual ~CPDF_ShadingPattern(); | |
| 784 | |
| 785 CPDF_Object* m_pShadingObj; | |
| 786 | |
| 787 FX_BOOL m_bShadingObj; | |
| 788 | |
| 789 FX_BOOL Load(); | |
| 790 | |
| 791 FX_BOOL Reload(); | |
| 792 | |
| 793 int m_ShadingType; | |
| 794 | |
| 795 CPDF_ColorSpace* m_pCS; // Still keep m_pCS as some CPDF_ColorSpace (name
object) are not managed as counted objects. Refer to CPDF_DocPageData::GetColor
Space. | |
| 796 | |
| 797 CPDF_CountedColorSpace* m_pCountedCS; | |
| 798 | |
| 799 CPDF_Function* m_pFunctions[4]; | |
| 800 | |
| 801 int m_nFuncs; | |
| 802 protected: | |
| 803 void Clear(); | |
| 804 }; | 712 }; |
| 805 struct CPDF_MeshVertex { | 713 struct CPDF_MeshVertex { |
| 806 FX_FLOAT x, y; | 714 FX_FLOAT x, y; |
| 807 FX_FLOAT r, g, b; | 715 FX_FLOAT r, g, b; |
| 808 }; | 716 }; |
| 809 class CPDF_MeshStream | 717 class CPDF_MeshStream { |
| 810 { | 718 public: |
| 811 public: | 719 FX_BOOL Load(CPDF_Stream* pShadingStream, |
| 812 | 720 CPDF_Function** pFuncs, |
| 813 FX_BOOL» » » » Load(CPDF_Stream* pShadingStream, CPDF_F
unction** pFuncs, int nFuncs, CPDF_ColorSpace* pCS); | 721 int nFuncs, |
| 814 | 722 CPDF_ColorSpace* pCS); |
| 815 FX_DWORD» » » GetFlag(); | 723 |
| 816 | 724 FX_DWORD GetFlag(); |
| 817 void» » » » GetCoords(FX_FLOAT& x, FX_FLOAT& y); | 725 |
| 818 | 726 void GetCoords(FX_FLOAT& x, FX_FLOAT& y); |
| 819 void» » » » GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FL
OAT& b); | 727 |
| 820 | 728 void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b); |
| 821 FX_DWORD » » » GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMat
rix* pObject2Bitmap); | 729 |
| 822 | 730 FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap); |
| 823 FX_BOOL» » » » GetVertexRow(CPDF_MeshVertex* vertex, in
t count, CFX_AffineMatrix* pObject2Bitmap); | 731 |
| 824 CPDF_Function**» m_pFuncs; | 732 FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex, |
| 825 CPDF_ColorSpace*» m_pCS; | 733 int count, |
| 826 FX_DWORD» » » m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits
, m_nComps; | 734 CFX_AffineMatrix* pObject2Bitmap); |
| 827 FX_DWORD» » » m_CoordMax, m_CompMax; | 735 CPDF_Function** m_pFuncs; |
| 828 FX_FLOAT» » » m_xmin, m_xmax, m_ymin, m_ymax; | 736 CPDF_ColorSpace* m_pCS; |
| 829 FX_FLOAT» » » m_ColorMin[8], m_ColorMax[8]; | 737 FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps; |
| 830 CPDF_StreamAcc» » m_Stream; | 738 FX_DWORD m_CoordMax, m_CompMax; |
| 831 CFX_BitStream» » m_BitStream; | 739 FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax; |
| 832 }; | 740 FX_FLOAT m_ColorMin[8], m_ColorMax[8]; |
| 833 #define PDF_IMAGE_NO_COMPRESS» » » » 0x0000 | 741 CPDF_StreamAcc m_Stream; |
| 834 #define PDF_IMAGE_LOSSY_COMPRESS» » » 0x0001 | 742 CFX_BitStream m_BitStream; |
| 835 #define PDF_IMAGE_LOSSLESS_COMPRESS» » » 0x0002 | 743 }; |
| 836 #define PDF_IMAGE_MASK_LOSSY_COMPRESS» » 0x0004 | 744 #define PDF_IMAGE_NO_COMPRESS 0x0000 |
| 837 #define PDF_IMAGE_MASK_LOSSLESS_COMPRESS» 0x0008 | 745 #define PDF_IMAGE_LOSSY_COMPRESS 0x0001 |
| 838 class CPDF_ImageSetParam | 746 #define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002 |
| 839 { | 747 #define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004 |
| 840 public: | 748 #define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008 |
| 841 CPDF_ImageSetParam() | 749 class CPDF_ImageSetParam { |
| 842 : pMatteColor(NULL) | 750 public: |
| 843 , nQuality(80) | 751 CPDF_ImageSetParam() : pMatteColor(NULL), nQuality(80) {} |
| 844 { | 752 FX_ARGB* pMatteColor; |
| 845 } | 753 int32_t nQuality; |
| 846 FX_ARGB* pMatteColor; | 754 }; |
| 847 int32_t nQuality; | 755 class CPDF_Image { |
| 848 }; | 756 public: |
| 849 class CPDF_Image | 757 CPDF_Image(CPDF_Document* pDoc); |
| 850 { | 758 |
| 851 public: | 759 ~CPDF_Image(); |
| 852 | 760 |
| 853 CPDF_Image(CPDF_Document* pDoc); | 761 FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline); |
| 854 | 762 |
| 855 ~CPDF_Image(); | 763 void Release(); |
| 856 | 764 |
| 857 FX_BOOL» » » » » LoadImageF(CPDF_Stream* pImageSt
ream, FX_BOOL bInline); | 765 CPDF_Image* Clone(); |
| 858 | 766 |
| 859 void» » » » » Release(); | 767 FX_BOOL IsInline() { return m_bInline; } |
| 860 | 768 |
| 861 CPDF_Image*»» » » Clone(); | 769 void SetInlineDict(CPDF_Dictionary* pDict) { m_pInlineDict = pDict; } |
| 862 | 770 |
| 863 FX_BOOL» » » » » IsInline() | 771 CPDF_Dictionary* GetInlineDict() const { return m_pInlineDict; } |
| 864 { | 772 |
| 865 return m_bInline; | 773 CPDF_Stream* GetStream() const { return m_pStream; } |
| 866 } | 774 |
| 867 | 775 CPDF_Dictionary* GetDict() const { |
| 868 void» » » » » SetInlineDict(CPDF_Dictionary* p
Dict) | 776 return m_pStream ? m_pStream->GetDict() : NULL; |
| 869 { | 777 } |
| 870 m_pInlineDict = pDict; | 778 |
| 871 } | 779 CPDF_Dictionary* GetOC() const { return m_pOC; } |
| 872 | 780 |
| 873 CPDF_Dictionary*» » GetInlineDict() const | 781 CPDF_Document* GetDocument() const { return m_pDocument; } |
| 874 { | 782 |
| 875 return m_pInlineDict; | 783 int32_t GetPixelHeight() const { return m_Height; } |
| 876 } | 784 |
| 877 | 785 int32_t GetPixelWidth() const { return m_Width; } |
| 878 CPDF_Stream*» » » GetStream() const | 786 |
| 879 { | 787 FX_BOOL IsMask() const { return m_bIsMask; } |
| 880 return m_pStream; | 788 |
| 881 } | 789 FX_BOOL IsInterpol() const { return m_bInterpolate; } |
| 882 | 790 |
| 883 CPDF_Dictionary*» » GetDict() const | 791 CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL, |
| 884 { | 792 FX_DWORD* pMatteColor = NULL, |
| 885 return m_pStream? m_pStream->GetDict(): NULL; | 793 FX_BOOL bStdCS = FALSE, |
| 886 } | 794 FX_DWORD GroupFamily = 0, |
| 887 | 795 FX_BOOL bLoadMask = FALSE) const; |
| 888 CPDF_Dictionary*» » GetOC() const | 796 |
| 889 { | 797 void SetImage(const CFX_DIBitmap* pDIBitmap, |
| 890 return m_pOC; | 798 int32_t iCompress, |
| 891 } | 799 IFX_FileWrite* pFileWrite = NULL, |
| 892 | 800 IFX_FileRead* pFileRead = NULL, |
| 893 CPDF_Document*» » » GetDocument() const | 801 const CFX_DIBitmap* pMask = NULL, |
| 894 { | 802 const CPDF_ImageSetParam* pParam = NULL); |
| 895 return m_pDocument; | 803 |
| 896 } | 804 void SetJpegImage(uint8_t* pImageData, FX_DWORD size); |
| 897 | 805 |
| 898 | 806 void SetJpegImage(IFX_FileRead* pFile); |
| 899 | 807 |
| 900 int32_t» » » » GetPixelHeight() const | 808 void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap); |
| 901 { | 809 |
| 902 return m_Height; | 810 public: |
| 903 } | 811 FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource, |
| 904 | 812 CPDF_Dictionary* pPageResource, |
| 905 int32_t» » » » GetPixelWidth() const | 813 FX_BOOL bStdCS = FALSE, |
| 906 { | 814 FX_DWORD GroupFamily = 0, |
| 907 return m_Width; | 815 FX_BOOL bLoadMask = FALSE); |
| 908 } | 816 FX_BOOL Continue(IFX_Pause* pPause); |
| 909 | 817 CFX_DIBSource* DetachBitmap(); |
| 910 | 818 CFX_DIBSource* DetachMask(); |
| 911 FX_BOOL» » » » » IsMask() const | 819 CFX_DIBSource* m_pDIBSource; |
| 912 { | 820 CFX_DIBSource* m_pMask; |
| 913 return m_bIsMask; | 821 FX_DWORD m_MatteColor; |
| 914 } | 822 |
| 915 | 823 private: |
| 916 FX_BOOL» » » » » IsInterpol() const | 824 CPDF_Stream* m_pStream; |
| 917 { | 825 FX_BOOL m_bInline; |
| 918 return m_bInterpolate; | 826 CPDF_Dictionary* m_pInlineDict; |
| 919 } | 827 |
| 920 | 828 int32_t m_Height; |
| 921 CFX_DIBSource*» » » LoadDIBSource(CFX_DIBSource** ppMask = N
ULL, FX_DWORD* pMatteColor = NULL, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily
= 0, FX_BOOL bLoadMask = FALSE) const; | 829 |
| 922 | 830 int32_t m_Width; |
| 923 | 831 |
| 924 | 832 FX_BOOL m_bIsMask; |
| 925 void» » » » » SetImage(const CFX_DIBitmap* pDI
Bitmap, int32_t iCompress, IFX_FileWrite *pFileWrite = NULL, IFX_FileRead *pFile
Read = NULL, const CFX_DIBitmap* pMask = NULL, const CPDF_ImageSetParam* pParam
= NULL); | 833 |
| 926 | 834 FX_BOOL m_bInterpolate; |
| 927 void» » » » » SetJpegImage(uint8_t* pImageData
, FX_DWORD size); | 835 |
| 928 | 836 CPDF_Document* m_pDocument; |
| 929 void» » » » » SetJpegImage(IFX_FileRead *pFile
); | 837 |
| 930 | 838 CPDF_Dictionary* m_pOC; |
| 931 void» » » » » ResetCache(CPDF_Page* pPage, con
st CFX_DIBitmap* pDIBitmap); | 839 CPDF_Dictionary* InitJPEG(uint8_t* pData, FX_DWORD size); |
| 932 | |
| 933 public: | |
| 934 FX_BOOL» » » » » StartLoadDIBSource(CPDF_Dictiona
ry* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS = FALSE, FX_DW
ORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE); | |
| 935 FX_BOOL» » » » » Continue(IFX_Pause* pPause); | |
| 936 CFX_DIBSource*» » » DetachBitmap(); | |
| 937 CFX_DIBSource*» » » DetachMask(); | |
| 938 CFX_DIBSource*» » » m_pDIBSource; | |
| 939 CFX_DIBSource*» » » m_pMask; | |
| 940 FX_DWORD» » » » m_MatteColor; | |
| 941 private: | |
| 942 | |
| 943 CPDF_Stream*» » » m_pStream; | |
| 944 FX_BOOL» » » » » m_bInline; | |
| 945 CPDF_Dictionary*» » m_pInlineDict; | |
| 946 | |
| 947 int32_t» » » » m_Height; | |
| 948 | |
| 949 int32_t» » » » m_Width; | |
| 950 | |
| 951 FX_BOOL» » » » » m_bIsMask; | |
| 952 | |
| 953 FX_BOOL» » » » » m_bInterpolate; | |
| 954 | |
| 955 CPDF_Document*» » » m_pDocument; | |
| 956 | |
| 957 CPDF_Dictionary*» » m_pOC; | |
| 958 CPDF_Dictionary*» InitJPEG(uint8_t* pData, FX_DWORD size); | |
| 959 }; | 840 }; |
| 960 | 841 |
| 961 #endif // CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ | 842 #endif // CORE_INCLUDE_FPDFAPI_FPDF_RESOURCE_H_ |
| OLD | NEW |