| // 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_DOC_H_ | |
| #define _FPDF_DOC_H_ | |
| #ifndef _FPDF_PARSER_ | |
| #include "../fpdfapi/fpdf_parser.h" | |
| #endif | |
| #ifndef _FPDF_RENDER_ | |
| #include "../fpdfapi/fpdf_render.h" | |
| #endif | |
| class CPDF_Action; | |
| class CPDF_Annot; | |
| class CPDF_AnnotList; | |
| class CPDF_Bookmark; | |
| class CPDF_BookmarkTree; | |
| class CPDF_Dest; | |
| class CPDF_Link; | |
| class CPDF_LinkList; | |
| class CPDF_Metadata; | |
| class CPDF_NameTree; | |
| class CPDF_NumberTree; | |
| class CPDF_TextObject; | |
| class CPDF_ViewerPreferences; | |
| class CPDF_Page; | |
| class CPDF_RenderOptions; | |
| class CXML_Element; | |
| class CPDF_OCContext; | |
| class CPDF_DocJSActions; | |
| class CPDF_ActionFields; | |
| class CPDF_AAction; | |
| class CPDF_FileSpec; | |
| class CPDF_IconFit; | |
| class CPDF_DefaultAppearance; | |
| class CPDF_InterForm; | |
| class CPDF_FormField; | |
| class CPDF_FormNotify; | |
| class CPDF_FormControl; | |
| class CPDF_LWinParam; | |
| class CFieldTree; | |
| class CPDF_ApSettings; | |
| class CPDF_NameTree : public CFX_Object | |
| { | |
| public: | |
| CPDF_NameTree(CPDF_Dictionary* pRoot) | |
| { | |
| m_pRoot = pRoot; | |
| } | |
| CPDF_NameTree(CPDF_Document* pDoc, FX_BSTR category); | |
| CPDF_Object* LookupValue(int nIndex, CFX_ByteString& csName) const; | |
| CPDF_Object* LookupValue(const CFX_ByteString& csName) const; | |
| CPDF_Array* LookupNamedDest(CPDF_Document* pDoc, FX_BSTR sName); | |
| int GetIndex(const CFX_ByteString& csName) const; | |
| int GetCount() const; | |
| CPDF_Dictionary* GetRoot() const | |
| { | |
| return m_pRoot; | |
| } | |
| protected: | |
| CPDF_Dictionary* m_pRoot; | |
| }; | |
| class CPDF_BookmarkTree : public CFX_Object | |
| { | |
| public: | |
| CPDF_BookmarkTree(CPDF_Document* pDoc) | |
| { | |
| m_pDocument = pDoc; | |
| } | |
| public: | |
| CPDF_Bookmark GetFirstChild(CPDF_Bookmark parent); | |
| CPDF_Bookmark GetNextSibling(CPDF_Bookmark bookmark); | |
| CPDF_Document* GetDocument() const | |
| { | |
| return m_pDocument; | |
| } | |
| protected: | |
| CPDF_Document* m_pDocument; | |
| }; | |
| #define PDFBOOKMARK_ITALIC 1 | |
| #define PDFBOOKMARK_BOLD 2 | |
| class CPDF_Bookmark : public CFX_Object | |
| { | |
| public: | |
| CPDF_Bookmark(CPDF_Dictionary* pDict = NULL) | |
| { | |
| m_pDict = pDict; | |
| } | |
| operator CPDF_Dictionary*() const | |
| { | |
| return m_pDict; | |
| } | |
| FX_DWORD GetColorRef(); | |
| FX_DWORD GetFontStyle(); | |
| CFX_WideString GetTitle(); | |
| CPDF_Dest GetDest(CPDF_Document* pDocument); | |
| CPDF_Action GetAction(); | |
| CPDF_Dictionary* m_pDict; | |
| }; | |
| #define PDFZOOM_XYZ 1 | |
| #define PDFZOOM_FITPAGE 2 | |
| #define PDFZOOM_FITHORZ 3 | |
| #define PDFZOOM_FITVERT 4 | |
| #define PDFZOOM_FITRECT 5 | |
| #define PDFZOOM_FITBBOX 6 | |
| #define PDFZOOM_FITBHORZ 7 | |
| #define PDFZOOM_FITBVERT 8 | |
| class CPDF_Dest : public CFX_Object | |
| { | |
| public: | |
| CPDF_Dest(CPDF_Object* pObj = NULL) | |
| { | |
| m_pObj = pObj; | |
| } | |
| operator CPDF_Object* () const | |
| { | |
| return m_pObj; | |
| } | |
| CFX_ByteString GetRemoteName(); | |
| int GetPageIndex(CPDF_Document* pDoc); | |
| FX_DWORD GetPageObjNum(); | |
| int GetZoomMode(); | |
| FX_FLOAT GetParam(int index); | |
| CPDF_Object* m_pObj; | |
| }; | |
| class CPDF_OCContext : public CFX_Object, public IPDF_OCContext | |
| { | |
| public: | |
| enum UsageType { | |
| View = 0, | |
| Design, | |
| Print, | |
| Export | |
| }; | |
| CPDF_OCContext(CPDF_Document *pDoc, UsageType eUsageType = View); | |
| virtual ~CPDF_OCContext(); | |
| CPDF_Document* GetDocument() const | |
| { | |
| return m_pDocument; | |
| } | |
| UsageType GetUsageType() const | |
| { | |
| return m_eUsageType; | |
| } | |
| FX_BOOL CheckOCGVisible(const CPDF_Dictionary *pOCGDict); | |
| void ResetOCContext(); | |
| protected: | |
| FX_BOOL LoadOCGStateFromConfig(FX_BSTR csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const; | |
| FX_BOOL LoadOCGState(const CPDF_Dictionary *pOCGDict) const; | |
| FX_BOOL GetOCGVisible(const CPDF_Dictionary *pOCGDict); | |
| FX_BOOL GetOCGVE(CPDF_Array *pExpression, FX_BOOL bFromConfig, int nLevel = 0); | |
| FX_BOOL LoadOCMDState(const CPDF_Dictionary *pOCMDDict, FX_BOOL bFromConfig); | |
| CPDF_Document *m_pDocument; | |
| UsageType m_eUsageType; | |
| CFX_MapPtrTemplate<const CPDF_Dictionary*, void*> m_OCGStates; | |
| }; | |
| class CPDF_LWinParam : public CFX_Object | |
| { | |
| public: | |
| CPDF_LWinParam(CPDF_Dictionary* pDict) | |
| { | |
| m_pDict = pDict; | |
| } | |
| operator CPDF_Dictionary* () const | |
| { | |
| return m_pDict; | |
| } | |
| inline CFX_ByteString GetFileName() | |
| { | |
| return m_pDict->GetString("F"); | |
| } | |
| inline CFX_ByteString GetDefaultDirectory() | |
| { | |
| return m_pDict->GetString("D"); | |
| } | |
| inline CFX_ByteString GetOperation() | |
| { | |
| return m_pDict->GetString("O"); | |
| } | |
| inline CFX_ByteString GetParameter() | |
| { | |
| return m_pDict->GetString("P"); | |
| } | |
| CPDF_Dictionary* m_pDict; | |
| }; | |
| class CPDF_ActionFields : public CFX_Object | |
| { | |
| public: | |
| CPDF_ActionFields(const CPDF_Action* pAction) | |
| { | |
| m_pAction = (CPDF_Action*)pAction; | |
| } | |
| operator CPDF_Action*() const | |
| { | |
| return m_pAction; | |
| } | |
| FX_DWORD GetFieldsCount() const; | |
| void GetAllFields(CFX_PtrArray& fieldObjects) const; | |
| CPDF_Object* GetField(FX_DWORD iIndex) const; | |
| CPDF_Action* m_pAction; | |
| }; | |
| #define PDFNAMED_NEXTPAGE 1 | |
| #define PDFNAMED_PREVPAGE 2 | |
| #define PDFNAMED_FIRSTPAGE 3 | |
| #define PDFNAMED_LASTPAGE 4 | |
| #define PDFJS_MAXLENGTH 64 | |
| class CPDF_Action : public CFX_Object | |
| { | |
| public: | |
| CPDF_Action(CPDF_Dictionary* pDict = NULL) | |
| { | |
| m_pDict = pDict; | |
| } | |
| operator CPDF_Dictionary* () const | |
| { | |
| return m_pDict; | |
| } | |
| enum ActionType { | |
| Unknown = 0, | |
| GoTo, | |
| GoToR, | |
| GoToE, | |
| Launch, | |
| Thread, | |
| URI, | |
| Sound, | |
| Movie, | |
| Hide, | |
| Named, | |
| SubmitForm, | |
| ResetForm, | |
| ImportData, | |
| JavaScript, | |
| SetOCGState, | |
| Rendition, | |
| Trans, | |
| GoTo3DView | |
| }; | |
| CFX_ByteString GetTypeName() const | |
| { | |
| return m_pDict->GetString("S"); | |
| } | |
| ActionType GetType() const; | |
| CPDF_Dest GetDest(CPDF_Document* pDoc) const; | |
| CFX_WideString GetFilePath() const; | |
| FX_BOOL GetNewWindow() const | |
| { | |
| return m_pDict->GetBoolean("NewWindow"); | |
| } | |
| CPDF_LWinParam GetWinParam() const; | |
| CFX_ByteString GetURI(CPDF_Document* pDoc) const; | |
| FX_BOOL GetMouseMap() const | |
| { | |
| return m_pDict->GetBoolean("IsMap"); | |
| } | |
| CPDF_ActionFields GetWidgets() const | |
| { | |
| return this; | |
| } | |
| FX_BOOL GetHideStatus() const | |
| { | |
| return m_pDict->GetBoolean("H", TRUE); | |
| } | |
| CFX_ByteString GetNamedAction() const | |
| { | |
| return m_pDict->GetString("N"); | |
| } | |
| FX_DWORD GetFlags() const | |
| { | |
| return m_pDict->GetInteger("Flags"); | |
| } | |
| CFX_WideString GetJavaScript() const; | |
| CPDF_Dictionary* GetAnnot() const; | |
| FX_INT32 GetOperationType() const; | |
| CPDF_Stream* GetSoundStream() const | |
| { | |
| return m_pDict->GetStream("Sound"); | |
| } | |
| FX_FLOAT GetVolume() const | |
| { | |
| return m_pDict->GetNumber("Volume"); | |
| } | |
| FX_BOOL IsSynchronous() const | |
| { | |
| return m_pDict->GetBoolean("Synchronous"); | |
| } | |
| FX_BOOL IsRepeat() const | |
| { | |
| return m_pDict->GetBoolean("Repeat"); | |
| } | |
| FX_BOOL IsMixPlay() const | |
| { | |
| return m_pDict->GetBoolean("Mix"); | |
| } | |
| FX_DWORD GetSubActionsCount() const; | |
| CPDF_Action GetSubAction(FX_DWORD iIndex) const; | |
| CPDF_Dictionary* m_pDict; | |
| }; | |
| class CPDF_AAction : public CFX_Object | |
| { | |
| public: | |
| CPDF_AAction(CPDF_Dictionary* pDict = NULL) | |
| { | |
| m_pDict = pDict; | |
| } | |
| operator CPDF_Dictionary*() const | |
| { | |
| return m_pDict; | |
| } | |
| enum AActionType { | |
| CursorEnter = 0, | |
| CursorExit, | |
| ButtonDown, | |
| ButtonUp, | |
| GetFocus, | |
| LoseFocus, | |
| PageOpen, | |
| PageClose, | |
| PageVisible, | |
| PageInvisible, | |
| OpenPage, | |
| ClosePage, | |
| KeyStroke, | |
| Format, | |
| Validate, | |
| Calculate, | |
| CloseDocument, | |
| SaveDocument, | |
| DocumentSaved, | |
| PrintDocument, | |
| DocumentPrinted | |
| }; | |
| FX_BOOL ActionExist(AActionType eType) const; | |
| CPDF_Action GetAction(AActionType eType) const; | |
| FX_POSITION GetStartPos() const; | |
| CPDF_Action GetNextAction(FX_POSITION& pos, AActionType& eType) const; | |
| CPDF_Dictionary* m_pDict; | |
| }; | |
| class CPDF_DocJSActions : public CFX_Object | |
| { | |
| public: | |
| CPDF_DocJSActions(CPDF_Document* pDoc); | |
| int CountJSActions() const; | |
| CPDF_Action GetJSAction(int index, CFX_ByteString& csName) const; | |
| CPDF_Action GetJSAction(const CFX_ByteString& csName) const; | |
| int FindJSAction(const CFX_ByteString& csName) const; | |
| CPDF_Document* GetDocument() const | |
| { | |
| return m_pDocument; | |
| } | |
| protected: | |
| CPDF_Document* m_pDocument; | |
| }; | |
| class CPDF_FileSpec : public CFX_Object | |
| { | |
| public: | |
| CPDF_FileSpec(); | |
| CPDF_FileSpec(CPDF_Object *pObj) | |
| { | |
| m_pObj = pObj; | |
| } | |
| operator CPDF_Object*() const | |
| { | |
| return m_pObj; | |
| } | |
| FX_BOOL IsURL() const; | |
| FX_BOOL GetFileName(CFX_WideString &wsFileName) const; | |
| CPDF_Stream* GetFileStream() const; | |
| void SetFileName(FX_WSTR wsFileName, FX_BOOL bURL = FALSE); | |
| protected: | |
| CPDF_Object *m_pObj; | |
| }; | |
| class CPDF_LinkList : public CFX_Object | |
| { | |
| public: | |
| CPDF_LinkList(CPDF_Document* pDoc) | |
| { | |
| m_pDocument = pDoc; | |
| } | |
| ~CPDF_LinkList(); | |
| CPDF_Link GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y); | |
| int CountLinks(CPDF_Page* pPage); | |
| CPDF_Link GetLink(CPDF_Page* pPage, int index); | |
| CPDF_Document* GetDocument() const | |
| { | |
| return m_pDocument; | |
| } | |
| protected: | |
| CPDF_Document* m_pDocument; | |
| CFX_MapPtrToPtr m_PageMap; | |
| CFX_PtrArray* GetPageLinks(CPDF_Page* pPage); | |
| void LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList); | |
| }; | |
| class CPDF_Link : public CFX_Object | |
| { | |
| public: | |
| CPDF_Link(CPDF_Dictionary* pDict = NULL) | |
| { | |
| m_pDict = pDict; | |
| } | |
| operator CPDF_Dictionary*() const | |
| { | |
| return m_pDict; | |
| } | |
| CFX_FloatRect GetRect(); | |
| CPDF_Dest GetDest(CPDF_Document* pDoc); | |
| CPDF_Action GetAction(); | |
| CPDF_Dictionary* m_pDict; | |
| }; | |
| #define ANNOTFLAG_INVISIBLE 1 | |
| #define ANNOTFLAG_HIDDEN 2 | |
| #define ANNOTFLAG_PRINT 4 | |
| #define ANNOTFLAG_NOZOOM 8 | |
| #define ANNOTFLAG_NOROTATE 0x10 | |
| #define ANNOTFLAG_NOVIEW 0x20 | |
| #define ANNOTFLAG_READONLY 0x40 | |
| #define ANNOTFLAG_LOCKED 0x80 | |
| #define ANNOTFLAG_TOGGLENOVIEW 0x100 | |
| class CPDF_Annot : public CFX_PrivateData, public CFX_Object | |
| { | |
| public: | |
| CPDF_Annot(CPDF_Dictionary* pDict); | |
| ~CPDF_Annot(); | |
| CPDF_Dictionary* m_pAnnotDict; | |
| CFX_ByteString GetSubType() const; | |
| FX_DWORD GetFlags() const | |
| { | |
| return m_pAnnotDict->GetInteger("F"); | |
| } | |
| void GetRect(CFX_FloatRect& rect) const; | |
| enum AppearanceMode { | |
| Normal, | |
| Rollover, | |
| Down | |
| }; | |
| FX_BOOL DrawAppearance(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device, | |
| AppearanceMode mode, const CPDF_RenderOptions* pOptions); | |
| FX_BOOL DrawInContext(const CPDF_Page* pPage, const CPDF_RenderContext* pContext, | |
| const CFX_AffineMatrix* pUser2Device, AppearanceMode mode); | |
| void ClearCachedAP(); | |
| void DrawBorder(CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device, | |
| const CPDF_RenderOptions* pOptions); | |
| CPDF_PageObject* GetBorder(FX_BOOL bPrint, const CPDF_RenderOptions* pOptions); | |
| int CountIRTNotes(); | |
| CPDF_Annot* GetIRTNote(int index); | |
| CPDF_Form* GetAPForm(const CPDF_Page* pPage, AppearanceMode mode); | |
| private: | |
| CFX_MapPtrToPtr m_APMap; | |
| protected: | |
| friend class CPDF_AnnotList; | |
| CPDF_AnnotList* m_pList; | |
| CPDF_Reference* NewAnnotRef(); | |
| }; | |
| class CPDF_AnnotList : public CFX_Object | |
| { | |
| public: | |
| CPDF_AnnotList(CPDF_Page* pPage); | |
| ~CPDF_AnnotList(); | |
| void GetAnnotMatrix(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CFX_Matrix &matrix) const; | |
| void GetAnnotRect(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CPDF_Rect &rtAnnot) const; | |
| void DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, | |
| CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget, | |
| CPDF_RenderOptions* pOptions); | |
| void DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext, | |
| FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget, | |
| CPDF_RenderOptions* pOptions) | |
| { | |
| DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, NULL); | |
| } | |
| void DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext, | |
| FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget, | |
| CPDF_RenderOptions* pOptions, FX_RECT *pClipRect) | |
| { | |
| DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, pClipRect); | |
| } | |
| void DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, CPDF_RenderContext* pContext, | |
| FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_DWORD dwAnnotFlags, | |
| CPDF_RenderOptions* pOptions, FX_RECT* pClipRect); | |
| CPDF_Annot* GetAt(int index) | |
| { | |
| return (CPDF_Annot*)m_AnnotList.GetAt(index); | |
| } | |
| int Count() | |
| { | |
| return m_AnnotList.GetSize(); | |
| } | |
| int GetIndex(CPDF_Annot* pAnnot); | |
| CPDF_Document* GetDocument() const | |
| { | |
| return m_pDocument; | |
| } | |
| protected: | |
| CFX_PtrArray m_AnnotList; | |
| CPDF_Dictionary* m_pPageDict; | |
| CPDF_Document* m_pDocument; | |
| CFX_PtrArray m_Borders; | |
| void DisplayPass(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, | |
| CPDF_RenderContext* pContext, FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, | |
| FX_BOOL bWidget, CPDF_RenderOptions* pOptions, FX_RECT* clip_rect); | |
| friend class CPDF_Annot; | |
| }; | |
| #define COLORTYPE_TRANSPARENT 0 | |
| #define COLORTYPE_GRAY 1 | |
| #define COLORTYPE_RGB 2 | |
| #define COLORTYPE_CMYK 3 | |
| class CPDF_DefaultAppearance : public CFX_Object | |
| { | |
| public: | |
| CPDF_DefaultAppearance(const CFX_ByteString& csDA = "") | |
| { | |
| m_csDA = csDA; | |
| } | |
| CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA) | |
| { | |
| m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA; | |
| } | |
| operator CFX_ByteString() const | |
| { | |
| return m_csDA; | |
| } | |
| const CPDF_DefaultAppearance& operator =(const CFX_ByteString& csDA) | |
| { | |
| m_csDA = csDA; | |
| return *this; | |
| } | |
| const CPDF_DefaultAppearance& operator =(const CPDF_DefaultAppearance& cDA) | |
| { | |
| m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA; | |
| return *this; | |
| } | |
| FX_BOOL HasFont(); | |
| CFX_ByteString GetFontString(); | |
| void GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize); | |
| FX_BOOL HasColor(FX_BOOL bStrokingOperation = FALSE); | |
| CFX_ByteString GetColorString(FX_BOOL bStrokingOperation = FALSE); | |
| void GetColor(int& iColorType, FX_FLOAT fc[4], FX_BOOL bStrokingOperation = FALSE); | |
| void GetColor(FX_ARGB& color, int& iColorType, FX_BOOL bStrokingOperation = FALSE); | |
| FX_BOOL HasTextMatrix(); | |
| CFX_ByteString GetTextMatrixString(); | |
| CFX_AffineMatrix GetTextMatrix(); | |
| protected: | |
| CFX_ByteString m_csDA; | |
| }; | |
| #define FIELDTYPE_UNKNOWN 0 | |
| #define FIELDTYPE_PUSHBUTTON 1 | |
| #define FIELDTYPE_CHECKBOX 2 | |
| #define FIELDTYPE_RADIOBUTTON 3 | |
| #define FIELDTYPE_COMBOBOX 4 | |
| #define FIELDTYPE_LISTBOX 5 | |
| #define FIELDTYPE_TEXTFIELD 6 | |
| #define FIELDTYPE_SIGNATURE 7 | |
| class CPDF_InterForm : public CFX_PrivateData, public CFX_Object | |
| { | |
| public: | |
| CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bUpdateAP); | |
| ~CPDF_InterForm(); | |
| static void EnableUpdateAP(FX_BOOL bUpdateAP); | |
| static FX_BOOL UpdatingAPEnabled(); | |
| static CFX_ByteString GenerateNewResourceName(const CPDF_Dictionary* pResDict, FX_LPCSTR csType, int iMinLen = 2, FX_LPCSTR csPrefix = ""); | |
| static CPDF_Font* AddSystemDefaultFont(const CPDF_Document* pDocument); | |
| static CPDF_Font* AddSystemFont(const CPDF_Document* pDocument, CFX_ByteString csFontName, FX_BYTE iCharSet = 1); | |
| static CPDF_Font* AddSystemFont(const CPDF_Document* pDocument, CFX_WideString csFontName, FX_BYTE iCharSet = 1); | |
| static CPDF_Font* AddStandardFont(const CPDF_Document* pDocument, CFX_ByteString csFontName); | |
| static CFX_ByteString GetNativeFont(FX_BYTE iCharSet, FX_LPVOID pLogFont = NULL); | |
| static CFX_ByteString GetNativeFont(FX_LPVOID pLogFont = NULL); | |
| static FX_BYTE GetNativeCharSet(); | |
| static CPDF_Font* AddNativeFont(FX_BYTE iCharSet, const CPDF_Document* pDocument); | |
| static CPDF_Font* AddNativeFont(const CPDF_Document* pDocument); | |
| FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType); | |
| FX_BOOL ValidateFieldName(const CPDF_FormField* pField, CFX_WideString& csNewFieldName); | |
| FX_BOOL ValidateFieldName(const CPDF_FormControl* pControl, CFX_WideString& csNewFieldName); | |
| FX_DWORD CountFields(const CFX_WideString &csFieldName = L""); | |
| CPDF_FormField* GetField(FX_DWORD index, const CFX_WideString &csFieldName = L""); | |
| void GetAllFieldNames(CFX_WideStringArray& allFieldNames); | |
| FX_BOOL IsValidFormField(const void* pField); | |
| CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const; | |
| FX_DWORD CountControls(CFX_WideString csFieldName = L""); | |
| CPDF_FormControl* GetControl(FX_DWORD index, CFX_WideString csFieldName = L""); | |
| FX_BOOL IsValidFormControl(const void* pControl); | |
| int CountPageControls(CPDF_Page* pPage) const; | |
| CPDF_FormControl* GetPageControl(CPDF_Page* pPage, int index) const; | |
| CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y) const; | |
| CPDF_FormControl* GetControlByDict(CPDF_Dictionary* pWidgetDict) const; | |
| FX_DWORD CountInternalFields(const CFX_WideString& csFieldName = L"") const; | |
| CPDF_Dictionary* GetInternalField(FX_DWORD index, const CFX_WideString& csFieldName = L"") const; | |
| CPDF_Document* GetDocument() const | |
| { | |
| return m_pDocument; | |
| } | |
| CPDF_Dictionary* GetFormDict() const | |
| { | |
| return m_pFormDict; | |
| } | |
| FX_BOOL NeedConstructAP(); | |
| void NeedConstructAP(FX_BOOL bNeedAP); | |
| int CountFieldsInCalculationOrder(); | |
| CPDF_FormField* GetFieldInCalculationOrder(int index); | |
| int FindFieldInCalculationOrder(const CPDF_FormField* pField); | |
| FX_DWORD CountFormFonts(); | |
| CPDF_Font* GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag); | |
| CPDF_Font* GetFormFont(CFX_ByteString csNameTag); | |
| CPDF_Font* GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag); | |
| CPDF_Font* GetNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag); | |
| CPDF_Font* GetNativeFormFont(CFX_ByteString& csNameTag); | |
| FX_BOOL FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag); | |
| FX_BOOL FindFormFont(CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag); | |
| inline FX_BOOL FindFormFont(CFX_WideString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag) | |
| { | |
| return FindFormFont(PDF_EncodeText(csFontName), pFont, csNameTag); | |
| } | |
| void AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag); | |
| CPDF_Font* AddNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag); | |
| CPDF_Font* AddNativeFormFont(CFX_ByteString& csNameTag); | |
| void RemoveFormFont(const CPDF_Font* pFont); | |
| void RemoveFormFont(CFX_ByteString csNameTag); | |
| CPDF_DefaultAppearance GetDefaultAppearance(); | |
| CPDF_Font* GetDefaultFormFont(); | |
| int GetFormAlignment(); | |
| CPDF_FormField* CheckRequiredFields(const CFX_PtrArray *fields = NULL, FX_BOOL bIncludeOrExclude = TRUE) const; | |
| CFDF_Document* ExportToFDF(FX_WSTR pdf_path, FX_BOOL bSimpleFileSpec = FALSE) const; | |
| CFDF_Document* ExportToFDF(FX_WSTR pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bSimpleFileSpec = FALSE) const; | |
| FX_BOOL ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE); | |
| FX_BOOL ResetForm(const CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bNotify = FALSE); | |
| FX_BOOL ResetForm(FX_BOOL bNotify = FALSE); | |
| void ReloadForm(); | |
| CPDF_FormNotify* GetFormNotify() const | |
| { | |
| return m_pFormNotify; | |
| } | |
| void SetFormNotify(const CPDF_FormNotify* pNotify); | |
| int GetPageWithWidget(int iCurPage, FX_BOOL bNext); | |
| FX_BOOL IsUpdated() | |
| { | |
| return m_bUpdated; | |
| } | |
| void ClearUpdatedFlag() | |
| { | |
| m_bUpdated = FALSE; | |
| } | |
| FX_BOOL HasXFAForm() const; | |
| void FixPageFields(const CPDF_Page* pPage); | |
| protected: | |
| static FX_BOOL m_bUpdateAP; | |
| void LoadField(CPDF_Dictionary* pFieldDict, int nLevel = 0); | |
| CPDF_Object* GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name); | |
| CPDF_FormField* AddTerminalField(const CPDF_Dictionary* pFieldDict); | |
| CPDF_FormControl* AddControl(const CPDF_FormField* pField, const CPDF_Dictionary* pWidgetDict); | |
| void FDF_ImportField(CPDF_Dictionary* pField, const CFX_WideString& parent_name, FX_BOOL bNotify = FALSE, int nLevel = 0); | |
| FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType, const CPDF_FormField* pExcludedField, const CPDF_FormControl* pExcludedControl); | |
| int CompareFieldName(const CFX_WideString& name1, const CFX_WideString& name2); | |
| int CompareFieldName(const CFX_ByteString& name1, const CFX_ByteString& name2); | |
| CPDF_Document* m_pDocument; | |
| FX_BOOL m_bGenerateAP; | |
| CPDF_Dictionary* m_pFormDict; | |
| CFX_MapPtrToPtr m_ControlMap; | |
| CFieldTree *m_pFieldTree; | |
| CFX_ByteString m_bsEncoding; | |
| CPDF_FormNotify* m_pFormNotify; | |
| FX_BOOL m_bUpdated; | |
| friend class CPDF_FormControl; | |
| friend class CPDF_FormField; | |
| }; | |
| #define FORMFIELD_READONLY 0x01 | |
| #define FORMFIELD_REQUIRED 0x02 | |
| #define FORMFIELD_NOEXPORT 0x04 | |
| #define FORMRADIO_NOTOGGLEOFF 0x100 | |
| #define FORMRADIO_UNISON 0x200 | |
| #define FORMTEXT_MULTILINE 0x100 | |
| #define FORMTEXT_PASSWORD 0x200 | |
| #define FORMTEXT_NOSCROLL 0x400 | |
| #define FORMTEXT_COMB 0x800 | |
| #define FORMCOMBO_EDIT 0x100 | |
| #define FORMLIST_MULTISELECT 0x100 | |
| class CPDF_FormField : public CFX_Object | |
| { | |
| public: | |
| enum Type { | |
| Unknown, | |
| PushButton, | |
| RadioButton, | |
| CheckBox, | |
| Text, | |
| RichText, | |
| File, | |
| ListBox, | |
| ComboBox, | |
| Sign | |
| }; | |
| CFX_WideString GetFullName(); | |
| Type GetType() | |
| { | |
| return m_Type; | |
| } | |
| FX_DWORD GetFlags() | |
| { | |
| return m_Flags; | |
| } | |
| CPDF_InterForm* GetInterForm() const | |
| { | |
| return m_pForm; | |
| } | |
| CPDF_Dictionary* GetFieldDict() const | |
| { | |
| return m_pDict; | |
| } | |
| void SetFieldDict(CPDF_Dictionary* pDict) | |
| { | |
| m_pDict = pDict; | |
| } | |
| FX_BOOL ResetField(FX_BOOL bNotify = FALSE); | |
| int CountControls() | |
| { | |
| return m_ControlList.GetSize(); | |
| } | |
| CPDF_FormControl* GetControl(int index) | |
| { | |
| return (CPDF_FormControl*)m_ControlList.GetAt(index); | |
| } | |
| int GetControlIndex(const CPDF_FormControl* pControl); | |
| int GetFieldType(); | |
| CPDF_AAction GetAdditionalAction(); | |
| CFX_WideString GetAlternateName(); | |
| CFX_WideString GetMappingName(); | |
| FX_DWORD GetFieldFlags(); | |
| CFX_ByteString GetDefaultStyle(); | |
| CFX_WideString GetRichTextString(); | |
| CFX_WideString GetValue(); | |
| CFX_WideString GetDefaultValue(); | |
| FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bNotify = FALSE); | |
| int GetMaxLen(); | |
| int CountSelectedItems(); | |
| int GetSelectedIndex(int index); | |
| FX_BOOL ClearSelection(FX_BOOL bNotify = FALSE); | |
| FX_BOOL IsItemSelected(int index); | |
| FX_BOOL SetItemSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify = FALSE); | |
| FX_BOOL IsItemDefaultSelected(int index); | |
| int GetDefaultSelectedItem(); | |
| int CountOptions(); | |
| CFX_WideString GetOptionLabel(int index); | |
| CFX_WideString GetOptionValue(int index); | |
| int FindOption(CFX_WideString csOptLabel); | |
| int FindOptionValue(FX_LPCWSTR csOptValue, int iStartIndex = 0); | |
| FX_BOOL CheckControl(int iControlIndex, FX_BOOL bChecked, FX_BOOL bNotify = FALSE); | |
| int GetTopVisibleIndex(); | |
| int CountSelectedOptions(); | |
| int GetSelectedOptionIndex(int index); | |
| FX_BOOL IsOptionSelected(int iOptIndex); | |
| FX_BOOL SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify = FALSE); | |
| FX_BOOL ClearSelectedOptions(FX_BOOL bNotify = FALSE); | |
| FX_FLOAT GetFontSize() | |
| { | |
| return m_FontSize; | |
| } | |
| CPDF_Font* GetFont() | |
| { | |
| return m_pFont; | |
| } | |
| protected: | |
| CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict); | |
| ~CPDF_FormField(); | |
| CPDF_FormField::Type m_Type; | |
| FX_DWORD m_Flags; | |
| CPDF_InterForm* m_pForm; | |
| CPDF_Dictionary* m_pDict; | |
| CFX_PtrArray m_ControlList; | |
| friend class CPDF_InterForm; | |
| friend class CPDF_FormControl; | |
| CFX_WideString GetValue(FX_BOOL bDefault); | |
| FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify); | |
| void SyncFieldFlags(); | |
| int FindListSel(CPDF_String* str); | |
| CFX_WideString GetOptionText(int index, int sub_index); | |
| void LoadDA(); | |
| void UpdateAP(CPDF_FormControl* pControl); | |
| CFX_WideString GetCheckValue(FX_BOOL bDefault); | |
| FX_BOOL SetCheckValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify); | |
| FX_FLOAT m_FontSize; | |
| CPDF_Font* m_pFont; | |
| }; | |
| CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name, int nLevel = 0); | |
| class CPDF_IconFit : public CFX_Object | |
| { | |
| public: | |
| CPDF_IconFit(CPDF_Dictionary* pDict = NULL) | |
| { | |
| m_pDict = pDict; | |
| } | |
| operator CPDF_Dictionary*() const | |
| { | |
| return m_pDict; | |
| } | |
| enum ScaleMethod { | |
| Always = 0, | |
| Bigger, | |
| Smaller, | |
| Never | |
| }; | |
| ScaleMethod GetScaleMethod(); | |
| FX_BOOL IsProportionalScale(); | |
| void GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom); | |
| FX_BOOL GetFittingBounds(); | |
| CPDF_Dictionary* m_pDict; | |
| }; | |
| #define TEXTPOS_CAPTION 0 | |
| #define TEXTPOS_ICON 1 | |
| #define TEXTPOS_BELOW 2 | |
| #define TEXTPOS_ABOVE 3 | |
| #define TEXTPOS_RIGHT 4 | |
| #define TEXTPOS_LEFT 5 | |
| #define TEXTPOS_OVERLAID 6 | |
| class CPDF_FormControl : public CFX_Object | |
| { | |
| public: | |
| CPDF_FormField::Type GetType() | |
| { | |
| return m_pField->GetType(); | |
| } | |
| CPDF_InterForm* GetInterForm() const | |
| { | |
| return m_pForm; | |
| } | |
| CPDF_FormField* GetField() const | |
| { | |
| return m_pField; | |
| } | |
| CPDF_Dictionary* GetWidget() const | |
| { | |
| return m_pWidgetDict; | |
| } | |
| CFX_FloatRect GetRect(); | |
| void DrawControl(CFX_RenderDevice* pDevice, CFX_AffineMatrix* pMatrix, | |
| CPDF_Page* pPage, CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions = NULL); | |
| CFX_ByteString GetCheckedAPState(); | |
| CFX_WideString GetExportValue(); | |
| FX_BOOL IsChecked(); | |
| FX_BOOL IsDefaultChecked(); | |
| enum HighlightingMode { | |
| None = 0, | |
| Invert, | |
| Outline, | |
| Push, | |
| Toggle | |
| }; | |
| HighlightingMode GetHighlightingMode(); | |
| FX_BOOL HasMKEntry(CFX_ByteString csEntry); | |
| int GetRotation(); | |
| inline FX_ARGB GetBorderColor(int& iColorType) | |
| { | |
| return GetColor(iColorType, "BC"); | |
| } | |
| inline FX_FLOAT GetOriginalBorderColor(int index) | |
| { | |
| return GetOriginalColor(index, "BC"); | |
| } | |
| inline void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4]) | |
| { | |
| GetOriginalColor(iColorType, fc, "BC"); | |
| } | |
| inline FX_ARGB GetBackgroundColor(int& iColorType) | |
| { | |
| return GetColor(iColorType, "BG"); | |
| } | |
| inline FX_FLOAT GetOriginalBackgroundColor(int index) | |
| { | |
| return GetOriginalColor(index, "BG"); | |
| } | |
| inline void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4]) | |
| { | |
| GetOriginalColor(iColorType, fc, "BG"); | |
| } | |
| inline CFX_WideString GetNormalCaption() | |
| { | |
| return GetCaption("CA"); | |
| } | |
| inline CFX_WideString GetRolloverCaption() | |
| { | |
| return GetCaption("RC"); | |
| } | |
| inline CFX_WideString GetDownCaption() | |
| { | |
| return GetCaption("AC"); | |
| } | |
| inline CPDF_Stream* GetNormalIcon() | |
| { | |
| return GetIcon("I"); | |
| } | |
| inline CPDF_Stream* GetRolloverIcon() | |
| { | |
| return GetIcon("RI"); | |
| } | |
| inline CPDF_Stream* GetDownIcon() | |
| { | |
| return GetIcon("IX"); | |
| } | |
| CPDF_IconFit GetIconFit(); | |
| int GetTextPosition(); | |
| CPDF_Action GetAction(); | |
| CPDF_AAction GetAdditionalAction(); | |
| CPDF_DefaultAppearance GetDefaultAppearance(); | |
| CPDF_Font* GetDefaultControlFont(); | |
| int GetControlAlignment(); | |
| protected: | |
| CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict); | |
| CFX_ByteString GetOnStateName(); | |
| void SetOnStateName(const CFX_ByteString& csOn); | |
| void CheckControl(FX_BOOL bChecked); | |
| FX_ARGB GetColor(int& iColorType, CFX_ByteString csEntry); | |
| FX_FLOAT GetOriginalColor(int index, CFX_ByteString csEntry); | |
| void GetOriginalColor(int& iColorType, FX_FLOAT fc[4], CFX_ByteString csEntry); | |
| CFX_WideString GetCaption(CFX_ByteString csEntry); | |
| CPDF_Stream* GetIcon(CFX_ByteString csEntry); | |
| CPDF_ApSettings GetMK(FX_BOOL bCreate); | |
| CPDF_InterForm* m_pForm; | |
| CPDF_FormField* m_pField; | |
| CPDF_Dictionary* m_pWidgetDict; | |
| friend class CPDF_InterForm; | |
| friend class CPDF_FormField; | |
| }; | |
| class CPDF_FormNotify : public CFX_Object | |
| { | |
| public: | |
| virtual ~CPDF_FormNotify() {} | |
| virtual int BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue) | |
| { | |
| return 0; | |
| } | |
| virtual int AfterValueChange(const CPDF_FormField* pField) | |
| { | |
| return 0; | |
| } | |
| virtual int BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue) | |
| { | |
| return 0; | |
| } | |
| virtual int AfterSelectionChange(const CPDF_FormField* pField) | |
| { | |
| return 0; | |
| } | |
| virtual int AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray) | |
| { | |
| return 0; | |
| } | |
| virtual int BeforeFormReset(const CPDF_InterForm* pForm) | |
| { | |
| return 0; | |
| } | |
| virtual int AfterFormReset(const CPDF_InterForm* pForm) | |
| { | |
| return 0; | |
| } | |
| virtual int BeforeFormImportData(const CPDF_InterForm* pForm) | |
| { | |
| return 0; | |
| } | |
| virtual int AfterFormImportData(const CPDF_InterForm* pForm) | |
| { | |
| return 0; | |
| } | |
| }; | |
| FX_BOOL FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict); | |
| class CPDF_PageLabel : public CFX_Object | |
| { | |
| public: | |
| CPDF_PageLabel(CPDF_Document* pDocument) | |
| { | |
| m_pDocument = pDocument; | |
| } | |
| CFX_WideString GetLabel(int nPage) const; | |
| FX_INT32 GetPageByLabel(FX_BSTR bsLabel) const; | |
| FX_INT32 GetPageByLabel(FX_WSTR wsLabel) const; | |
| protected: | |
| CPDF_Document* m_pDocument; | |
| }; | |
| class CPDF_Metadata | |
| { | |
| public: | |
| CPDF_Metadata(); | |
| ~CPDF_Metadata(); | |
| void LoadDoc(CPDF_Document *pDoc); | |
| FX_INT32 GetString(FX_BSTR bsItem, CFX_WideString &wsStr); | |
| CXML_Element* GetRoot() const; | |
| CXML_Element* GetRDF() const; | |
| protected: | |
| FX_LPVOID m_pData; | |
| }; | |
| class CPDF_ViewerPreferences | |
| { | |
| public: | |
| CPDF_ViewerPreferences(CPDF_Document *pDoc); | |
| ~CPDF_ViewerPreferences(); | |
| FX_BOOL IsDirectionR2L() const; | |
| FX_BOOL PrintScaling() const; | |
| protected: | |
| CPDF_Document* m_pDoc; | |
| }; | |
| class CPDF_ApSettings : public CFX_Object | |
| { | |
| public: | |
| CPDF_ApSettings(CPDF_Dictionary* pDict = NULL) | |
| { | |
| m_pDict = pDict; | |
| } | |
| operator CPDF_Dictionary* () const | |
| { | |
| return m_pDict; | |
| } | |
| FX_BOOL HasMKEntry(FX_BSTR csEntry); | |
| int GetRotation(); | |
| inline FX_ARGB GetBorderColor(int& iColorType) | |
| { | |
| return GetColor(iColorType, FX_BSTRC("BC")); | |
| } | |
| inline FX_FLOAT GetOriginalBorderColor(int index) | |
| { | |
| return GetOriginalColor(index, FX_BSTRC("BC")); | |
| } | |
| inline void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4]) | |
| { | |
| GetOriginalColor(iColorType, fc, FX_BSTRC("BC")); | |
| } | |
| inline FX_ARGB GetBackgroundColor(int& iColorType) | |
| { | |
| return GetColor(iColorType, FX_BSTRC("BG")); | |
| } | |
| inline FX_FLOAT GetOriginalBackgroundColor(int index) | |
| { | |
| return GetOriginalColor(index, FX_BSTRC("BG")); | |
| } | |
| inline void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4]) | |
| { | |
| GetOriginalColor(iColorType, fc, FX_BSTRC("BG")); | |
| } | |
| inline CFX_WideString GetNormalCaption() | |
| { | |
| return GetCaption(FX_BSTRC("CA")); | |
| } | |
| inline CFX_WideString GetRolloverCaption() | |
| { | |
| return GetCaption(FX_BSTRC("RC")); | |
| } | |
| inline CFX_WideString GetDownCaption() | |
| { | |
| return GetCaption(FX_BSTRC("AC")); | |
| } | |
| inline CPDF_Stream* GetNormalIcon() | |
| { | |
| return GetIcon(FX_BSTRC("I")); | |
| } | |
| inline CPDF_Stream* GetRolloverIcon() | |
| { | |
| return GetIcon(FX_BSTRC("RI")); | |
| } | |
| inline CPDF_Stream* GetDownIcon() | |
| { | |
| return GetIcon(FX_BSTRC("IX")); | |
| } | |
| CPDF_IconFit GetIconFit(); | |
| int GetTextPosition(); | |
| CPDF_Dictionary* m_pDict; | |
| protected: | |
| FX_ARGB GetColor(int& iColorType, FX_BSTR csEntry); | |
| FX_FLOAT GetOriginalColor(int index, FX_BSTR csEntry); | |
| void GetOriginalColor(int& iColorType, FX_FLOAT fc[4], FX_BSTR csEntry); | |
| CFX_WideString GetCaption(FX_BSTR csEntry); | |
| CPDF_Stream* GetIcon(FX_BSTR csEntry); | |
| friend class CPDF_FormControl; | |
| }; | |
| #endif |