1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
7 #ifndef _FPDF_RESOURCE_
8 #define _FPDF_RESOURCE_
10 #include "fpdf_parser.h"
13 #include "../fxge/fx_font.h"
17 class CPDF_TrueTypeFont;
20 class CPDF_FontEncoding;
22 class CPDF_CID2UnicodeMap;
23 class CPDF_ColorSpace;
27 class CPDF_TilingPattern;
28 class CPDF_ShadingPattern;
31 class CPDF_ToUnicodeMap;
34 class CPDF_RenderContext;
36 class CPDF_ImageObject;
38 typedef struct FT_FaceRec_* FXFT_Face;
39 class CFX_CTTGSUBTable;
42 template <class ObjClass> class CPDF_CountedObject : public CFX_Object
48 typedef CPDF_CountedObject<CPDF_Font*> CPDF_CountedFont;
49 typedef CPDF_CountedObject<CPDF_ColorSpace*> CPDF_CountedColorSpace;
50 typedef CPDF_CountedObject<CPDF_Pattern*> CPDF_CountedPattern;
51 typedef CPDF_CountedObject<CPDF_Image*> CPDF_CountedImage;
52 typedef CPDF_CountedObject<CPDF_IccProfile*> CPDF_CountedICCProfile;
53 typedef CPDF_CountedObject<CPDF_StreamAcc*> CPDF_CountedStreamAcc;
56 typedef CFX_MapPtrTemplate<CPDF_Dictionary*, CPDF_CountedFont*> CPDF_FontMap;
57 typedef CFX_MapPtrTemplate<CPDF_Object*, CPDF_CountedColorSpace*> CPDF_ColorSpaceMap;
58 typedef CFX_MapPtrTemplate<CPDF_Object*, CPDF_CountedPattern*> CPDF_PatternMap;
59 typedef CFX_MapPtrTemplate<FX_DWORD, CPDF_CountedImage*> CPDF_ImageMap;
60 typedef CFX_MapPtrTemplate<CPDF_Stream*, CPDF_CountedICCProfile*> CPDF_IccProfileMap;
61 typedef CFX_MapPtrTemplate<CPDF_Stream*, CPDF_CountedStreamAcc*> CPDF_FontFileMap;
63 #define PDFFONT_TYPE1 1
64 #define PDFFONT_TRUETYPE 2
65 #define PDFFONT_TYPE3 3
66 #define PDFFONT_CIDFONT 4
67 #define PDFFONT_FIXEDPITCH 1
68 #define PDFFONT_SERIF 2
69 #define PDFFONT_SYMBOLIC 4
70 #define PDFFONT_SCRIPT 8
71 #define PDFFONT_NONSYMBOLIC 32
72 #define PDFFONT_ITALIC 64
73 #define PDFFONT_ALLCAP 0x10000
74 #define PDFFONT_SMALLCAP 0x20000
75 #define PDFFONT_FORCEBOLD 0x40000
76 #define PDFFONT_USEEXTERNATTR 0x80000
77 FX_WCHAR PDF_UnicodeFromAdobeName(const FX_CHAR* name);
78 CFX_ByteString PDF_AdobeNameFromUnicode(FX_WCHAR unicode);
79 class CPDF_Font : public CFX_Object
83 static CPDF_Font* CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary* pFontDict);
85 static CPDF_Font* GetStockFont(CPDF_Document* pDoc, FX_BSTR fontname);
92 int GetFontType() const
97 CFX_ByteString GetFontTypeName() const;
99 const CFX_ByteString& GetBaseFont() const
104 const CFX_SubstFont* GetSubstFont() const
106 return m_Font.GetSubstFont();
109 FX_DWORD GetFlags() const
114 virtual FX_BOOL IsVertWriting()const;
119 CPDF_Type1Font* GetType1Font() const
121 return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL;
124 CPDF_TrueTypeFont* GetTrueTypeFont() const
126 return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this : NULL;
129 CPDF_CIDFont* GetCIDFont() const
131 return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL;
134 CPDF_Type3Font* GetType3Font() const
136 return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL;
140 FX_BOOL IsEmbedded() const
142 return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL;
145 virtual FX_BOOL IsUnicodeCompatible() const
150 CPDF_StreamAcc* GetFontFile() const
155 CPDF_Dictionary* GetFontDict() const
160 FX_BOOL IsStandardFont() const;
162 FXFT_Face GetFace() const
164 return m_Font.GetFace();
169 virtual FX_DWORD GetNextChar(FX_LPCSTR pString, int& offset) const
171 return (FX_BYTE)pString[offset++];
174 virtual int CountChar(FX_LPCSTR pString, int size) const
179 void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const;
181 virtual int AppendChar(FX_LPSTR buf, FX_DWORD charcode) const
183 *buf = (FX_CHAR)charcode;
187 virtual int GetCharSize(FX_DWORD charcode) const
195 virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) = 0;
196 virtual int GlyphFromCharCodeExt(FX_DWORD charcode)
198 return GlyphFromCharCode(charcode);
201 CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const;
203 FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const;
205 CFX_CharMap* GetCharMap()
210 CFX_ByteString EncodeString(const CFX_WideString& str) const;
212 CFX_WideString DecodeString(const CFX_ByteString& str) const;
217 void GetFontBBox(FX_RECT& rect) const
222 int GetTypeAscent() const
227 int GetTypeDescent() const
232 int GetItalicAngle() const
234 return m_ItalicAngle;
242 int GetStringWidth(const FX_CHAR* pString, int size);
244 virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0;
246 virtual int GetCharTypeWidth(FX_DWORD charcode);
248 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0;
252 CPDF_Document* m_pDocument;
254 class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0);
261 FX_BOOL Initialize();
265 virtual FX_BOOL _Load() = 0;
267 virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0;
269 virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0;
271 void LoadUnicodeMap();
273 void LoadPDFEncoding(CPDF_Object* pEncoding, int& iBaseEncoding,
274 CFX_ByteString*& pCharNames, FX_BOOL bEmbedded, FX_BOOL bTrueType);
276 void LoadFontDescriptor(CPDF_Dictionary*);
278 void LoadCharWidths(FX_WORD* pWidths);
280 void CheckFontMetrics();
282 CFX_CharMap* m_pCharMap;
288 CFX_ByteString m_BaseFont;
290 CPDF_StreamAcc* m_pFontFile;
292 CPDF_Dictionary* m_pFontDict;
294 CPDF_ToUnicodeMap* m_pToUnicodeMap;
296 FX_BOOL m_bToUnicodeLoaded;
314 #define PDFFONT_ENCODING_BUILTIN 0
315 #define PDFFONT_ENCODING_WINANSI 1
316 #define PDFFONT_ENCODING_MACROMAN 2
317 #define PDFFONT_ENCODING_MACEXPERT 3
318 #define PDFFONT_ENCODING_STANDARD 4
319 #define PDFFONT_ENCODING_ADOBE_SYMBOL 5
320 #define PDFFONT_ENCODING_ZAPFDINGBATS 6
321 #define PDFFONT_ENCODING_PDFDOC 7
322 #define PDFFONT_ENCODING_MS_SYMBOL 8
323 #define PDFFONT_ENCODING_UNICODE 9
324 class CPDF_FontEncoding : public CFX_Object
330 CPDF_FontEncoding(int PredefinedEncoding);
332 void LoadEncoding(CPDF_Object* pEncoding);
334 FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const;
336 FX_WCHAR UnicodeFromCharCode(FX_BYTE charcode) const
338 return m_Unicodes[charcode];
341 int CharCodeFromUnicode(FX_WCHAR unicode) const;
343 void SetUnicode(FX_BYTE charcode, FX_WCHAR unicode)
345 m_Unicodes[charcode] = unicode;
348 CPDF_Object* Realize();
351 FX_WCHAR m_Unicodes[256];
353 class CPDF_SimpleFont : public CPDF_Font
359 virtual ~CPDF_SimpleFont();
361 CPDF_FontEncoding* GetEncoding()
365 virtual int GetCharWidthF(FX_DWORD charcode, int level = 0);
366 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0);
367 virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL);
368 virtual FX_BOOL IsUnicodeCompatible() const;
371 FX_BOOL LoadCommon();
373 void LoadSubstFont();
375 void LoadFaceMetrics();
377 virtual void LoadGlyphMap() = 0;
378 virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const
380 return m_Encoding.UnicodeFromCharCode((FX_BYTE)charcode);
382 virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const
384 return m_Encoding.CharCodeFromUnicode(Unicode);
389 CPDF_FontEncoding m_Encoding;
391 FX_WORD m_GlyphIndex[256];
392 FX_WORD m_ExtGID[256];
397 CFX_ByteString* m_pCharNames;
404 FX_WORD m_CharWidth[256];
406 FX_SMALL_RECT m_CharBBox[256];
408 FX_BOOL m_bUseFontWidth;
410 void LoadCharMetrics(int charcode);
413 class CPDF_Type1Font : public CPDF_SimpleFont
423 virtual int GlyphFromCharCodeExt(FX_DWORD charcode);
425 virtual FX_BOOL _Load();
428 virtual void LoadGlyphMap();
430 class CPDF_TrueTypeFont : public CPDF_SimpleFont
436 virtual FX_BOOL _Load();
437 virtual void LoadGlyphMap();
439 class CPDF_Type3Char : public CFX_Object
447 FX_BOOL LoadBitmap(CPDF_RenderContext* pContext);
451 FX_BOOL m_bPageRequired;
457 CFX_AffineMatrix m_ImageMatrix;
459 CFX_DIBitmap* m_pBitmap;
466 class CPDF_Type3Font : public CPDF_SimpleFont
470 virtual ~CPDF_Type3Font();
471 void SetPageResources(CPDF_Dictionary* pResources)
473 m_pPageResources = pResources;
475 CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0);
476 virtual int GetCharWidthF(FX_DWORD charcode, int level = 0);
477 virtual int GetCharTypeWidth(FX_DWORD charcode)
479 return GetCharWidthF(charcode);
481 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0);
482 CFX_AffineMatrix& GetFontMatrix()
486 void CheckType3FontMetrics();
488 virtual FX_BOOL _Load();
489 virtual void LoadGlyphMap() {}
490 int m_CharWidthL[256];
491 CPDF_Dictionary* m_pCharProcs;
492 CPDF_Dictionary* m_pPageResources;
493 CPDF_Dictionary* m_pFontResources;
494 CFX_MapPtrToPtr m_CacheMap;
495 CFX_MapPtrToPtr m_DeletedMap;
497 CFX_AffineMatrix m_FontMatrix;
499 #define CIDSET_UNKNOWN 0
501 #define CIDSET_CNS1 2
502 #define CIDSET_JAPAN1 3
503 #define CIDSET_KOREA1 4
504 #define CIDSET_UNICODE 5
505 class CPDF_CIDFont : public CPDF_Font
511 virtual ~CPDF_CIDFont();
513 FX_BOOL LoadGB2312();
514 virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL);
515 virtual int GetCharWidthF(FX_DWORD charcode, int level = 0);
516 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0);
518 FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
526 virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int& offset) const;
527 virtual int CountChar(const FX_CHAR* pString, int size) const;
528 virtual int AppendChar(FX_LPSTR str, FX_DWORD charcode) const;
529 virtual int GetCharSize(FX_DWORD charcode) const;
532 int GetCharset() const
537 FX_LPCBYTE GetCIDTransform(FX_WORD CID) const;
541 virtual FX_BOOL IsVertWriting() const;
543 short GetVertWidth(FX_WORD CID) const;
545 void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const;
547 virtual FX_BOOL IsUnicodeCompatible() const;
548 virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const;
550 friend class CPDF_Font;
551 virtual FX_BOOL _Load();
552 virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const;
553 virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const;
554 int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL *pVertGlyph);
558 CPDF_CMap* m_pAllocatedCMap;
560 CPDF_CID2UnicodeMap* m_pCID2UnicodeMap;
566 CPDF_StreamAcc* m_pCIDToGIDMap;
571 FX_WORD m_DefaultWidth;
573 FX_WORD* m_pAnsiWidths;
575 FX_SMALL_RECT m_CharBBox[256];
577 CFX_DWordArray m_WidthList;
583 CFX_DWordArray m_VertMetrics;
586 void LoadMetricsArray(CPDF_Array* pArray, CFX_DWordArray& result, int nElements);
588 void LoadSubstFont();
590 FX_BOOL m_bAdobeCourierStd;
592 CFX_CTTGSUBTable* m_pTTGSUBTable;
594 #define PDFCS_DEVICEGRAY 1
596 #define PDFCS_DEVICERGB 2
597 #define PDFCS_DEVICECMYK 3
598 #define PDFCS_CALGRAY 4
599 #define PDFCS_CALRGB 5
601 #define PDFCS_ICCBASED 7
602 #define PDFCS_SEPARATION 8
603 #define PDFCS_DEVICEN 9
604 #define PDFCS_INDEXED 10
605 #define PDFCS_PATTERN 11
606 class CPDF_ColorSpace : public CFX_Object
610 static CPDF_ColorSpace* GetStockCS(int Family);
612 static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj);
616 int GetBufSize() const;
618 FX_FLOAT* CreateBuf();
620 void GetDefaultColor(FX_FLOAT* buf) const;
622 int CountComponents() const
624 return m_nComponents;
627 int GetFamily() const
632 virtual void GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const
639 FX_BOOL sRGB() const;
643 virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const = 0;
645 virtual FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const
653 FX_BOOL GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const;
655 FX_BOOL SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const;
658 virtual void TranslateImageLine(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf, int pixels,
659 int image_width, int image_height, FX_BOOL bTransMask = FALSE) const;
661 CPDF_Array*& GetArray()
666 int GetMaxIndex() const;
668 virtual CPDF_ColorSpace* GetBaseCS() const
673 virtual void EnableStdConversion(FX_BOOL bEnabled);
674 CPDF_Document* m_pDocument;
679 virtual ~CPDF_ColorSpace() {}
680 virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
684 virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const
688 virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const
697 CPDF_Array* m_pArray;
699 FX_DWORD m_dwStdConversion;
701 class CPDF_Color : public CFX_Object
705 CPDF_Color() :m_pCS(NULL), m_pBuffer(NULL)
709 CPDF_Color(int family);
713 FX_BOOL IsNull() const
715 return m_pBuffer == NULL;
718 FX_BOOL IsEqual(const CPDF_Color& other) const;
720 FX_BOOL IsPattern() const
722 return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN;
725 void Copy(const CPDF_Color* pSrc);
727 void SetColorSpace(CPDF_ColorSpace* pCS);
729 void SetValue(FX_FLOAT* comp);
731 void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps);
733 FX_BOOL GetRGB(int& R, int& G, int& B) const;
735 CPDF_Pattern* GetPattern() const;
737 CPDF_ColorSpace* GetPatternCS() const;
739 FX_FLOAT* GetPatternColor() const;
741 CPDF_ColorSpace* m_pCS;
744 void ReleaseBuffer();
745 void ReleaseColorSpace();
748 #define PATTERN_TILING 1
749 #define PATTERN_SHADING 2
750 class CPDF_Pattern : public CFX_Object
754 virtual ~CPDF_Pattern();
755 void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
757 CPDF_Object* m_pPatternObj;
761 CFX_AffineMatrix m_Pattern2Form;
762 CFX_AffineMatrix m_ParentMatrix;
764 CPDF_Document* m_pDocument;
767 CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix);
768 FX_BOOL m_bForceClear;
771 class CPDF_TilingPattern : public CPDF_Pattern
775 CPDF_TilingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, const CFX_AffineMatrix* parentMatrix);
777 virtual ~CPDF_TilingPattern();
785 CFX_FloatRect m_BBox;
795 class CPDF_ShadingPattern : public CPDF_Pattern
799 CPDF_ShadingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* parentMatrix);
801 virtual ~CPDF_ShadingPattern();
803 CPDF_Object* m_pShadingObj;
805 FX_BOOL m_bShadingObj;
813 CPDF_ColorSpace* m_pCS; // Still keep m_pCS as some CPDF_ColorSpace (name object) are not managed as counted objects. Refer to CPDF_DocPageData::GetColorSpace.
815 CPDF_CountedColorSpace* m_pCountedCS;
817 CPDF_Function* m_pFunctions[4];
823 struct CPDF_MeshVertex {
827 class CPDF_MeshStream : public CFX_Object
831 FX_BOOL Load(CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs, CPDF_ColorSpace* pCS);
835 void GetCoords(FX_FLOAT& x, FX_FLOAT& y);
837 void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b);
839 FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap);
841 FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex, int count, CFX_AffineMatrix* pObject2Bitmap);
842 CPDF_Function** m_pFuncs;
843 CPDF_ColorSpace* m_pCS;
844 FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps;
845 FX_DWORD m_CoordMax, m_CompMax;
846 FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax;
847 FX_FLOAT m_ColorMin[8], m_ColorMax[8];
848 CPDF_StreamAcc m_Stream;
849 CFX_BitStream m_BitStream;
851 #define PDF_IMAGE_NO_COMPRESS 0x0000
852 #define PDF_IMAGE_LOSSY_COMPRESS 0x0001
853 #define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002
854 #define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004
855 #define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008
856 class CPDF_ImageSetParam
864 FX_ARGB* pMatteColor;
867 class CPDF_Image : public CFX_Object
871 CPDF_Image(CPDF_Document* pDoc);
875 FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline);
886 void SetInlineDict(CPDF_Dictionary* pDict)
888 m_pInlineDict = pDict;
891 CPDF_Dictionary* GetInlineDict() const
893 return m_pInlineDict;
896 CPDF_Stream* GetStream() const
901 CPDF_Dictionary* GetDict() const
903 return m_pStream? m_pStream->GetDict(): NULL;
906 CPDF_Dictionary* GetOC() const
911 CPDF_Document* GetDocument() const
918 FX_INT32 GetPixelHeight() const
923 FX_INT32 GetPixelWidth() const
929 FX_BOOL IsMask() const
934 FX_BOOL IsInterpol() const
936 return m_bInterpolate;
939 CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL, FX_DWORD* pMatteColor = NULL, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE) const;
943 void SetImage(const CFX_DIBitmap* pDIBitmap, FX_INT32 iCompress, IFX_FileWrite *pFileWrite = NULL, IFX_FileRead *pFileRead = NULL, const CFX_DIBitmap* pMask = NULL, const CPDF_ImageSetParam* pParam = NULL);
945 void SetJpegImage(FX_BYTE* pImageData, FX_DWORD size);
947 void SetJpegImage(IFX_FileRead *pFile);
949 void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap);
952 FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE);
953 FX_BOOL Continue(IFX_Pause* pPause);
954 CFX_DIBSource* DetachBitmap();
955 CFX_DIBSource* DetachMask();
956 CFX_DIBSource* m_pDIBSource;
957 CFX_DIBSource* m_pMask;
958 FX_DWORD m_MatteColor;
961 CPDF_Stream* m_pStream;
963 CPDF_Dictionary* m_pInlineDict;
971 FX_BOOL m_bInterpolate;
973 CPDF_Document* m_pDocument;
975 CPDF_Dictionary* m_pOC;
976 CPDF_Dictionary* InitJPEG(FX_LPBYTE pData, FX_DWORD size);