1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
10 #include "../fpdfapi/fpdf_parser.h"
13 #include "../fpdfapi/fpdf_render.h"
19 class CPDF_BookmarkTree;
25 class CPDF_NumberTree;
26 class CPDF_TextObject;
27 class CPDF_ViewerPreferences;
29 class CPDF_RenderOptions;
32 class CPDF_DocJSActions;
33 class CPDF_ActionFields;
37 class CPDF_DefaultAppearance;
40 class CPDF_FormNotify;
41 class CPDF_FormControl;
44 class CPDF_ApSettings;
45 class CPDF_NameTree : public CFX_Object
49 CPDF_NameTree(CPDF_Dictionary* pRoot)
54 CPDF_NameTree(CPDF_Document* pDoc, FX_BSTR category);
56 CPDF_Object* LookupValue(int nIndex, CFX_ByteString& csName) const;
58 CPDF_Object* LookupValue(const CFX_ByteString& csName) const;
60 CPDF_Array* LookupNamedDest(CPDF_Document* pDoc, FX_BSTR sName);
62 int GetIndex(const CFX_ByteString& csName) const;
67 CPDF_Dictionary* GetRoot() const
74 CPDF_Dictionary* m_pRoot;
76 class CPDF_BookmarkTree : public CFX_Object
79 CPDF_BookmarkTree(CPDF_Document* pDoc) : m_pDocument(pDoc) {}
81 CPDF_Bookmark GetFirstChild(const CPDF_Bookmark& parent) const;
83 CPDF_Bookmark GetNextSibling(const CPDF_Bookmark& bookmark) const;
85 CPDF_Document* GetDocument() const { return m_pDocument; }
88 CPDF_Document* m_pDocument;
90 #define PDFBOOKMARK_ITALIC 1
91 #define PDFBOOKMARK_BOLD 2
92 class CPDF_Bookmark : public CFX_Object
96 CPDF_Bookmark() : m_pDict(NULL) {}
98 explicit CPDF_Bookmark(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
100 CPDF_Dictionary* GetDict() const { return m_pDict; }
102 operator bool() const { return m_pDict != NULL; }
104 FX_DWORD GetColorRef() const;
106 FX_DWORD GetFontStyle() const;
108 CFX_WideString GetTitle() const;
110 CPDF_Dest GetDest(CPDF_Document* pDocument) const;
112 CPDF_Action GetAction() const;
114 CPDF_Dictionary* m_pDict;
116 #define PDFZOOM_XYZ 1
117 #define PDFZOOM_FITPAGE 2
118 #define PDFZOOM_FITHORZ 3
119 #define PDFZOOM_FITVERT 4
120 #define PDFZOOM_FITRECT 5
121 #define PDFZOOM_FITBBOX 6
122 #define PDFZOOM_FITBHORZ 7
123 #define PDFZOOM_FITBVERT 8
124 class CPDF_Dest : public CFX_Object
127 CPDF_Dest() : m_pObj(nullptr) { }
128 explicit CPDF_Dest(CPDF_Object* pObj) : m_pObj(pObj) { }
130 operator bool () const { return m_pObj != NULL; }
131 CPDF_Object* GetObject() const { return m_pObj; }
133 CFX_ByteString GetRemoteName();
134 int GetPageIndex(CPDF_Document* pDoc);
135 FX_DWORD GetPageObjNum();
137 FX_FLOAT GetParam(int index);
142 class CPDF_OCContext : public CFX_Object, public IPDF_OCContext
153 CPDF_OCContext(CPDF_Document *pDoc, UsageType eUsageType = View);
155 virtual ~CPDF_OCContext();
157 CPDF_Document* GetDocument() const
162 UsageType GetUsageType() const
167 FX_BOOL CheckOCGVisible(const CPDF_Dictionary *pOCGDict);
169 void ResetOCContext();
172 FX_BOOL LoadOCGStateFromConfig(FX_BSTR csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const;
174 FX_BOOL LoadOCGState(const CPDF_Dictionary *pOCGDict) const;
176 FX_BOOL GetOCGVisible(const CPDF_Dictionary *pOCGDict);
178 FX_BOOL GetOCGVE(CPDF_Array *pExpression, FX_BOOL bFromConfig, int nLevel = 0);
180 FX_BOOL LoadOCMDState(const CPDF_Dictionary *pOCMDDict, FX_BOOL bFromConfig);
182 CPDF_Document *m_pDocument;
184 UsageType m_eUsageType;
186 CFX_MapPtrTemplate<const CPDF_Dictionary*, void*> m_OCGStates;
188 class CPDF_LWinParam : public CFX_Object
192 CPDF_LWinParam(CPDF_Dictionary* pDict)
197 operator CPDF_Dictionary* () const
202 inline CFX_ByteString GetFileName()
204 return m_pDict->GetString("F");
208 inline CFX_ByteString GetDefaultDirectory()
210 return m_pDict->GetString("D");
214 inline CFX_ByteString GetOperation()
216 return m_pDict->GetString("O");
220 inline CFX_ByteString GetParameter()
222 return m_pDict->GetString("P");
225 CPDF_Dictionary* m_pDict;
227 class CPDF_ActionFields : public CFX_Object
231 CPDF_ActionFields(const CPDF_Action* pAction)
233 m_pAction = (CPDF_Action*)pAction;
236 operator CPDF_Action*() const
241 FX_DWORD GetFieldsCount() const;
243 void GetAllFields(CFX_PtrArray& fieldObjects) const;
245 CPDF_Object* GetField(FX_DWORD iIndex) const;
247 CPDF_Action* m_pAction;
250 #define PDFNAMED_NEXTPAGE 1
251 #define PDFNAMED_PREVPAGE 2
252 #define PDFNAMED_FIRSTPAGE 3
253 #define PDFNAMED_LASTPAGE 4
254 #define PDFJS_MAXLENGTH 64
255 class CPDF_Action : public CFX_Object
280 CPDF_Action() : m_pDict(nullptr) { }
281 explicit CPDF_Action(CPDF_Dictionary* pDict) : m_pDict(pDict) { }
283 operator bool () const { return m_pDict != NULL; }
285 CPDF_Dictionary* GetDict() const { return m_pDict; }
287 CFX_ByteString GetTypeName() const
289 return m_pDict->GetString("S");
292 ActionType GetType() const;
296 CPDF_Dest GetDest(CPDF_Document* pDoc) const;
302 CFX_WideString GetFilePath() const;
307 FX_BOOL GetNewWindow() const
309 return m_pDict->GetBoolean("NewWindow");
315 CPDF_LWinParam GetWinParam() const;
320 CFX_ByteString GetURI(CPDF_Document* pDoc) const;
325 FX_BOOL GetMouseMap() const
327 return m_pDict->GetBoolean("IsMap");
333 CPDF_ActionFields GetWidgets() const
341 FX_BOOL GetHideStatus() const
343 return m_pDict->GetBoolean("H", TRUE);
349 CFX_ByteString GetNamedAction() const
351 return m_pDict->GetString("N");
357 FX_DWORD GetFlags() const
359 return m_pDict->GetInteger("Flags");
365 CFX_WideString GetJavaScript() const;
370 CPDF_Dictionary* GetAnnot() const;
375 FX_INT32 GetOperationType() const;
380 CPDF_Stream* GetSoundStream() const
382 return m_pDict->GetStream("Sound");
385 FX_FLOAT GetVolume() const
387 return m_pDict->GetNumber("Volume");
390 FX_BOOL IsSynchronous() const
392 return m_pDict->GetBoolean("Synchronous");
395 FX_BOOL IsRepeat() const
397 return m_pDict->GetBoolean("Repeat");
400 FX_BOOL IsMixPlay() const
402 return m_pDict->GetBoolean("Mix");
408 FX_DWORD GetSubActionsCount() const;
410 CPDF_Action GetSubAction(FX_DWORD iIndex) const;
413 CPDF_Dictionary* m_pDict;
415 class CPDF_AAction : public CFX_Object
419 CPDF_AAction(CPDF_Dictionary* pDict = NULL)
424 operator CPDF_Dictionary*() const
453 FX_BOOL ActionExist(AActionType eType) const;
455 CPDF_Action GetAction(AActionType eType) const;
457 FX_POSITION GetStartPos() const;
459 CPDF_Action GetNextAction(FX_POSITION& pos, AActionType& eType) const;
461 CPDF_Dictionary* m_pDict;
463 class CPDF_DocJSActions : public CFX_Object
466 CPDF_DocJSActions(CPDF_Document* pDoc);
469 int CountJSActions() const;
471 CPDF_Action GetJSAction(int index, CFX_ByteString& csName) const;
473 CPDF_Action GetJSAction(const CFX_ByteString& csName) const;
475 int FindJSAction(const CFX_ByteString& csName) const;
478 CPDF_Document* GetDocument() const
485 CPDF_Document* m_pDocument;
487 class CPDF_FileSpec : public CFX_Object
493 CPDF_FileSpec(CPDF_Object *pObj)
498 operator CPDF_Object*() const
503 FX_BOOL IsURL() const;
505 FX_BOOL GetFileName(CFX_WideString &wsFileName) const;
507 CPDF_Stream* GetFileStream() const;
509 void SetFileName(FX_WSTR wsFileName, FX_BOOL bURL = FALSE);
514 class CPDF_LinkList : public CFX_Object
518 CPDF_LinkList(CPDF_Document* pDoc)
525 CPDF_Link GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y);
527 int CountLinks(CPDF_Page* pPage);
529 CPDF_Link GetLink(CPDF_Page* pPage, int index);
531 CPDF_Document* GetDocument() const
537 CPDF_Document* m_pDocument;
539 CFX_MapPtrToPtr m_PageMap;
541 CFX_PtrArray* GetPageLinks(CPDF_Page* pPage);
543 void LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList);
545 class CPDF_Link : public CFX_Object
549 CPDF_Link(CPDF_Dictionary* pDict = NULL)
554 operator CPDF_Dictionary*() const
559 CFX_FloatRect GetRect();
563 CPDF_Dest GetDest(CPDF_Document* pDoc);
565 CPDF_Action GetAction();
568 CPDF_Dictionary* m_pDict;
570 #define ANNOTFLAG_INVISIBLE 1
571 #define ANNOTFLAG_HIDDEN 2
572 #define ANNOTFLAG_PRINT 4
573 #define ANNOTFLAG_NOZOOM 8
574 #define ANNOTFLAG_NOROTATE 0x10
575 #define ANNOTFLAG_NOVIEW 0x20
576 #define ANNOTFLAG_READONLY 0x40
577 #define ANNOTFLAG_LOCKED 0x80
578 #define ANNOTFLAG_TOGGLENOVIEW 0x100
579 class CPDF_Annot : public CFX_PrivateData, public CFX_Object
583 CPDF_Annot(CPDF_Dictionary* pDict);
587 CPDF_Dictionary* m_pAnnotDict;
589 CFX_ByteString GetSubType() const;
591 FX_DWORD GetFlags() const
593 return m_pAnnotDict->GetInteger("F");
596 void GetRect(CFX_FloatRect& rect) const;
598 enum AppearanceMode {
604 FX_BOOL DrawAppearance(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,
605 AppearanceMode mode, const CPDF_RenderOptions* pOptions);
607 FX_BOOL DrawInContext(const CPDF_Page* pPage, const CPDF_RenderContext* pContext,
608 const CFX_AffineMatrix* pUser2Device, AppearanceMode mode);
610 void ClearCachedAP();
613 void DrawBorder(CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,
614 const CPDF_RenderOptions* pOptions);
616 CPDF_PageObject* GetBorder(FX_BOOL bPrint, const CPDF_RenderOptions* pOptions);
622 CPDF_Annot* GetIRTNote(int index);
625 CPDF_Form* GetAPForm(const CPDF_Page* pPage, AppearanceMode mode);
628 CFX_MapPtrToPtr m_APMap;
630 friend class CPDF_AnnotList;
632 CPDF_AnnotList* m_pList;
634 CPDF_Reference* NewAnnotRef();
636 class CPDF_AnnotList : public CFX_Object
640 CPDF_AnnotList(CPDF_Page* pPage);
644 void GetAnnotMatrix(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CFX_Matrix &matrix) const;
646 void GetAnnotRect(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CPDF_Rect &rtAnnot) const;
648 void DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,
649 CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
650 CPDF_RenderOptions* pOptions);
652 void DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,
653 FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
654 CPDF_RenderOptions* pOptions)
656 DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, NULL);
659 void DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,
660 FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
661 CPDF_RenderOptions* pOptions, FX_RECT *pClipRect)
663 DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, pClipRect);
666 void DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, CPDF_RenderContext* pContext,
667 FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_DWORD dwAnnotFlags,
668 CPDF_RenderOptions* pOptions, FX_RECT* pClipRect);
672 CPDF_Annot* GetAt(int index)
674 return (CPDF_Annot*)m_AnnotList.GetAt(index);
679 return m_AnnotList.GetSize();
682 int GetIndex(CPDF_Annot* pAnnot);
685 CPDF_Document* GetDocument() const
691 CFX_PtrArray m_AnnotList;
693 CPDF_Dictionary* m_pPageDict;
695 CPDF_Document* m_pDocument;
697 CFX_PtrArray m_Borders;
699 void DisplayPass(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,
700 CPDF_RenderContext* pContext, FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix,
701 FX_BOOL bWidget, CPDF_RenderOptions* pOptions, FX_RECT* clip_rect);
702 friend class CPDF_Annot;
704 #define COLORTYPE_TRANSPARENT 0
705 #define COLORTYPE_GRAY 1
706 #define COLORTYPE_RGB 2
707 #define COLORTYPE_CMYK 3
708 class CPDF_DefaultAppearance : public CFX_Object
712 CPDF_DefaultAppearance(const CFX_ByteString& csDA = "")
717 CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA)
719 m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
723 operator CFX_ByteString() const
728 const CPDF_DefaultAppearance& operator =(const CFX_ByteString& csDA)
734 const CPDF_DefaultAppearance& operator =(const CPDF_DefaultAppearance& cDA)
736 m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
744 CFX_ByteString GetFontString();
746 void GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize);
751 FX_BOOL HasColor(FX_BOOL bStrokingOperation = FALSE);
753 CFX_ByteString GetColorString(FX_BOOL bStrokingOperation = FALSE);
755 void GetColor(int& iColorType, FX_FLOAT fc[4], FX_BOOL bStrokingOperation = FALSE);
757 void GetColor(FX_ARGB& color, int& iColorType, FX_BOOL bStrokingOperation = FALSE);
762 FX_BOOL HasTextMatrix();
764 CFX_ByteString GetTextMatrixString();
766 CFX_AffineMatrix GetTextMatrix();
770 CFX_ByteString m_csDA;
772 #define FIELDTYPE_UNKNOWN 0
773 #define FIELDTYPE_PUSHBUTTON 1
774 #define FIELDTYPE_CHECKBOX 2
775 #define FIELDTYPE_RADIOBUTTON 3
776 #define FIELDTYPE_COMBOBOX 4
777 #define FIELDTYPE_LISTBOX 5
778 #define FIELDTYPE_TEXTFIELD 6
779 #define FIELDTYPE_SIGNATURE 7
780 class CPDF_InterForm : public CFX_PrivateData, public CFX_Object
784 CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bUpdateAP);
790 static void EnableUpdateAP(FX_BOOL bUpdateAP);
792 static FX_BOOL UpdatingAPEnabled();
795 static CFX_ByteString GenerateNewResourceName(const CPDF_Dictionary* pResDict, FX_LPCSTR csType, int iMinLen = 2, FX_LPCSTR csPrefix = "");
799 static CPDF_Font* AddSystemDefaultFont(const CPDF_Document* pDocument);
801 static CPDF_Font* AddSystemFont(const CPDF_Document* pDocument, CFX_ByteString csFontName, FX_BYTE iCharSet = 1);
803 static CPDF_Font* AddSystemFont(const CPDF_Document* pDocument, CFX_WideString csFontName, FX_BYTE iCharSet = 1);
805 static CPDF_Font* AddStandardFont(const CPDF_Document* pDocument, CFX_ByteString csFontName);
807 static CFX_ByteString GetNativeFont(FX_BYTE iCharSet, FX_LPVOID pLogFont = NULL);
809 static CFX_ByteString GetNativeFont(FX_LPVOID pLogFont = NULL);
811 static FX_BYTE GetNativeCharSet();
813 static CPDF_Font* AddNativeFont(FX_BYTE iCharSet, const CPDF_Document* pDocument);
815 static CPDF_Font* AddNativeFont(const CPDF_Document* pDocument);
820 FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType);
822 FX_BOOL ValidateFieldName(const CPDF_FormField* pField, CFX_WideString& csNewFieldName);
824 FX_BOOL ValidateFieldName(const CPDF_FormControl* pControl, CFX_WideString& csNewFieldName);
829 FX_DWORD CountFields(const CFX_WideString &csFieldName = L"");
831 CPDF_FormField* GetField(FX_DWORD index, const CFX_WideString &csFieldName = L"");
833 void GetAllFieldNames(CFX_WideStringArray& allFieldNames);
835 FX_BOOL IsValidFormField(const void* pField);
837 CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const;
842 FX_DWORD CountControls(CFX_WideString csFieldName = L"");
844 CPDF_FormControl* GetControl(FX_DWORD index, CFX_WideString csFieldName = L"");
846 FX_BOOL IsValidFormControl(const void* pControl);
848 int CountPageControls(CPDF_Page* pPage) const;
850 CPDF_FormControl* GetPageControl(CPDF_Page* pPage, int index) const;
853 CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y) const;
855 CPDF_FormControl* GetControlByDict(CPDF_Dictionary* pWidgetDict) const;
860 FX_DWORD CountInternalFields(const CFX_WideString& csFieldName = L"") const;
862 CPDF_Dictionary* GetInternalField(FX_DWORD index, const CFX_WideString& csFieldName = L"") const;
868 CPDF_Document* GetDocument() const
873 CPDF_Dictionary* GetFormDict() const
881 FX_BOOL NeedConstructAP();
883 void NeedConstructAP(FX_BOOL bNeedAP);
888 int CountFieldsInCalculationOrder();
890 CPDF_FormField* GetFieldInCalculationOrder(int index);
892 int FindFieldInCalculationOrder(const CPDF_FormField* pField);
897 FX_DWORD CountFormFonts();
899 CPDF_Font* GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag);
901 CPDF_Font* GetFormFont(CFX_ByteString csNameTag);
903 CPDF_Font* GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag);
905 CPDF_Font* GetNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag);
907 CPDF_Font* GetNativeFormFont(CFX_ByteString& csNameTag);
909 FX_BOOL FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
911 FX_BOOL FindFormFont(CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag);
913 inline FX_BOOL FindFormFont(CFX_WideString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag)
915 return FindFormFont(PDF_EncodeText(csFontName), pFont, csNameTag);
922 void AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
924 CPDF_Font* AddNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag);
926 CPDF_Font* AddNativeFormFont(CFX_ByteString& csNameTag);
928 void RemoveFormFont(const CPDF_Font* pFont);
930 void RemoveFormFont(CFX_ByteString csNameTag);
935 CPDF_DefaultAppearance GetDefaultAppearance();
937 CPDF_Font* GetDefaultFormFont();
941 int GetFormAlignment();
946 CPDF_FormField* CheckRequiredFields(const CFX_PtrArray *fields = NULL, FX_BOOL bIncludeOrExclude = TRUE) const;
948 CFDF_Document* ExportToFDF(FX_WSTR pdf_path, FX_BOOL bSimpleFileSpec = FALSE) const;
950 CFDF_Document* ExportToFDF(FX_WSTR pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bSimpleFileSpec = FALSE) const;
952 FX_BOOL ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE);
957 FX_BOOL ResetForm(const CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bNotify = FALSE);
959 FX_BOOL ResetForm(FX_BOOL bNotify = FALSE);
963 CPDF_FormNotify* GetFormNotify() const
965 return m_pFormNotify;
968 void SetFormNotify(const CPDF_FormNotify* pNotify);
971 int GetPageWithWidget(int iCurPage, FX_BOOL bNext);
980 void ClearUpdatedFlag()
986 FX_BOOL HasXFAForm() const;
988 void FixPageFields(const CPDF_Page* pPage);
991 static FX_BOOL m_bUpdateAP;
993 void LoadField(CPDF_Dictionary* pFieldDict, int nLevel = 0);
995 CPDF_Object* GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name);
997 CPDF_FormField* AddTerminalField(const CPDF_Dictionary* pFieldDict);
999 CPDF_FormControl* AddControl(const CPDF_FormField* pField, const CPDF_Dictionary* pWidgetDict);
1001 void FDF_ImportField(CPDF_Dictionary* pField, const CFX_WideString& parent_name, FX_BOOL bNotify = FALSE, int nLevel = 0);
1003 FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType, const CPDF_FormField* pExcludedField, const CPDF_FormControl* pExcludedControl);
1005 int CompareFieldName(const CFX_WideString& name1, const CFX_WideString& name2);
1007 int CompareFieldName(const CFX_ByteString& name1, const CFX_ByteString& name2);
1009 CPDF_Document* m_pDocument;
1011 FX_BOOL m_bGenerateAP;
1013 CPDF_Dictionary* m_pFormDict;
1015 CFX_MapPtrToPtr m_ControlMap;
1017 CFieldTree *m_pFieldTree;
1019 CFX_ByteString m_bsEncoding;
1021 CPDF_FormNotify* m_pFormNotify;
1024 friend class CPDF_FormControl;
1025 friend class CPDF_FormField;
1027 #define FORMFIELD_READONLY 0x01
1028 #define FORMFIELD_REQUIRED 0x02
1029 #define FORMFIELD_NOEXPORT 0x04
1030 #define FORMRADIO_NOTOGGLEOFF 0x100
1031 #define FORMRADIO_UNISON 0x200
1032 #define FORMTEXT_MULTILINE 0x100
1033 #define FORMTEXT_PASSWORD 0x200
1034 #define FORMTEXT_NOSCROLL 0x400
1035 #define FORMTEXT_COMB 0x800
1036 #define FORMCOMBO_EDIT 0x100
1037 #define FORMLIST_MULTISELECT 0x100
1038 class CPDF_FormField : public CFX_Object
1055 CFX_WideString GetFullName();
1067 CPDF_InterForm* GetInterForm() const
1072 CPDF_Dictionary* GetFieldDict() const
1077 void SetFieldDict(CPDF_Dictionary* pDict)
1082 FX_BOOL ResetField(FX_BOOL bNotify = FALSE);
1088 return m_ControlList.GetSize();
1091 CPDF_FormControl* GetControl(int index)
1093 return (CPDF_FormControl*)m_ControlList.GetAt(index);
1096 int GetControlIndex(const CPDF_FormControl* pControl);
1106 CPDF_AAction GetAdditionalAction();
1111 CFX_WideString GetAlternateName();
1116 CFX_WideString GetMappingName();
1121 FX_DWORD GetFieldFlags();
1126 CFX_ByteString GetDefaultStyle();
1131 CFX_WideString GetRichTextString();
1135 CFX_WideString GetValue();
1137 CFX_WideString GetDefaultValue();
1139 FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bNotify = FALSE);
1150 int CountSelectedItems();
1152 int GetSelectedIndex(int index);
1154 FX_BOOL ClearSelection(FX_BOOL bNotify = FALSE);
1156 FX_BOOL IsItemSelected(int index);
1158 FX_BOOL SetItemSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);
1160 FX_BOOL IsItemDefaultSelected(int index);
1162 int GetDefaultSelectedItem();
1169 CFX_WideString GetOptionLabel(int index);
1171 CFX_WideString GetOptionValue(int index);
1173 int FindOption(CFX_WideString csOptLabel);
1175 int FindOptionValue(FX_LPCWSTR csOptValue, int iStartIndex = 0);
1180 FX_BOOL CheckControl(int iControlIndex, FX_BOOL bChecked, FX_BOOL bNotify = FALSE);
1185 int GetTopVisibleIndex();
1190 int CountSelectedOptions();
1192 int GetSelectedOptionIndex(int index);
1194 FX_BOOL IsOptionSelected(int iOptIndex);
1196 FX_BOOL SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);
1198 FX_BOOL ClearSelectedOptions(FX_BOOL bNotify = FALSE);
1200 FX_BOOL ClearOptions(FX_BOOL bNotify = FALSE);
\r
1202 int InsertOption(CFX_WideString csOptLabel, int index = -1, FX_BOOL bNotify = FALSE);
\r
1204 FX_FLOAT GetFontSize()
1209 CPDF_Font* GetFont()
1216 CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict);
1220 CPDF_FormField::Type m_Type;
1224 CPDF_InterForm* m_pForm;
1226 CPDF_Dictionary* m_pDict;
1228 CFX_PtrArray m_ControlList;
1229 friend class CPDF_InterForm;
1230 friend class CPDF_FormControl;
1234 CFX_WideString GetValue(FX_BOOL bDefault);
1236 FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);
1239 void SyncFieldFlags();
1241 int FindListSel(CPDF_String* str);
1243 CFX_WideString GetOptionText(int index, int sub_index);
1247 void UpdateAP(CPDF_FormControl* pControl);
1251 CFX_WideString GetCheckValue(FX_BOOL bDefault);
1253 FX_BOOL SetCheckValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);
1256 FX_FLOAT m_FontSize;
1260 CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name, int nLevel = 0);
1261 class CPDF_IconFit : public CFX_Object
1265 CPDF_IconFit(CPDF_Dictionary* pDict = NULL)
1270 operator CPDF_Dictionary*() const
1285 ScaleMethod GetScaleMethod();
1290 FX_BOOL IsProportionalScale();
1295 void GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom);
1300 FX_BOOL GetFittingBounds();
1303 CPDF_Dictionary* m_pDict;
1306 #define TEXTPOS_CAPTION 0
1307 #define TEXTPOS_ICON 1
1308 #define TEXTPOS_BELOW 2
1309 #define TEXTPOS_ABOVE 3
1310 #define TEXTPOS_RIGHT 4
1311 #define TEXTPOS_LEFT 5
1312 #define TEXTPOS_OVERLAID 6
1313 class CPDF_FormControl : public CFX_Object
1317 CPDF_FormField::Type GetType()
1319 return m_pField->GetType();
1322 CPDF_InterForm* GetInterForm() const
1327 CPDF_FormField* GetField() const
1332 CPDF_Dictionary* GetWidget() const
1334 return m_pWidgetDict;
1337 CFX_FloatRect GetRect();
1339 void DrawControl(CFX_RenderDevice* pDevice, CFX_AffineMatrix* pMatrix,
1340 CPDF_Page* pPage, CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions = NULL);
1344 CFX_ByteString GetCheckedAPState();
1346 CFX_WideString GetExportValue();
1348 FX_BOOL IsChecked();
1350 FX_BOOL IsDefaultChecked();
1355 enum HighlightingMode {
1363 HighlightingMode GetHighlightingMode();
1368 FX_BOOL HasMKEntry(CFX_ByteString csEntry);
1378 inline FX_ARGB GetBorderColor(int& iColorType)
1380 return GetColor(iColorType, "BC");
1383 inline FX_FLOAT GetOriginalBorderColor(int index)
1385 return GetOriginalColor(index, "BC");
1388 inline void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])
1390 GetOriginalColor(iColorType, fc, "BC");
1396 inline FX_ARGB GetBackgroundColor(int& iColorType)
1398 return GetColor(iColorType, "BG");
1401 inline FX_FLOAT GetOriginalBackgroundColor(int index)
1403 return GetOriginalColor(index, "BG");
1406 inline void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])
1408 GetOriginalColor(iColorType, fc, "BG");
1414 inline CFX_WideString GetNormalCaption()
1416 return GetCaption("CA");
1422 inline CFX_WideString GetRolloverCaption()
1424 return GetCaption("RC");
1430 inline CFX_WideString GetDownCaption()
1432 return GetCaption("AC");
1438 inline CPDF_Stream* GetNormalIcon()
1440 return GetIcon("I");
1446 inline CPDF_Stream* GetRolloverIcon()
1448 return GetIcon("RI");
1454 inline CPDF_Stream* GetDownIcon()
1456 return GetIcon("IX");
1462 CPDF_IconFit GetIconFit();
1467 int GetTextPosition();
1472 CPDF_Action GetAction();
1477 CPDF_AAction GetAdditionalAction();
1482 CPDF_DefaultAppearance GetDefaultAppearance();
1484 CPDF_Font* GetDefaultControlFont();
1489 int GetControlAlignment();
1493 CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict);
1495 CFX_ByteString GetOnStateName();
1497 void SetOnStateName(const CFX_ByteString& csOn);
1499 void CheckControl(FX_BOOL bChecked);
1501 FX_ARGB GetColor(int& iColorType, CFX_ByteString csEntry);
1503 FX_FLOAT GetOriginalColor(int index, CFX_ByteString csEntry);
1505 void GetOriginalColor(int& iColorType, FX_FLOAT fc[4], CFX_ByteString csEntry);
1507 CFX_WideString GetCaption(CFX_ByteString csEntry);
1509 CPDF_Stream* GetIcon(CFX_ByteString csEntry);
1511 CPDF_ApSettings GetMK(FX_BOOL bCreate);
1513 CPDF_InterForm* m_pForm;
1515 CPDF_FormField* m_pField;
1517 CPDF_Dictionary* m_pWidgetDict;
1518 friend class CPDF_InterForm;
1519 friend class CPDF_FormField;
1521 class CPDF_FormNotify : public CFX_Object
1525 virtual ~CPDF_FormNotify() {}
1527 virtual int BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue)
1532 virtual int AfterValueChange(const CPDF_FormField* pField)
1537 virtual int BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue)
1542 virtual int AfterSelectionChange(const CPDF_FormField* pField)
1547 virtual int AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray)
1552 virtual int BeforeFormReset(const CPDF_InterForm* pForm)
1557 virtual int AfterFormReset(const CPDF_InterForm* pForm)
1562 virtual int BeforeFormImportData(const CPDF_InterForm* pForm)
1567 virtual int AfterFormImportData(const CPDF_InterForm* pForm)
1572 FX_BOOL FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
1573 class CPDF_PageLabel : public CFX_Object
1577 CPDF_PageLabel(CPDF_Document* pDocument)
1579 m_pDocument = pDocument;
1583 CFX_WideString GetLabel(int nPage) const;
1585 FX_INT32 GetPageByLabel(FX_BSTR bsLabel) const;
1588 FX_INT32 GetPageByLabel(FX_WSTR wsLabel) const;
1591 CPDF_Document* m_pDocument;
1602 void LoadDoc(CPDF_Document *pDoc);
1605 FX_INT32 GetString(FX_BSTR bsItem, CFX_WideString &wsStr);
1607 CXML_Element* GetRoot() const;
1609 CXML_Element* GetRDF() const;
1614 class CPDF_ViewerPreferences
1618 CPDF_ViewerPreferences(CPDF_Document *pDoc);
1621 ~CPDF_ViewerPreferences();
1624 FX_BOOL IsDirectionR2L() const;
1626 FX_BOOL PrintScaling() const;
1628 FX_INT32 NumCopies() const;
1630 CPDF_Array* PrintPageRange() const;
1632 CFX_ByteString Duplex() const;
1635 CPDF_Document* m_pDoc;
1637 class CPDF_ApSettings : public CFX_Object
1641 CPDF_ApSettings(CPDF_Dictionary* pDict = NULL)
1646 operator CPDF_Dictionary* () const
1651 FX_BOOL HasMKEntry(FX_BSTR csEntry);
1660 inline FX_ARGB GetBorderColor(int& iColorType)
1662 return GetColor(iColorType, FX_BSTRC("BC"));
1665 inline FX_FLOAT GetOriginalBorderColor(int index)
1667 return GetOriginalColor(index, FX_BSTRC("BC"));
1670 inline void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])
1672 GetOriginalColor(iColorType, fc, FX_BSTRC("BC"));
1678 inline FX_ARGB GetBackgroundColor(int& iColorType)
1680 return GetColor(iColorType, FX_BSTRC("BG"));
1683 inline FX_FLOAT GetOriginalBackgroundColor(int index)
1685 return GetOriginalColor(index, FX_BSTRC("BG"));
1688 inline void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])
1690 GetOriginalColor(iColorType, fc, FX_BSTRC("BG"));
1696 inline CFX_WideString GetNormalCaption()
1698 return GetCaption(FX_BSTRC("CA"));
1704 inline CFX_WideString GetRolloverCaption()
1706 return GetCaption(FX_BSTRC("RC"));
1712 inline CFX_WideString GetDownCaption()
1714 return GetCaption(FX_BSTRC("AC"));
1720 inline CPDF_Stream* GetNormalIcon()
1722 return GetIcon(FX_BSTRC("I"));
1728 inline CPDF_Stream* GetRolloverIcon()
1730 return GetIcon(FX_BSTRC("RI"));
1736 inline CPDF_Stream* GetDownIcon()
1738 return GetIcon(FX_BSTRC("IX"));
1744 CPDF_IconFit GetIconFit();
1749 int GetTextPosition();
1751 CPDF_Dictionary* m_pDict;
1754 FX_ARGB GetColor(int& iColorType, FX_BSTR csEntry);
1756 FX_FLOAT GetOriginalColor(int index, FX_BSTR csEntry);
1758 void GetOriginalColor(int& iColorType, FX_FLOAT fc[4], FX_BSTR csEntry);
1760 CFX_WideString GetCaption(FX_BSTR csEntry);
1762 CPDF_Stream* GetIcon(FX_BSTR csEntry);
1763 friend class CPDF_FormControl;