From 3f3b45cc74b0499912409f766a595945dbbfc4c5 Mon Sep 17 00:00:00 2001 From: John Abd-El-Malek Date: Fri, 23 May 2014 17:28:10 -0700 Subject: Convert all line endings to LF. --- core/include/fpdfapi/fpdf_resource.h | 1920 +++++++++++++++++----------------- 1 file changed, 960 insertions(+), 960 deletions(-) (limited to 'core/include/fpdfapi/fpdf_resource.h') diff --git a/core/include/fpdfapi/fpdf_resource.h b/core/include/fpdfapi/fpdf_resource.h index eea3afc4c6..49e7148ee6 100644 --- a/core/include/fpdfapi/fpdf_resource.h +++ b/core/include/fpdfapi/fpdf_resource.h @@ -1,960 +1,960 @@ -// Copyright 2014 PDFium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com - -#ifndef _FPDF_RESOURCE_ -#define _FPDF_RESOURCE_ -#ifndef _FPDF_PARSER_ -#include "fpdf_parser.h" -#endif -#ifndef _FX_FONT_H_ -#include "../fxge/fx_font.h" -#endif -class CPDF_Font; -class CPDF_Type1Font; -class CPDF_TrueTypeFont; -class CPDF_CIDFont; -class CPDF_Type3Font; -class CPDF_FontEncoding; -class CPDF_CMap; -class CPDF_CID2UnicodeMap; -class CPDF_ColorSpace; -class CPDF_Color; -class CPDF_Function; -class CPDF_Pattern; -class CPDF_TilingPattern; -class CPDF_ShadingPattern; -class CPDF_Image; -class CPDF_Face; -class CPDF_ToUnicodeMap; -class CFX_SubstFont; -class CFX_Font; -class CPDF_RenderContext; -class CPDF_Form; -class CPDF_ImageObject; -class CFX_DIBitmap; -typedef struct FT_FaceRec_* FXFT_Face; -class CFX_CTTGSUBTable; -class CPDF_Page; -#define PDFFONT_TYPE1 1 -#define PDFFONT_TRUETYPE 2 -#define PDFFONT_TYPE3 3 -#define PDFFONT_CIDFONT 4 -#define PDFFONT_FIXEDPITCH 1 -#define PDFFONT_SERIF 2 -#define PDFFONT_SYMBOLIC 4 -#define PDFFONT_SCRIPT 8 -#define PDFFONT_NONSYMBOLIC 32 -#define PDFFONT_ITALIC 64 -#define PDFFONT_ALLCAP 0x10000 -#define PDFFONT_SMALLCAP 0x20000 -#define PDFFONT_FORCEBOLD 0x40000 -#define PDFFONT_USEEXTERNATTR 0x80000 -FX_WCHAR PDF_UnicodeFromAdobeName(const FX_CHAR* name); -CFX_ByteString PDF_AdobeNameFromUnicode(FX_WCHAR unicode); -class CPDF_Font : public CFX_Object -{ -public: - - static CPDF_Font* CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary* pFontDict); - - static CPDF_Font* GetStockFont(CPDF_Document* pDoc, FX_BSTR fontname); - - virtual ~CPDF_Font(); - - - - - int GetFontType() const - { - return m_FontType; - } - - CFX_ByteString GetFontTypeName() const; - - const CFX_ByteString& GetBaseFont() const - { - return m_BaseFont; - } - - const CFX_SubstFont* GetSubstFont() const - { - return m_Font.GetSubstFont(); - } - - FX_DWORD GetFlags() const - { - return m_Flags; - } - - virtual FX_BOOL IsVertWriting()const; - - - - - CPDF_Type1Font* GetType1Font() const - { - return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL; - } - - CPDF_TrueTypeFont* GetTrueTypeFont() const - { - return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this : NULL; - } - - CPDF_CIDFont* GetCIDFont() const - { - return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL; - } - - CPDF_Type3Font* GetType3Font() const - { - return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL; - } - - - FX_BOOL IsEmbedded() const - { - return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL; - } - - virtual FX_BOOL IsUnicodeCompatible() const - { - return FALSE; - } - - CPDF_StreamAcc* GetFontFile() const - { - return m_pFontFile; - } - - CPDF_Dictionary* GetFontDict() const - { - return m_pFontDict; - } - - FX_BOOL IsStandardFont() const; - - FXFT_Face GetFace() const - { - return m_Font.GetFace(); - } - - - - virtual FX_DWORD GetNextChar(FX_LPCSTR pString, int& offset) const - { - return (FX_BYTE)pString[offset++]; - } - - virtual int CountChar(FX_LPCSTR pString, int size) const - { - return size; - } - - void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const; - - virtual int AppendChar(FX_LPSTR buf, FX_DWORD charcode) const - { - *buf = (FX_CHAR)charcode; - return 1; - } - - virtual int GetCharSize(FX_DWORD charcode) const - { - return 1; - } - - - - - virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) = 0; - virtual int GlyphFromCharCodeExt(FX_DWORD charcode) - { - return GlyphFromCharCode(charcode); - } - - CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const; - - FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const; - - CFX_CharMap* GetCharMap() - { - return m_pCharMap; - } - - CFX_ByteString EncodeString(const CFX_WideString& str) const; - - CFX_WideString DecodeString(const CFX_ByteString& str) const; - - - - - void GetFontBBox(FX_RECT& rect) const - { - rect = m_FontBBox; - } - - int GetTypeAscent() const - { - return m_Ascent; - } - - int GetTypeDescent() const - { - return m_Descent; - } - - int GetItalicAngle() const - { - return m_ItalicAngle; - } - - int GetStemV() const - { - return m_StemV; - } - - int GetStringWidth(const FX_CHAR* pString, int size); - - virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0; - - virtual int GetCharTypeWidth(FX_DWORD charcode); - - virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0; - - - - CPDF_Document* m_pDocument; - - class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0); - - CFX_Font m_Font; -protected: - - CPDF_Font(); - - FX_BOOL Initialize(); - - FX_BOOL Load(); - - virtual FX_BOOL _Load() = 0; - - virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0; - - virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0; - - void LoadUnicodeMap(); - - void LoadPDFEncoding(CPDF_Object* pEncoding, int& iBaseEncoding, - CFX_ByteString*& pCharNames, FX_BOOL bEmbedded, FX_BOOL bTrueType); - - void LoadFontDescriptor(CPDF_Dictionary*); - - void LoadCharWidths(FX_WORD* pWidths); - - void CheckFontMetrics(); - - CFX_CharMap* m_pCharMap; - - - - int m_FontType; - - CFX_ByteString m_BaseFont; - - CPDF_StreamAcc* m_pFontFile; - - CPDF_Dictionary* m_pFontDict; - - CPDF_ToUnicodeMap* m_pToUnicodeMap; - - FX_BOOL m_bToUnicodeLoaded; - - - - - int m_Flags; - - FX_RECT m_FontBBox; - - int m_StemV; - - int m_Ascent; - - int m_Descent; - - int m_ItalicAngle; - -}; -#define PDFFONT_ENCODING_BUILTIN 0 -#define PDFFONT_ENCODING_WINANSI 1 -#define PDFFONT_ENCODING_MACROMAN 2 -#define PDFFONT_ENCODING_MACEXPERT 3 -#define PDFFONT_ENCODING_STANDARD 4 -#define PDFFONT_ENCODING_ADOBE_SYMBOL 5 -#define PDFFONT_ENCODING_ZAPFDINGBATS 6 -#define PDFFONT_ENCODING_PDFDOC 7 -#define PDFFONT_ENCODING_MS_SYMBOL 8 -#define PDFFONT_ENCODING_UNICODE 9 -class CPDF_FontEncoding : public CFX_Object -{ -public: - - CPDF_FontEncoding(); - - CPDF_FontEncoding(int PredefinedEncoding); - - void LoadEncoding(CPDF_Object* pEncoding); - - FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const; - - FX_WCHAR UnicodeFromCharCode(FX_BYTE charcode) const - { - return m_Unicodes[charcode]; - } - - int CharCodeFromUnicode(FX_WCHAR unicode) const; - - void SetUnicode(FX_BYTE charcode, FX_WCHAR unicode) - { - m_Unicodes[charcode] = unicode; - } - - CPDF_Object* Realize(); -public: - - FX_WCHAR m_Unicodes[256]; -}; -class CPDF_SimpleFont : public CPDF_Font -{ -public: - - CPDF_SimpleFont(); - - virtual ~CPDF_SimpleFont(); - - CPDF_FontEncoding* GetEncoding() - { - return &m_Encoding; - } - virtual int GetCharWidthF(FX_DWORD charcode, int level = 0); - virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0); - virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL); - virtual FX_BOOL IsUnicodeCompatible() const; -protected: - - FX_BOOL LoadCommon(); - - void LoadSubstFont(); - - void LoadFaceMetrics(); - - virtual void LoadGlyphMap() = 0; - virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const - { - return m_Encoding.UnicodeFromCharCode((FX_BYTE)charcode); - } - virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const - { - return m_Encoding.CharCodeFromUnicode(Unicode); - } - - - - CPDF_FontEncoding m_Encoding; - - FX_WORD m_GlyphIndex[256]; - FX_WORD m_ExtGID[256]; - - - - - CFX_ByteString* m_pCharNames; - - int m_BaseEncoding; - - - - - FX_WORD m_CharWidth[256]; - - FX_SMALL_RECT m_CharBBox[256]; - - FX_BOOL m_bUseFontWidth; - - void LoadCharMetrics(int charcode); - -}; -class CPDF_Type1Font : public CPDF_SimpleFont -{ -public: - - CPDF_Type1Font(); - - int GetBase14Font() - { - return m_Base14Font; - } - virtual int GlyphFromCharCodeExt(FX_DWORD charcode); -protected: - virtual FX_BOOL _Load(); - - int m_Base14Font; - virtual void LoadGlyphMap(); -}; -class CPDF_TrueTypeFont : public CPDF_SimpleFont -{ -public: - - CPDF_TrueTypeFont(); -protected: - virtual FX_BOOL _Load(); - virtual void LoadGlyphMap(); -}; -class CPDF_Type3Char : public CFX_Object -{ -public: - - CPDF_Type3Char(); - - ~CPDF_Type3Char(); - - FX_BOOL LoadBitmap(CPDF_RenderContext* pContext); - - FX_BOOL m_bColored; - - FX_BOOL m_bPageRequired; - - - - CPDF_Form* m_pForm; - - CFX_AffineMatrix m_ImageMatrix; - - CFX_DIBitmap* m_pBitmap; - - - int m_Width; - - FX_RECT m_BBox; -}; -class CPDF_Type3Font : public CPDF_SimpleFont -{ -public: - CPDF_Type3Font(); - virtual ~CPDF_Type3Font(); - void SetPageResources(CPDF_Dictionary* pResources) - { - m_pPageResources = pResources; - } - CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0); - virtual int GetCharWidthF(FX_DWORD charcode, int level = 0); - virtual int GetCharTypeWidth(FX_DWORD charcode) - { - return GetCharWidthF(charcode); - } - virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0); - CFX_AffineMatrix& GetFontMatrix() - { - return m_FontMatrix; - } - void CheckType3FontMetrics(); -private: - virtual FX_BOOL _Load(); - virtual void LoadGlyphMap() {} - int m_CharWidthL[256]; - CPDF_Dictionary* m_pCharProcs; - CPDF_Dictionary* m_pPageResources; - CPDF_Dictionary* m_pFontResources; - CFX_MapPtrToPtr m_CacheMap; - CFX_MapPtrToPtr m_DeletedMap; -protected: - CFX_AffineMatrix m_FontMatrix; -}; -#define CIDSET_UNKNOWN 0 -#define CIDSET_GB1 1 -#define CIDSET_CNS1 2 -#define CIDSET_JAPAN1 3 -#define CIDSET_KOREA1 4 -#define CIDSET_UNICODE 5 -class CPDF_CIDFont : public CPDF_Font -{ -public: - - CPDF_CIDFont(); - - virtual ~CPDF_CIDFont(); - - FX_BOOL LoadGB2312(); - virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL); - virtual int GetCharWidthF(FX_DWORD charcode, int level = 0); - virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0); - - FX_WORD CIDFromCharCode(FX_DWORD charcode) const; - - FX_BOOL IsTrueType() - { - return !m_bType1; - } - - - virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int& offset) const; - virtual int CountChar(const FX_CHAR* pString, int size) const; - virtual int AppendChar(FX_LPSTR str, FX_DWORD charcode) const; - virtual int GetCharSize(FX_DWORD charcode) const; - - - int GetCharset() const - { - return m_Charset; - } - - FX_LPCBYTE GetCIDTransform(FX_WORD CID) const; - - - - virtual FX_BOOL IsVertWriting() const; - - short GetVertWidth(FX_WORD CID) const; - - void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const; - - virtual FX_BOOL IsUnicodeCompatible() const; - virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const; -protected: - friend class CPDF_Font; - virtual FX_BOOL _Load(); - virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const; - virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const; - int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL *pVertGlyph); - - CPDF_CMap* m_pCMap; - - CPDF_CMap* m_pAllocatedCMap; - - CPDF_CID2UnicodeMap* m_pCID2UnicodeMap; - - int m_Charset; - - FX_BOOL m_bType1; - - CPDF_StreamAcc* m_pCIDToGIDMap; - FX_BOOL m_bCIDIsGID; - - - - FX_WORD m_DefaultWidth; - - FX_WORD* m_pAnsiWidths; - - FX_SMALL_RECT m_CharBBox[256]; - - CFX_DWordArray m_WidthList; - - short m_DefaultVY; - - short m_DefaultW1; - - CFX_DWordArray m_VertMetrics; - - - void LoadMetricsArray(CPDF_Array* pArray, CFX_DWordArray& result, int nElements); - - void LoadSubstFont(); - - FX_BOOL m_bAdobeCourierStd; - - CFX_CTTGSUBTable* m_pTTGSUBTable; -}; -#define PDFCS_DEVICEGRAY 1 - -#define PDFCS_DEVICERGB 2 -#define PDFCS_DEVICECMYK 3 -#define PDFCS_CALGRAY 4 -#define PDFCS_CALRGB 5 -#define PDFCS_LAB 6 -#define PDFCS_ICCBASED 7 -#define PDFCS_SEPARATION 8 -#define PDFCS_DEVICEN 9 -#define PDFCS_INDEXED 10 -#define PDFCS_PATTERN 11 -class CPDF_ColorSpace : public CFX_Object -{ -public: - - static CPDF_ColorSpace* GetStockCS(int Family); - - static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj); - - void ReleaseCS(); - - int GetBufSize() const; - - FX_FLOAT* CreateBuf(); - - void GetDefaultColor(FX_FLOAT* buf) const; - - int CountComponents() const - { - return m_nComponents; - } - - int GetFamily() const - { - return m_Family; - } - - virtual void GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const - { - value = 0; - min = 0; - max = 1.0f; - } - - FX_BOOL sRGB() const; - - - - virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const = 0; - - virtual FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const - { - return FALSE; - } - - - - - FX_BOOL GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const; - - FX_BOOL SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const; - - - virtual void TranslateImageLine(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf, int pixels, - int image_width, int image_height, FX_BOOL bTransMask = FALSE) const; - - CPDF_Array*& GetArray() - { - return m_pArray; - } - - int GetMaxIndex() const; - - virtual CPDF_ColorSpace* GetBaseCS() const - { - return NULL; - } - - virtual void EnableStdConversion(FX_BOOL bEnabled); - CPDF_Document* m_pDocument; -protected: - - CPDF_ColorSpace(); - - virtual ~CPDF_ColorSpace() {} - virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) - { - return TRUE; - } - virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const - { - return FALSE; - } - virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const - { - return FALSE; - } - - int m_Family; - - int m_nComponents; - - CPDF_Array* m_pArray; - - FX_DWORD m_dwStdConversion; -}; -class CPDF_Color : public CFX_Object -{ -public: - - CPDF_Color() - { - m_pBuffer = NULL; - m_pCS = NULL; - } - - CPDF_Color(int family); - - ~CPDF_Color(); - - FX_BOOL IsNull() const - { - return m_pBuffer == NULL; - } - - FX_BOOL IsEqual(const CPDF_Color& other) const; - - FX_BOOL IsPattern() const - { - return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN; - } - - void Copy(const CPDF_Color* pSrc); - - void SetColorSpace(CPDF_ColorSpace* pCS); - - void SetValue(FX_FLOAT* comp); - - void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps); - - FX_BOOL GetRGB(int& R, int& G, int& B) const; - - CPDF_Pattern* GetPattern() const; - - CPDF_ColorSpace* GetPatternCS() const; - - FX_FLOAT* GetPatternColor() const; - - CPDF_ColorSpace* m_pCS; - - FX_FLOAT* m_pBuffer; -protected: - void ReleaseBuffer(); - void ReleaseColorSpace(); -}; -#define PATTERN_TILING 1 -#define PATTERN_SHADING 2 -class CPDF_Pattern : public CFX_Object -{ -public: - - virtual ~CPDF_Pattern() {} - - CPDF_Object* m_pPatternObj; - - int m_PatternType; - - CFX_AffineMatrix m_Pattern2Form; - CFX_AffineMatrix m_ParentMatrix; - - CPDF_Document* m_pDocument; - -protected: - - CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix) - { - if (pParentMatrix) { - m_ParentMatrix = *pParentMatrix; - } - } -}; -class CPDF_TilingPattern : public CPDF_Pattern -{ -public: - - CPDF_TilingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, const CFX_AffineMatrix* parentMatrix); - - virtual ~CPDF_TilingPattern(); - - FX_BOOL Load(); - - - - FX_BOOL m_bColored; - - CFX_FloatRect m_BBox; - - FX_FLOAT m_XStep; - - FX_FLOAT m_YStep; - - - - CPDF_Form* m_pForm; -}; -class CPDF_ShadingPattern : public CPDF_Pattern -{ -public: - - CPDF_ShadingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* parentMatrix); - - virtual ~CPDF_ShadingPattern(); - - CPDF_Object* m_pShadingObj; - - FX_BOOL m_bShadingObj; - - FX_BOOL Load(); - - FX_BOOL Reload(); - - int m_ShadingType; - - CPDF_ColorSpace* m_pCS; - - - CPDF_Function* m_pFunctions[4]; - - int m_nFuncs; -protected: - void Clear(); -}; -struct CPDF_MeshVertex { - FX_FLOAT x, y; - FX_FLOAT r, g, b; -}; -class CPDF_MeshStream : public CFX_Object -{ -public: - - FX_BOOL Load(CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs, CPDF_ColorSpace* pCS); - - FX_DWORD GetFlag(); - - void GetCoords(FX_FLOAT& x, FX_FLOAT& y); - - void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b); - - FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap); - - FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex, int count, CFX_AffineMatrix* pObject2Bitmap); - CPDF_Function** m_pFuncs; - CPDF_ColorSpace* m_pCS; - FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps; - FX_DWORD m_CoordMax, m_CompMax; - FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax; - FX_FLOAT m_ColorMin[8], m_ColorMax[8]; - CPDF_StreamAcc m_Stream; - CFX_BitStream m_BitStream; -}; -#define PDF_IMAGE_NO_COMPRESS 0x0000 -#define PDF_IMAGE_LOSSY_COMPRESS 0x0001 -#define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002 -#define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004 -#define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008 -class CPDF_ImageSetParam -{ -public: - CPDF_ImageSetParam() - : pMatteColor(NULL) - , nQuality(80) - { - } - FX_ARGB* pMatteColor; - FX_INT32 nQuality; -}; -class CPDF_Image : public CFX_Object -{ -public: - - CPDF_Image(CPDF_Document* pDoc); - - ~CPDF_Image(); - - FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline); - - void Release(); - - CPDF_Image* Clone(); - - FX_BOOL IsInline() - { - return m_bInline; - } - - void SetInlineDict(CPDF_Dictionary* pDict) - { - m_pInlineDict = pDict; - } - - CPDF_Dictionary* GetInlineDict() const - { - return m_pInlineDict; - } - - CPDF_Stream* GetStream() const - { - return m_pStream; - } - - CPDF_Dictionary* GetDict() const - { - return m_pStream->GetDict(); - } - - CPDF_Dictionary* GetOC() const - { - return m_pOC; - } - - CPDF_Document* GetDocument() const - { - return m_pDocument; - } - - - - FX_INT32 GetPixelHeight() const - { - return m_Height; - } - - FX_INT32 GetPixelWidth() const - { - return m_Width; - } - - - FX_BOOL IsMask() const - { - return m_bIsMask; - } - - FX_BOOL IsInterpol() const - { - return m_bInterpolate; - } - - CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL, FX_DWORD* pMatteColor = NULL, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE) const; - - - - void SetImage(const CFX_DIBitmap* pDIBitmap, FX_INT32 iCompress, IFX_FileWrite *pFileWrite = NULL, IFX_FileRead *pFileRead = NULL, const CFX_DIBitmap* pMask = NULL, const CPDF_ImageSetParam* pParam = NULL); - - void SetJpegImage(FX_BYTE* pImageData, FX_DWORD size); - - void SetJpegImage(IFX_FileRead *pFile); - - void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap); - -public: - FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE); - FX_BOOL Continue(IFX_Pause* pPause); - CFX_DIBSource* DetachBitmap(); - CFX_DIBSource* DetachMask(); - CFX_DIBSource* m_pDIBSource; - CFX_DIBSource* m_pMask; - FX_DWORD m_MatteColor; -private: - - CPDF_Stream* m_pStream; - FX_BOOL m_bInline; - CPDF_Dictionary* m_pInlineDict; - - FX_INT32 m_Height; - - FX_INT32 m_Width; - - FX_BOOL m_bIsMask; - - FX_BOOL m_bInterpolate; - - CPDF_Document* m_pDocument; - - CPDF_Dictionary* m_pOC; - CPDF_Dictionary* InitJPEG(FX_LPBYTE pData, FX_DWORD size); -}; -#endif +// Copyright 2014 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com + +#ifndef _FPDF_RESOURCE_ +#define _FPDF_RESOURCE_ +#ifndef _FPDF_PARSER_ +#include "fpdf_parser.h" +#endif +#ifndef _FX_FONT_H_ +#include "../fxge/fx_font.h" +#endif +class CPDF_Font; +class CPDF_Type1Font; +class CPDF_TrueTypeFont; +class CPDF_CIDFont; +class CPDF_Type3Font; +class CPDF_FontEncoding; +class CPDF_CMap; +class CPDF_CID2UnicodeMap; +class CPDF_ColorSpace; +class CPDF_Color; +class CPDF_Function; +class CPDF_Pattern; +class CPDF_TilingPattern; +class CPDF_ShadingPattern; +class CPDF_Image; +class CPDF_Face; +class CPDF_ToUnicodeMap; +class CFX_SubstFont; +class CFX_Font; +class CPDF_RenderContext; +class CPDF_Form; +class CPDF_ImageObject; +class CFX_DIBitmap; +typedef struct FT_FaceRec_* FXFT_Face; +class CFX_CTTGSUBTable; +class CPDF_Page; +#define PDFFONT_TYPE1 1 +#define PDFFONT_TRUETYPE 2 +#define PDFFONT_TYPE3 3 +#define PDFFONT_CIDFONT 4 +#define PDFFONT_FIXEDPITCH 1 +#define PDFFONT_SERIF 2 +#define PDFFONT_SYMBOLIC 4 +#define PDFFONT_SCRIPT 8 +#define PDFFONT_NONSYMBOLIC 32 +#define PDFFONT_ITALIC 64 +#define PDFFONT_ALLCAP 0x10000 +#define PDFFONT_SMALLCAP 0x20000 +#define PDFFONT_FORCEBOLD 0x40000 +#define PDFFONT_USEEXTERNATTR 0x80000 +FX_WCHAR PDF_UnicodeFromAdobeName(const FX_CHAR* name); +CFX_ByteString PDF_AdobeNameFromUnicode(FX_WCHAR unicode); +class CPDF_Font : public CFX_Object +{ +public: + + static CPDF_Font* CreateFontF(CPDF_Document* pDoc, CPDF_Dictionary* pFontDict); + + static CPDF_Font* GetStockFont(CPDF_Document* pDoc, FX_BSTR fontname); + + virtual ~CPDF_Font(); + + + + + int GetFontType() const + { + return m_FontType; + } + + CFX_ByteString GetFontTypeName() const; + + const CFX_ByteString& GetBaseFont() const + { + return m_BaseFont; + } + + const CFX_SubstFont* GetSubstFont() const + { + return m_Font.GetSubstFont(); + } + + FX_DWORD GetFlags() const + { + return m_Flags; + } + + virtual FX_BOOL IsVertWriting()const; + + + + + CPDF_Type1Font* GetType1Font() const + { + return m_FontType == PDFFONT_TYPE1 ? (CPDF_Type1Font*)(void*)this : NULL; + } + + CPDF_TrueTypeFont* GetTrueTypeFont() const + { + return m_FontType == PDFFONT_TRUETYPE ? (CPDF_TrueTypeFont*)(void*)this : NULL; + } + + CPDF_CIDFont* GetCIDFont() const + { + return (m_FontType == PDFFONT_CIDFONT) ? (CPDF_CIDFont*)(void*)this : NULL; + } + + CPDF_Type3Font* GetType3Font() const + { + return (m_FontType == PDFFONT_TYPE3) ? (CPDF_Type3Font*)(void*)this : NULL; + } + + + FX_BOOL IsEmbedded() const + { + return m_FontType == PDFFONT_TYPE3 || m_pFontFile != NULL; + } + + virtual FX_BOOL IsUnicodeCompatible() const + { + return FALSE; + } + + CPDF_StreamAcc* GetFontFile() const + { + return m_pFontFile; + } + + CPDF_Dictionary* GetFontDict() const + { + return m_pFontDict; + } + + FX_BOOL IsStandardFont() const; + + FXFT_Face GetFace() const + { + return m_Font.GetFace(); + } + + + + virtual FX_DWORD GetNextChar(FX_LPCSTR pString, int& offset) const + { + return (FX_BYTE)pString[offset++]; + } + + virtual int CountChar(FX_LPCSTR pString, int size) const + { + return size; + } + + void AppendChar(CFX_ByteString& str, FX_DWORD charcode) const; + + virtual int AppendChar(FX_LPSTR buf, FX_DWORD charcode) const + { + *buf = (FX_CHAR)charcode; + return 1; + } + + virtual int GetCharSize(FX_DWORD charcode) const + { + return 1; + } + + + + + virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL) = 0; + virtual int GlyphFromCharCodeExt(FX_DWORD charcode) + { + return GlyphFromCharCode(charcode); + } + + CFX_WideString UnicodeFromCharCode(FX_DWORD charcode) const; + + FX_DWORD CharCodeFromUnicode(FX_WCHAR Unicode) const; + + CFX_CharMap* GetCharMap() + { + return m_pCharMap; + } + + CFX_ByteString EncodeString(const CFX_WideString& str) const; + + CFX_WideString DecodeString(const CFX_ByteString& str) const; + + + + + void GetFontBBox(FX_RECT& rect) const + { + rect = m_FontBBox; + } + + int GetTypeAscent() const + { + return m_Ascent; + } + + int GetTypeDescent() const + { + return m_Descent; + } + + int GetItalicAngle() const + { + return m_ItalicAngle; + } + + int GetStemV() const + { + return m_StemV; + } + + int GetStringWidth(const FX_CHAR* pString, int size); + + virtual int GetCharWidthF(FX_DWORD charcode, int level = 0) = 0; + + virtual int GetCharTypeWidth(FX_DWORD charcode); + + virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0) = 0; + + + + CPDF_Document* m_pDocument; + + class CFX_PathData* LoadGlyphPath(FX_DWORD charcode, int dest_width = 0); + + CFX_Font m_Font; +protected: + + CPDF_Font(); + + FX_BOOL Initialize(); + + FX_BOOL Load(); + + virtual FX_BOOL _Load() = 0; + + virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const = 0; + + virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const = 0; + + void LoadUnicodeMap(); + + void LoadPDFEncoding(CPDF_Object* pEncoding, int& iBaseEncoding, + CFX_ByteString*& pCharNames, FX_BOOL bEmbedded, FX_BOOL bTrueType); + + void LoadFontDescriptor(CPDF_Dictionary*); + + void LoadCharWidths(FX_WORD* pWidths); + + void CheckFontMetrics(); + + CFX_CharMap* m_pCharMap; + + + + int m_FontType; + + CFX_ByteString m_BaseFont; + + CPDF_StreamAcc* m_pFontFile; + + CPDF_Dictionary* m_pFontDict; + + CPDF_ToUnicodeMap* m_pToUnicodeMap; + + FX_BOOL m_bToUnicodeLoaded; + + + + + int m_Flags; + + FX_RECT m_FontBBox; + + int m_StemV; + + int m_Ascent; + + int m_Descent; + + int m_ItalicAngle; + +}; +#define PDFFONT_ENCODING_BUILTIN 0 +#define PDFFONT_ENCODING_WINANSI 1 +#define PDFFONT_ENCODING_MACROMAN 2 +#define PDFFONT_ENCODING_MACEXPERT 3 +#define PDFFONT_ENCODING_STANDARD 4 +#define PDFFONT_ENCODING_ADOBE_SYMBOL 5 +#define PDFFONT_ENCODING_ZAPFDINGBATS 6 +#define PDFFONT_ENCODING_PDFDOC 7 +#define PDFFONT_ENCODING_MS_SYMBOL 8 +#define PDFFONT_ENCODING_UNICODE 9 +class CPDF_FontEncoding : public CFX_Object +{ +public: + + CPDF_FontEncoding(); + + CPDF_FontEncoding(int PredefinedEncoding); + + void LoadEncoding(CPDF_Object* pEncoding); + + FX_BOOL IsIdentical(CPDF_FontEncoding* pAnother) const; + + FX_WCHAR UnicodeFromCharCode(FX_BYTE charcode) const + { + return m_Unicodes[charcode]; + } + + int CharCodeFromUnicode(FX_WCHAR unicode) const; + + void SetUnicode(FX_BYTE charcode, FX_WCHAR unicode) + { + m_Unicodes[charcode] = unicode; + } + + CPDF_Object* Realize(); +public: + + FX_WCHAR m_Unicodes[256]; +}; +class CPDF_SimpleFont : public CPDF_Font +{ +public: + + CPDF_SimpleFont(); + + virtual ~CPDF_SimpleFont(); + + CPDF_FontEncoding* GetEncoding() + { + return &m_Encoding; + } + virtual int GetCharWidthF(FX_DWORD charcode, int level = 0); + virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0); + virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL); + virtual FX_BOOL IsUnicodeCompatible() const; +protected: + + FX_BOOL LoadCommon(); + + void LoadSubstFont(); + + void LoadFaceMetrics(); + + virtual void LoadGlyphMap() = 0; + virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const + { + return m_Encoding.UnicodeFromCharCode((FX_BYTE)charcode); + } + virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const + { + return m_Encoding.CharCodeFromUnicode(Unicode); + } + + + + CPDF_FontEncoding m_Encoding; + + FX_WORD m_GlyphIndex[256]; + FX_WORD m_ExtGID[256]; + + + + + CFX_ByteString* m_pCharNames; + + int m_BaseEncoding; + + + + + FX_WORD m_CharWidth[256]; + + FX_SMALL_RECT m_CharBBox[256]; + + FX_BOOL m_bUseFontWidth; + + void LoadCharMetrics(int charcode); + +}; +class CPDF_Type1Font : public CPDF_SimpleFont +{ +public: + + CPDF_Type1Font(); + + int GetBase14Font() + { + return m_Base14Font; + } + virtual int GlyphFromCharCodeExt(FX_DWORD charcode); +protected: + virtual FX_BOOL _Load(); + + int m_Base14Font; + virtual void LoadGlyphMap(); +}; +class CPDF_TrueTypeFont : public CPDF_SimpleFont +{ +public: + + CPDF_TrueTypeFont(); +protected: + virtual FX_BOOL _Load(); + virtual void LoadGlyphMap(); +}; +class CPDF_Type3Char : public CFX_Object +{ +public: + + CPDF_Type3Char(); + + ~CPDF_Type3Char(); + + FX_BOOL LoadBitmap(CPDF_RenderContext* pContext); + + FX_BOOL m_bColored; + + FX_BOOL m_bPageRequired; + + + + CPDF_Form* m_pForm; + + CFX_AffineMatrix m_ImageMatrix; + + CFX_DIBitmap* m_pBitmap; + + + int m_Width; + + FX_RECT m_BBox; +}; +class CPDF_Type3Font : public CPDF_SimpleFont +{ +public: + CPDF_Type3Font(); + virtual ~CPDF_Type3Font(); + void SetPageResources(CPDF_Dictionary* pResources) + { + m_pPageResources = pResources; + } + CPDF_Type3Char* LoadChar(FX_DWORD charcode, int level = 0); + virtual int GetCharWidthF(FX_DWORD charcode, int level = 0); + virtual int GetCharTypeWidth(FX_DWORD charcode) + { + return GetCharWidthF(charcode); + } + virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0); + CFX_AffineMatrix& GetFontMatrix() + { + return m_FontMatrix; + } + void CheckType3FontMetrics(); +private: + virtual FX_BOOL _Load(); + virtual void LoadGlyphMap() {} + int m_CharWidthL[256]; + CPDF_Dictionary* m_pCharProcs; + CPDF_Dictionary* m_pPageResources; + CPDF_Dictionary* m_pFontResources; + CFX_MapPtrToPtr m_CacheMap; + CFX_MapPtrToPtr m_DeletedMap; +protected: + CFX_AffineMatrix m_FontMatrix; +}; +#define CIDSET_UNKNOWN 0 +#define CIDSET_GB1 1 +#define CIDSET_CNS1 2 +#define CIDSET_JAPAN1 3 +#define CIDSET_KOREA1 4 +#define CIDSET_UNICODE 5 +class CPDF_CIDFont : public CPDF_Font +{ +public: + + CPDF_CIDFont(); + + virtual ~CPDF_CIDFont(); + + FX_BOOL LoadGB2312(); + virtual int GlyphFromCharCode(FX_DWORD charcode, FX_BOOL *pVertGlyph = NULL); + virtual int GetCharWidthF(FX_DWORD charcode, int level = 0); + virtual void GetCharBBox(FX_DWORD charcode, FX_RECT& rect, int level = 0); + + FX_WORD CIDFromCharCode(FX_DWORD charcode) const; + + FX_BOOL IsTrueType() + { + return !m_bType1; + } + + + virtual FX_DWORD GetNextChar(const FX_CHAR* pString, int& offset) const; + virtual int CountChar(const FX_CHAR* pString, int size) const; + virtual int AppendChar(FX_LPSTR str, FX_DWORD charcode) const; + virtual int GetCharSize(FX_DWORD charcode) const; + + + int GetCharset() const + { + return m_Charset; + } + + FX_LPCBYTE GetCIDTransform(FX_WORD CID) const; + + + + virtual FX_BOOL IsVertWriting() const; + + short GetVertWidth(FX_WORD CID) const; + + void GetVertOrigin(FX_WORD CID, short& vx, short& vy) const; + + virtual FX_BOOL IsUnicodeCompatible() const; + virtual FX_BOOL IsFontStyleFromCharCode(FX_DWORD charcode) const; +protected: + friend class CPDF_Font; + virtual FX_BOOL _Load(); + virtual FX_WCHAR _UnicodeFromCharCode(FX_DWORD charcode) const; + virtual FX_DWORD _CharCodeFromUnicode(FX_WCHAR Unicode) const; + int GetGlyphIndex(FX_DWORD unicodeb, FX_BOOL *pVertGlyph); + + CPDF_CMap* m_pCMap; + + CPDF_CMap* m_pAllocatedCMap; + + CPDF_CID2UnicodeMap* m_pCID2UnicodeMap; + + int m_Charset; + + FX_BOOL m_bType1; + + CPDF_StreamAcc* m_pCIDToGIDMap; + FX_BOOL m_bCIDIsGID; + + + + FX_WORD m_DefaultWidth; + + FX_WORD* m_pAnsiWidths; + + FX_SMALL_RECT m_CharBBox[256]; + + CFX_DWordArray m_WidthList; + + short m_DefaultVY; + + short m_DefaultW1; + + CFX_DWordArray m_VertMetrics; + + + void LoadMetricsArray(CPDF_Array* pArray, CFX_DWordArray& result, int nElements); + + void LoadSubstFont(); + + FX_BOOL m_bAdobeCourierStd; + + CFX_CTTGSUBTable* m_pTTGSUBTable; +}; +#define PDFCS_DEVICEGRAY 1 + +#define PDFCS_DEVICERGB 2 +#define PDFCS_DEVICECMYK 3 +#define PDFCS_CALGRAY 4 +#define PDFCS_CALRGB 5 +#define PDFCS_LAB 6 +#define PDFCS_ICCBASED 7 +#define PDFCS_SEPARATION 8 +#define PDFCS_DEVICEN 9 +#define PDFCS_INDEXED 10 +#define PDFCS_PATTERN 11 +class CPDF_ColorSpace : public CFX_Object +{ +public: + + static CPDF_ColorSpace* GetStockCS(int Family); + + static CPDF_ColorSpace* Load(CPDF_Document* pDoc, CPDF_Object* pCSObj); + + void ReleaseCS(); + + int GetBufSize() const; + + FX_FLOAT* CreateBuf(); + + void GetDefaultColor(FX_FLOAT* buf) const; + + int CountComponents() const + { + return m_nComponents; + } + + int GetFamily() const + { + return m_Family; + } + + virtual void GetDefaultValue(int iComponent, FX_FLOAT& value, FX_FLOAT& min, FX_FLOAT& max) const + { + value = 0; + min = 0; + max = 1.0f; + } + + FX_BOOL sRGB() const; + + + + virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOAT& B) const = 0; + + virtual FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const + { + return FALSE; + } + + + + + FX_BOOL GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const; + + FX_BOOL SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const; + + + virtual void TranslateImageLine(FX_LPBYTE dest_buf, FX_LPCBYTE src_buf, int pixels, + int image_width, int image_height, FX_BOOL bTransMask = FALSE) const; + + CPDF_Array*& GetArray() + { + return m_pArray; + } + + int GetMaxIndex() const; + + virtual CPDF_ColorSpace* GetBaseCS() const + { + return NULL; + } + + virtual void EnableStdConversion(FX_BOOL bEnabled); + CPDF_Document* m_pDocument; +protected: + + CPDF_ColorSpace(); + + virtual ~CPDF_ColorSpace() {} + virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) + { + return TRUE; + } + virtual FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y, FX_FLOAT& k) const + { + return FALSE; + } + virtual FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX_FLOAT k) const + { + return FALSE; + } + + int m_Family; + + int m_nComponents; + + CPDF_Array* m_pArray; + + FX_DWORD m_dwStdConversion; +}; +class CPDF_Color : public CFX_Object +{ +public: + + CPDF_Color() + { + m_pBuffer = NULL; + m_pCS = NULL; + } + + CPDF_Color(int family); + + ~CPDF_Color(); + + FX_BOOL IsNull() const + { + return m_pBuffer == NULL; + } + + FX_BOOL IsEqual(const CPDF_Color& other) const; + + FX_BOOL IsPattern() const + { + return m_pCS && m_pCS->GetFamily() == PDFCS_PATTERN; + } + + void Copy(const CPDF_Color* pSrc); + + void SetColorSpace(CPDF_ColorSpace* pCS); + + void SetValue(FX_FLOAT* comp); + + void SetValue(CPDF_Pattern* pPattern, FX_FLOAT* comp, int ncomps); + + FX_BOOL GetRGB(int& R, int& G, int& B) const; + + CPDF_Pattern* GetPattern() const; + + CPDF_ColorSpace* GetPatternCS() const; + + FX_FLOAT* GetPatternColor() const; + + CPDF_ColorSpace* m_pCS; + + FX_FLOAT* m_pBuffer; +protected: + void ReleaseBuffer(); + void ReleaseColorSpace(); +}; +#define PATTERN_TILING 1 +#define PATTERN_SHADING 2 +class CPDF_Pattern : public CFX_Object +{ +public: + + virtual ~CPDF_Pattern() {} + + CPDF_Object* m_pPatternObj; + + int m_PatternType; + + CFX_AffineMatrix m_Pattern2Form; + CFX_AffineMatrix m_ParentMatrix; + + CPDF_Document* m_pDocument; + +protected: + + CPDF_Pattern(const CFX_AffineMatrix* pParentMatrix) + { + if (pParentMatrix) { + m_ParentMatrix = *pParentMatrix; + } + } +}; +class CPDF_TilingPattern : public CPDF_Pattern +{ +public: + + CPDF_TilingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, const CFX_AffineMatrix* parentMatrix); + + virtual ~CPDF_TilingPattern(); + + FX_BOOL Load(); + + + + FX_BOOL m_bColored; + + CFX_FloatRect m_BBox; + + FX_FLOAT m_XStep; + + FX_FLOAT m_YStep; + + + + CPDF_Form* m_pForm; +}; +class CPDF_ShadingPattern : public CPDF_Pattern +{ +public: + + CPDF_ShadingPattern(CPDF_Document* pDoc, CPDF_Object* pPatternObj, FX_BOOL bShading, const CFX_AffineMatrix* parentMatrix); + + virtual ~CPDF_ShadingPattern(); + + CPDF_Object* m_pShadingObj; + + FX_BOOL m_bShadingObj; + + FX_BOOL Load(); + + FX_BOOL Reload(); + + int m_ShadingType; + + CPDF_ColorSpace* m_pCS; + + + CPDF_Function* m_pFunctions[4]; + + int m_nFuncs; +protected: + void Clear(); +}; +struct CPDF_MeshVertex { + FX_FLOAT x, y; + FX_FLOAT r, g, b; +}; +class CPDF_MeshStream : public CFX_Object +{ +public: + + FX_BOOL Load(CPDF_Stream* pShadingStream, CPDF_Function** pFuncs, int nFuncs, CPDF_ColorSpace* pCS); + + FX_DWORD GetFlag(); + + void GetCoords(FX_FLOAT& x, FX_FLOAT& y); + + void GetColor(FX_FLOAT& r, FX_FLOAT& g, FX_FLOAT& b); + + FX_DWORD GetVertex(CPDF_MeshVertex& vertex, CFX_AffineMatrix* pObject2Bitmap); + + FX_BOOL GetVertexRow(CPDF_MeshVertex* vertex, int count, CFX_AffineMatrix* pObject2Bitmap); + CPDF_Function** m_pFuncs; + CPDF_ColorSpace* m_pCS; + FX_DWORD m_nFuncs, m_nCoordBits, m_nCompBits, m_nFlagBits, m_nComps; + FX_DWORD m_CoordMax, m_CompMax; + FX_FLOAT m_xmin, m_xmax, m_ymin, m_ymax; + FX_FLOAT m_ColorMin[8], m_ColorMax[8]; + CPDF_StreamAcc m_Stream; + CFX_BitStream m_BitStream; +}; +#define PDF_IMAGE_NO_COMPRESS 0x0000 +#define PDF_IMAGE_LOSSY_COMPRESS 0x0001 +#define PDF_IMAGE_LOSSLESS_COMPRESS 0x0002 +#define PDF_IMAGE_MASK_LOSSY_COMPRESS 0x0004 +#define PDF_IMAGE_MASK_LOSSLESS_COMPRESS 0x0008 +class CPDF_ImageSetParam +{ +public: + CPDF_ImageSetParam() + : pMatteColor(NULL) + , nQuality(80) + { + } + FX_ARGB* pMatteColor; + FX_INT32 nQuality; +}; +class CPDF_Image : public CFX_Object +{ +public: + + CPDF_Image(CPDF_Document* pDoc); + + ~CPDF_Image(); + + FX_BOOL LoadImageF(CPDF_Stream* pImageStream, FX_BOOL bInline); + + void Release(); + + CPDF_Image* Clone(); + + FX_BOOL IsInline() + { + return m_bInline; + } + + void SetInlineDict(CPDF_Dictionary* pDict) + { + m_pInlineDict = pDict; + } + + CPDF_Dictionary* GetInlineDict() const + { + return m_pInlineDict; + } + + CPDF_Stream* GetStream() const + { + return m_pStream; + } + + CPDF_Dictionary* GetDict() const + { + return m_pStream->GetDict(); + } + + CPDF_Dictionary* GetOC() const + { + return m_pOC; + } + + CPDF_Document* GetDocument() const + { + return m_pDocument; + } + + + + FX_INT32 GetPixelHeight() const + { + return m_Height; + } + + FX_INT32 GetPixelWidth() const + { + return m_Width; + } + + + FX_BOOL IsMask() const + { + return m_bIsMask; + } + + FX_BOOL IsInterpol() const + { + return m_bInterpolate; + } + + CFX_DIBSource* LoadDIBSource(CFX_DIBSource** ppMask = NULL, FX_DWORD* pMatteColor = NULL, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE) const; + + + + void SetImage(const CFX_DIBitmap* pDIBitmap, FX_INT32 iCompress, IFX_FileWrite *pFileWrite = NULL, IFX_FileRead *pFileRead = NULL, const CFX_DIBitmap* pMask = NULL, const CPDF_ImageSetParam* pParam = NULL); + + void SetJpegImage(FX_BYTE* pImageData, FX_DWORD size); + + void SetJpegImage(IFX_FileRead *pFile); + + void ResetCache(CPDF_Page* pPage, const CFX_DIBitmap* pDIBitmap); + +public: + FX_BOOL StartLoadDIBSource(CPDF_Dictionary* pFormResource, CPDF_Dictionary* pPageResource, FX_BOOL bStdCS = FALSE, FX_DWORD GroupFamily = 0, FX_BOOL bLoadMask = FALSE); + FX_BOOL Continue(IFX_Pause* pPause); + CFX_DIBSource* DetachBitmap(); + CFX_DIBSource* DetachMask(); + CFX_DIBSource* m_pDIBSource; + CFX_DIBSource* m_pMask; + FX_DWORD m_MatteColor; +private: + + CPDF_Stream* m_pStream; + FX_BOOL m_bInline; + CPDF_Dictionary* m_pInlineDict; + + FX_INT32 m_Height; + + FX_INT32 m_Width; + + FX_BOOL m_bIsMask; + + FX_BOOL m_bInterpolate; + + CPDF_Document* m_pDocument; + + CPDF_Dictionary* m_pOC; + CPDF_Dictionary* InitJPEG(FX_LPBYTE pData, FX_DWORD size); +}; +#endif -- cgit v1.2.3