// 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 |