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 |