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/fpdfdoc/fpdf_doc.h | 3584 +++++++++++++++++++-------------------- 1 file changed, 1792 insertions(+), 1792 deletions(-) (limited to 'core/include/fpdfdoc/fpdf_doc.h') diff --git a/core/include/fpdfdoc/fpdf_doc.h b/core/include/fpdfdoc/fpdf_doc.h index fc19441309..cbb0fd4a11 100644 --- a/core/include/fpdfdoc/fpdf_doc.h +++ b/core/include/fpdfdoc/fpdf_doc.h @@ -1,1792 +1,1792 @@ -// 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 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 +// 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 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 -- cgit v1.2.3