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 #define NUMBER_OF_CIDSETS 6
507 class CPDF_CIDFont : public CPDF_Font
513 virtual ~CPDF_CIDFont();
515 FX_BOOL LoadGB2312();
516 virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL);
517 virtual int GetCharWidthF(FX_DWORD charcode, int level = 0);
518 virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0);
520 FX_WORD CIDFromCharCode(FX_DWORD charcode) const;
528 virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int& offset) const;
529 virtual int CountChar(const FX_CHAR* pString, int size) const;
530 virtual int AppendChar(FX_LPSTR str, FX_DWORD charcode) const;
531 virtual int GetCharSize(FX_DWORD charcode) const;
534 int GetCharset() const
539 FX_LPCBYTE GetCIDTransform(FX_WORD CID) const;
543 virtual FX_BOOL IsVertWriting() const;
545 short GetVertWidth(FX_WORD CID) const;
547 void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const;
549 virtual FX_BOOL IsUnicodeCompatible() const;
550 virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const;
552 friend class CPDF_Font;
553 virtual FX_BOOL _Load();
554 virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const;
555 virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const;
556 int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL *pVertGlyph);
560 CPDF_CMap* m_pAllocatedCMap;
562 CPDF_CID2UnicodeMap* m_pCID2UnicodeMap;
568 CPDF_StreamAcc* m_pCIDToGIDMap;
573 FX_WORD m_DefaultWidth;
575 FX_WORD* m_pAnsiWidths;
577 FX_SMALL_RECT m_CharBBox[256];
579 CFX_DWordArray m_WidthList;
585 CFX_DWordArray m_VertMetrics;
588 void LoadMetricsArray(CPDF_Array* pArray, CFX_DWordArray& result, int nElements);
590 void LoadSubstFont();
592 FX_BOOL m_bAdobeCourierStd;
594 CFX_CTTGSUBTable* m_pTTGSUBTable;
596 #define PDFCS_DEVICEGRAY 1
598 #define PDFCS_DEVICERGB 2
599 #define PDFCS_DEVICECMYK 3
600 #define PDFCS_CALGRAY 4
601 #define PDFCS_CALRGB 5
603 #define PDFCS_ICCBASED 7
604 #define PDFCS_SEPARATION 8
605 #define PDFCS_DEVICEN 9
606 #define PDFCS_INDEXED 10
607 #define PDFCS_PATTERN 11
608 class CPDF_ColorSpace : public CFX_Object
612 static CPDF_ColorSpace* GetStockCS(int Family);
614 static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj);
618 int GetBufSize() const;
620 FX_FLOAT* CreateBuf();
622 void GetDefaultColor(FX_FLOAT* buf) const;
624 int CountComponents() const
626 return m_nComponents;
629 int GetFamily() const
634 virtual void GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const
641 FX_BOOL sRGB() const;
645 virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const = 0;
647 virtual FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const
655 FX_BOOL GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const;
657 FX_BOOL SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const;
660 virtual void TranslateImageLine(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf, int pixels,
661 int image_width, int image_height, FX_BOOL bTransMask = FALSE) const;
663 CPDF_Array*& GetArray()
668 int GetMaxIndex() const;
670 virtual CPDF_ColorSpace* GetBaseCS() const
675 virtual void EnableStdConversion(FX_BOOL bEnabled);
676 CPDF_Document* m_pDocument;
681 virtual ~CPDF_ColorSpace() {}
682 virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray)
686 virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const
690 virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const
699 CPDF_Array* m_pArray;
701 FX_DWORD m_dwStdConversion;
703 class CPDF_Color : public CFX_Object
707 CPDF_Color() :m_pCS(NULL), m_pBuffer(NULL)
711 CPDF_Color(int family);
715 FX_BOOL IsNull() const
717 return m_pBuffer == NULL;
720 FX_BOOL IsEqual(const CPDF_Color& other) const;
722 FX_BOOL IsPattern() const
724 return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN;
727 void Copy(const CPDF_Color* pSrc);
729 void SetColorSpace(CPDF_ColorSpace* pCS);
731 void SetValue(FX_FLOAT* comp);
733 void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps);
735 FX_BOOL GetRGB(int& R, int& G, int& B) const;
737 CPDF_Pattern* GetPattern() const;
739 CPDF_ColorSpace* GetPatternCS() const;
741 FX_FLOAT* GetPatternColor() const;
743 CPDF_ColorSpace* m_pCS;
746 void ReleaseBuffer();
747 void ReleaseColorSpace();
750 #define PATTERN_TILING 1
751 #define PATTERN_SHADING 2
752 class CPDF_Pattern : public CFX_Object
756 virtual ~CPDF_Pattern();
757 void SetForceClear(FX_BOOL bForceClear) { m_bForceClear = bForceClear; }
759 CPDF_Object* m_pPatternObj;
763 CFX_AffineMatrix m_Pattern2Form;
764 CFX_AffineMatrix m_ParentMatrix;
766 CPDF_Document* m_pDocument;
769 CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix);
770 FX_BOOL m_bForceClear;
773 class CPDF_TilingPattern : public CPDF_Pattern
777 CPDF_TilingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, const CFX_AffineMatrix* parentMatrix);
779 virtual ~CPDF_TilingPattern();
787 CFX_FloatRect m_BBox;
797 class CPDF_ShadingPattern : public CPDF_Pattern
801 CPDF_ShadingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* parentMatrix);
803 virtual ~CPDF_ShadingPattern();
805 CPDF_Object* m_pShadingObj;
807 FX_BOOL m_bShadingObj;
815 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.
817 CPDF_CountedColorSpace* m_pCountedCS;
819 CPDF_Function* m_pFunctions[4];
825 struct CPDF_MeshVertex {
829 class CPDF_MeshStream : public CFX_Object
833 FX_BOOL Load(CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs, CPDF_ColorSpace* pCS);
837 void GetCoords(FX_FLOAT& x, FX_FLOAT& y);
839 void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b);
841 FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap);
843 FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex, int count, CFX_AffineMatrix* pObject2Bitmap);
844 CPDF_Function** m_pFuncs;
845 CPDF_ColorSpace* m_pCS;
846 FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps;
847 FX_DWORD m_CoordMax, m_CompMax;
848 FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax;
849 FX_FLOAT m_ColorMin[8], m_ColorMax[8];
850 CPDF_StreamAcc m_Stream;
851 CFX_BitStream m_BitStream;
853 #define PDF_IMAGE_NO_COMPRESS 0x0000
854 #define PDF_IMAGE_LOSSY_COMPRESS 0x0001
855 #define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002
856 #define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004
857 #define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008
858 class CPDF_ImageSetParam
866 FX_ARGB* pMatteColor;
869 class CPDF_Image : public CFX_Object
873 CPDF_Image(CPDF_Document* pDoc);
877 FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline);
888 void SetInlineDict(CPDF_Dictionary* pDict)
890 m_pInlineDict = pDict;
893 CPDF_Dictionary* GetInlineDict() const
895 return m_pInlineDict;
898 CPDF_Stream* GetStream() const
903 CPDF_Dictionary* GetDict() const
905 return m_pStream? m_pStream->GetDict(): NULL;
908 CPDF_Dictionary* GetOC() const
913 CPDF_Document* GetDocument() const
920 FX_INT32 GetPixelHeight() const
925 FX_INT32 GetPixelWidth() const
931 FX_BOOL IsMask() const
936 FX_BOOL IsInterpol() const
938 return m_bInterpolate;
941 CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL, FX_DWORD* pMatteColor = NULL, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE) const;
945 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);
947 void SetJpegImage(FX_BYTE* pImageData, FX_DWORD size);
949 void SetJpegImage(IFX_FileRead *pFile);
951 void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap);
954 FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE);
955 FX_BOOL Continue(IFX_Pause* pPause);
956 CFX_DIBSource* DetachBitmap();
957 CFX_DIBSource* DetachMask();
958 CFX_DIBSource* m_pDIBSource;
959 CFX_DIBSource* m_pMask;
960 FX_DWORD m_MatteColor;
963 CPDF_Stream* m_pStream;
965 CPDF_Dictionary* m_pInlineDict;
973 FX_BOOL m_bInterpolate;
975 CPDF_Document* m_pDocument;
977 CPDF_Dictionary* m_pOC;
978 CPDF_Dictionary* InitJPEG(FX_LPBYTE pData, FX_DWORD size);