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
80 CPDF_BookmarkTree(CPDF_Document* pDoc)
88 CPDF_Bookmark GetFirstChild(CPDF_Bookmark parent);
90 CPDF_Bookmark GetNextSibling(CPDF_Bookmark bookmark);
93 CPDF_Document* GetDocument() const
99 CPDF_Document* m_pDocument;
101 #define PDFBOOKMARK_ITALIC 1
102 #define PDFBOOKMARK_BOLD 2
103 class CPDF_Bookmark : public CFX_Object
107 CPDF_Bookmark(CPDF_Dictionary* pDict = NULL)
112 operator CPDF_Dictionary*() const
119 FX_DWORD GetColorRef();
121 FX_DWORD GetFontStyle();
123 CFX_WideString GetTitle();
128 CPDF_Dest GetDest(CPDF_Document* pDocument);
130 CPDF_Action GetAction();
133 CPDF_Dictionary* m_pDict;
135 #define PDFZOOM_XYZ 1
136 #define PDFZOOM_FITPAGE 2
137 #define PDFZOOM_FITHORZ 3
138 #define PDFZOOM_FITVERT 4
139 #define PDFZOOM_FITRECT 5
140 #define PDFZOOM_FITBBOX 6
141 #define PDFZOOM_FITBHORZ 7
143 #define PDFZOOM_FITBVERT 8
144 class CPDF_Dest : public CFX_Object
148 CPDF_Dest(CPDF_Object* pObj = NULL)
153 operator CPDF_Object* () const
158 CFX_ByteString GetRemoteName();
160 int GetPageIndex(CPDF_Document* pDoc);
162 FX_DWORD GetPageObjNum();
166 FX_FLOAT GetParam(int index);
171 class CPDF_OCContext : public CFX_Object, public IPDF_OCContext
182 CPDF_OCContext(CPDF_Document *pDoc, UsageType eUsageType = View);
184 virtual ~CPDF_OCContext();
186 CPDF_Document* GetDocument() const
191 UsageType GetUsageType() const
196 FX_BOOL CheckOCGVisible(const CPDF_Dictionary *pOCGDict);
198 void ResetOCContext();
201 FX_BOOL LoadOCGStateFromConfig(FX_BSTR csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const;
203 FX_BOOL LoadOCGState(const CPDF_Dictionary *pOCGDict) const;
205 FX_BOOL GetOCGVisible(const CPDF_Dictionary *pOCGDict);
207 FX_BOOL GetOCGVE(CPDF_Array *pExpression, FX_BOOL bFromConfig, int nLevel = 0);
209 FX_BOOL LoadOCMDState(const CPDF_Dictionary *pOCMDDict, FX_BOOL bFromConfig);
211 CPDF_Document *m_pDocument;
213 UsageType m_eUsageType;
215 CFX_MapPtrTemplate<const CPDF_Dictionary*, void*> m_OCGStates;
217 class CPDF_LWinParam : public CFX_Object
221 CPDF_LWinParam(CPDF_Dictionary* pDict)
226 operator CPDF_Dictionary* () const
231 inline CFX_ByteString GetFileName()
233 return m_pDict->GetString("F");
237 inline CFX_ByteString GetDefaultDirectory()
239 return m_pDict->GetString("D");
243 inline CFX_ByteString GetOperation()
245 return m_pDict->GetString("O");
249 inline CFX_ByteString GetParameter()
251 return m_pDict->GetString("P");
254 CPDF_Dictionary* m_pDict;
256 class CPDF_ActionFields : public CFX_Object
260 CPDF_ActionFields(const CPDF_Action* pAction)
262 m_pAction = (CPDF_Action*)pAction;
265 operator CPDF_Action*() const
270 FX_DWORD GetFieldsCount() const;
272 void GetAllFields(CFX_PtrArray& fieldObjects) const;
274 CPDF_Object* GetField(FX_DWORD iIndex) const;
276 CPDF_Action* m_pAction;
279 #define PDFNAMED_NEXTPAGE 1
280 #define PDFNAMED_PREVPAGE 2
281 #define PDFNAMED_FIRSTPAGE 3
282 #define PDFNAMED_LASTPAGE 4
283 #define PDFJS_MAXLENGTH 64
284 class CPDF_Action : public CFX_Object
288 CPDF_Action(CPDF_Dictionary* pDict = NULL)
293 operator CPDF_Dictionary* () const
320 CFX_ByteString GetTypeName() const
322 return m_pDict->GetString("S");
325 ActionType GetType() const;
329 CPDF_Dest GetDest(CPDF_Document* pDoc) const;
335 CFX_WideString GetFilePath() const;
340 FX_BOOL GetNewWindow() const
342 return m_pDict->GetBoolean("NewWindow");
348 CPDF_LWinParam GetWinParam() const;
353 CFX_ByteString GetURI(CPDF_Document* pDoc) const;
358 FX_BOOL GetMouseMap() const
360 return m_pDict->GetBoolean("IsMap");
366 CPDF_ActionFields GetWidgets() const
374 FX_BOOL GetHideStatus() const
376 return m_pDict->GetBoolean("H", TRUE);
382 CFX_ByteString GetNamedAction() const
384 return m_pDict->GetString("N");
390 FX_DWORD GetFlags() const
392 return m_pDict->GetInteger("Flags");
398 CFX_WideString GetJavaScript() const;
403 CPDF_Dictionary* GetAnnot() const;
408 FX_INT32 GetOperationType() const;
413 CPDF_Stream* GetSoundStream() const
415 return m_pDict->GetStream("Sound");
418 FX_FLOAT GetVolume() const
420 return m_pDict->GetNumber("Volume");
423 FX_BOOL IsSynchronous() const
425 return m_pDict->GetBoolean("Synchronous");
428 FX_BOOL IsRepeat() const
430 return m_pDict->GetBoolean("Repeat");
433 FX_BOOL IsMixPlay() const
435 return m_pDict->GetBoolean("Mix");
441 FX_DWORD GetSubActionsCount() const;
443 CPDF_Action GetSubAction(FX_DWORD iIndex) const;
446 CPDF_Dictionary* m_pDict;
448 class CPDF_AAction : public CFX_Object
452 CPDF_AAction(CPDF_Dictionary* pDict = NULL)
457 operator CPDF_Dictionary*() const
486 FX_BOOL ActionExist(AActionType eType) const;
488 CPDF_Action GetAction(AActionType eType) const;
490 FX_POSITION GetStartPos() const;
492 CPDF_Action GetNextAction(FX_POSITION& pos, AActionType& eType) const;
494 CPDF_Dictionary* m_pDict;
496 class CPDF_DocJSActions : public CFX_Object
499 CPDF_DocJSActions(CPDF_Document* pDoc);
502 int CountJSActions() const;
504 CPDF_Action GetJSAction(int index, CFX_ByteString& csName) const;
506 CPDF_Action GetJSAction(const CFX_ByteString& csName) const;
508 int FindJSAction(const CFX_ByteString& csName) const;
511 CPDF_Document* GetDocument() const
518 CPDF_Document* m_pDocument;
520 class CPDF_FileSpec : public CFX_Object
526 CPDF_FileSpec(CPDF_Object *pObj)
531 operator CPDF_Object*() const
536 FX_BOOL IsURL() const;
538 FX_BOOL GetFileName(CFX_WideString &wsFileName) const;
540 CPDF_Stream* GetFileStream() const;
542 void SetFileName(FX_WSTR wsFileName, FX_BOOL bURL = FALSE);
547 class CPDF_LinkList : public CFX_Object
551 CPDF_LinkList(CPDF_Document* pDoc)
558 CPDF_Link GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y);
560 int CountLinks(CPDF_Page* pPage);
562 CPDF_Link GetLink(CPDF_Page* pPage, int index);
564 CPDF_Document* GetDocument() const
570 CPDF_Document* m_pDocument;
572 CFX_MapPtrToPtr m_PageMap;
574 CFX_PtrArray* GetPageLinks(CPDF_Page* pPage);
576 void LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList);
578 class CPDF_Link : public CFX_Object
582 CPDF_Link(CPDF_Dictionary* pDict = NULL)
587 operator CPDF_Dictionary*() const
592 CFX_FloatRect GetRect();
596 CPDF_Dest GetDest(CPDF_Document* pDoc);
598 CPDF_Action GetAction();
601 CPDF_Dictionary* m_pDict;
603 #define ANNOTFLAG_INVISIBLE 1
604 #define ANNOTFLAG_HIDDEN 2
605 #define ANNOTFLAG_PRINT 4
606 #define ANNOTFLAG_NOZOOM 8
607 #define ANNOTFLAG_NOROTATE 0x10
608 #define ANNOTFLAG_NOVIEW 0x20
609 #define ANNOTFLAG_READONLY 0x40
610 #define ANNOTFLAG_LOCKED 0x80
611 #define ANNOTFLAG_TOGGLENOVIEW 0x100
612 class CPDF_Annot : public CFX_PrivateData, public CFX_Object
616 CPDF_Annot(CPDF_Dictionary* pDict);
620 CPDF_Dictionary* m_pAnnotDict;
622 CFX_ByteString GetSubType() const;
624 FX_DWORD GetFlags() const
626 return m_pAnnotDict->GetInteger("F");
629 void GetRect(CFX_FloatRect& rect) const;
631 enum AppearanceMode {
637 FX_BOOL DrawAppearance(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,
638 AppearanceMode mode, const CPDF_RenderOptions* pOptions);
640 FX_BOOL DrawInContext(const CPDF_Page* pPage, const CPDF_RenderContext* pContext,
641 const CFX_AffineMatrix* pUser2Device, AppearanceMode mode);
643 void ClearCachedAP();
646 void DrawBorder(CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,
647 const CPDF_RenderOptions* pOptions);
649 CPDF_PageObject* GetBorder(FX_BOOL bPrint, const CPDF_RenderOptions* pOptions);
655 CPDF_Annot* GetIRTNote(int index);
658 CPDF_Form* GetAPForm(const CPDF_Page* pPage, AppearanceMode mode);
661 CFX_MapPtrToPtr m_APMap;
663 friend class CPDF_AnnotList;
665 CPDF_AnnotList* m_pList;
667 CPDF_Reference* NewAnnotRef();
669 class CPDF_AnnotList : public CFX_Object
673 CPDF_AnnotList(CPDF_Page* pPage);
677 void GetAnnotMatrix(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CFX_Matrix &matrix) const;
679 void GetAnnotRect(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CPDF_Rect &rtAnnot) const;
681 void DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,
682 CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
683 CPDF_RenderOptions* pOptions);
685 void DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,
686 FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
687 CPDF_RenderOptions* pOptions)
689 DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, NULL);
692 void DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,
693 FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
694 CPDF_RenderOptions* pOptions, FX_RECT *pClipRect)
696 DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, pClipRect);
699 void DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, CPDF_RenderContext* pContext,
700 FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_DWORD dwAnnotFlags,
701 CPDF_RenderOptions* pOptions, FX_RECT* pClipRect);
705 CPDF_Annot* GetAt(int index)
707 return (CPDF_Annot*)m_AnnotList.GetAt(index);
712 return m_AnnotList.GetSize();
715 int GetIndex(CPDF_Annot* pAnnot);
718 CPDF_Document* GetDocument() const
724 CFX_PtrArray m_AnnotList;
726 CPDF_Dictionary* m_pPageDict;
728 CPDF_Document* m_pDocument;
730 CFX_PtrArray m_Borders;
732 void DisplayPass(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,
733 CPDF_RenderContext* pContext, FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix,
734 FX_BOOL bWidget, CPDF_RenderOptions* pOptions, FX_RECT* clip_rect);
735 friend class CPDF_Annot;
737 #define COLORTYPE_TRANSPARENT 0
738 #define COLORTYPE_GRAY 1
739 #define COLORTYPE_RGB 2
740 #define COLORTYPE_CMYK 3
741 class CPDF_DefaultAppearance : public CFX_Object
745 CPDF_DefaultAppearance(const CFX_ByteString& csDA = "")
750 CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA)
752 m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
756 operator CFX_ByteString() const
761 const CPDF_DefaultAppearance& operator =(const CFX_ByteString& csDA)
767 const CPDF_DefaultAppearance& operator =(const CPDF_DefaultAppearance& cDA)
769 m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
777 CFX_ByteString GetFontString();
779 void GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize);
784 FX_BOOL HasColor(FX_BOOL bStrokingOperation = FALSE);
786 CFX_ByteString GetColorString(FX_BOOL bStrokingOperation = FALSE);
788 void GetColor(int& iColorType, FX_FLOAT fc[4], FX_BOOL bStrokingOperation = FALSE);
790 void GetColor(FX_ARGB& color, int& iColorType, FX_BOOL bStrokingOperation = FALSE);
795 FX_BOOL HasTextMatrix();
797 CFX_ByteString GetTextMatrixString();
799 CFX_AffineMatrix GetTextMatrix();
803 CFX_ByteString m_csDA;
805 #define FIELDTYPE_UNKNOWN 0
806 #define FIELDTYPE_PUSHBUTTON 1
807 #define FIELDTYPE_CHECKBOX 2
808 #define FIELDTYPE_RADIOBUTTON 3
809 #define FIELDTYPE_COMBOBOX 4
810 #define FIELDTYPE_LISTBOX 5
811 #define FIELDTYPE_TEXTFIELD 6
812 #define FIELDTYPE_SIGNATURE 7
813 class CPDF_InterForm : public CFX_PrivateData, public CFX_Object
817 CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bUpdateAP);
823 static void EnableUpdateAP(FX_BOOL bUpdateAP);
825 static FX_BOOL UpdatingAPEnabled();
828 static CFX_ByteString GenerateNewResourceName(const CPDF_Dictionary* pResDict, FX_LPCSTR csType, int iMinLen = 2, FX_LPCSTR csPrefix = "");
832 static CPDF_Font* AddSystemDefaultFont(const CPDF_Document* pDocument);
834 static CPDF_Font* AddSystemFont(const CPDF_Document* pDocument, CFX_ByteString csFontName, FX_BYTE iCharSet = 1);
836 static CPDF_Font* AddSystemFont(const CPDF_Document* pDocument, CFX_WideString csFontName, FX_BYTE iCharSet = 1);
838 static CPDF_Font* AddStandardFont(const CPDF_Document* pDocument, CFX_ByteString csFontName);
840 static CFX_ByteString GetNativeFont(FX_BYTE iCharSet, FX_LPVOID pLogFont = NULL);
842 static CFX_ByteString GetNativeFont(FX_LPVOID pLogFont = NULL);
844 static FX_BYTE GetNativeCharSet();
846 static CPDF_Font* AddNativeFont(FX_BYTE iCharSet, const CPDF_Document* pDocument);
848 static CPDF_Font* AddNativeFont(const CPDF_Document* pDocument);
853 FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType);
855 FX_BOOL ValidateFieldName(const CPDF_FormField* pField, CFX_WideString& csNewFieldName);
857 FX_BOOL ValidateFieldName(const CPDF_FormControl* pControl, CFX_WideString& csNewFieldName);
862 FX_DWORD CountFields(const CFX_WideString &csFieldName = L"");
864 CPDF_FormField* GetField(FX_DWORD index, const CFX_WideString &csFieldName = L"");
866 void GetAllFieldNames(CFX_WideStringArray& allFieldNames);
868 FX_BOOL IsValidFormField(const void* pField);
870 CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const;
875 FX_DWORD CountControls(CFX_WideString csFieldName = L"");
877 CPDF_FormControl* GetControl(FX_DWORD index, CFX_WideString csFieldName = L"");
879 FX_BOOL IsValidFormControl(const void* pControl);
881 int CountPageControls(CPDF_Page* pPage) const;
883 CPDF_FormControl* GetPageControl(CPDF_Page* pPage, int index) const;
886 CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y) const;
888 CPDF_FormControl* GetControlByDict(CPDF_Dictionary* pWidgetDict) const;
893 FX_DWORD CountInternalFields(const CFX_WideString& csFieldName = L"") const;
895 CPDF_Dictionary* GetInternalField(FX_DWORD index, const CFX_WideString& csFieldName = L"") const;
901 CPDF_Document* GetDocument() const
906 CPDF_Dictionary* GetFormDict() const
914 FX_BOOL NeedConstructAP();
916 void NeedConstructAP(FX_BOOL bNeedAP);
921 int CountFieldsInCalculationOrder();
923 CPDF_FormField* GetFieldInCalculationOrder(int index);
925 int FindFieldInCalculationOrder(const CPDF_FormField* pField);
930 FX_DWORD CountFormFonts();
932 CPDF_Font* GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag);
934 CPDF_Font* GetFormFont(CFX_ByteString csNameTag);
936 CPDF_Font* GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag);
938 CPDF_Font* GetNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag);
940 CPDF_Font* GetNativeFormFont(CFX_ByteString& csNameTag);
942 FX_BOOL FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
944 FX_BOOL FindFormFont(CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag);
946 inline FX_BOOL FindFormFont(CFX_WideString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag)
948 return FindFormFont(PDF_EncodeText(csFontName), pFont, csNameTag);
955 void AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
957 CPDF_Font* AddNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag);
959 CPDF_Font* AddNativeFormFont(CFX_ByteString& csNameTag);
961 void RemoveFormFont(const CPDF_Font* pFont);
963 void RemoveFormFont(CFX_ByteString csNameTag);
968 CPDF_DefaultAppearance GetDefaultAppearance();
970 CPDF_Font* GetDefaultFormFont();
974 int GetFormAlignment();
979 CPDF_FormField* CheckRequiredFields(const CFX_PtrArray *fields = NULL, FX_BOOL bIncludeOrExclude = TRUE) const;
981 CFDF_Document* ExportToFDF(FX_WSTR pdf_path, FX_BOOL bSimpleFileSpec = FALSE) const;
983 CFDF_Document* ExportToFDF(FX_WSTR pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bSimpleFileSpec = FALSE) const;
985 FX_BOOL ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE);
990 FX_BOOL ResetForm(const CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bNotify = FALSE);
992 FX_BOOL ResetForm(FX_BOOL bNotify = FALSE);
996 CPDF_FormNotify* GetFormNotify() const
998 return m_pFormNotify;
1001 void SetFormNotify(const CPDF_FormNotify* pNotify);
1004 int GetPageWithWidget(int iCurPage, FX_BOOL bNext);
1013 void ClearUpdatedFlag()
1019 FX_BOOL HasXFAForm() const;
1021 void FixPageFields(const CPDF_Page* pPage);
1024 static FX_BOOL m_bUpdateAP;
1026 void LoadField(CPDF_Dictionary* pFieldDict, int nLevel = 0);
1028 CPDF_Object* GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name);
1030 CPDF_FormField* AddTerminalField(const CPDF_Dictionary* pFieldDict);
1032 CPDF_FormControl* AddControl(const CPDF_FormField* pField, const CPDF_Dictionary* pWidgetDict);
1034 void FDF_ImportField(CPDF_Dictionary* pField, const CFX_WideString& parent_name, FX_BOOL bNotify = FALSE, int nLevel = 0);
1036 FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType, const CPDF_FormField* pExcludedField, const CPDF_FormControl* pExcludedControl);
1038 int CompareFieldName(const CFX_WideString& name1, const CFX_WideString& name2);
1040 int CompareFieldName(const CFX_ByteString& name1, const CFX_ByteString& name2);
1042 CPDF_Document* m_pDocument;
1044 FX_BOOL m_bGenerateAP;
1046 CPDF_Dictionary* m_pFormDict;
1048 CFX_MapPtrToPtr m_ControlMap;
1050 CFieldTree *m_pFieldTree;
1052 CFX_ByteString m_bsEncoding;
1054 CPDF_FormNotify* m_pFormNotify;
1057 friend class CPDF_FormControl;
1058 friend class CPDF_FormField;
1060 #define FORMFIELD_READONLY 0x01
1061 #define FORMFIELD_REQUIRED 0x02
1062 #define FORMFIELD_NOEXPORT 0x04
1063 #define FORMRADIO_NOTOGGLEOFF 0x100
1064 #define FORMRADIO_UNISON 0x200
1065 #define FORMTEXT_MULTILINE 0x100
1066 #define FORMTEXT_PASSWORD 0x200
1067 #define FORMTEXT_NOSCROLL 0x400
1068 #define FORMTEXT_COMB 0x800
1069 #define FORMCOMBO_EDIT 0x100
1070 #define FORMLIST_MULTISELECT 0x100
1071 class CPDF_FormField : public CFX_Object
1088 CFX_WideString GetFullName();
1100 CPDF_InterForm* GetInterForm() const
1105 CPDF_Dictionary* GetFieldDict() const
1110 void SetFieldDict(CPDF_Dictionary* pDict)
1115 FX_BOOL ResetField(FX_BOOL bNotify = FALSE);
1121 return m_ControlList.GetSize();
1124 CPDF_FormControl* GetControl(int index)
1126 return (CPDF_FormControl*)m_ControlList.GetAt(index);
1129 int GetControlIndex(const CPDF_FormControl* pControl);
1139 CPDF_AAction GetAdditionalAction();
1144 CFX_WideString GetAlternateName();
1149 CFX_WideString GetMappingName();
1154 FX_DWORD GetFieldFlags();
1159 CFX_ByteString GetDefaultStyle();
1164 CFX_WideString GetRichTextString();
1168 CFX_WideString GetValue();
1170 CFX_WideString GetDefaultValue();
1172 FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bNotify = FALSE);
1183 int CountSelectedItems();
1185 int GetSelectedIndex(int index);
1187 FX_BOOL ClearSelection(FX_BOOL bNotify = FALSE);
1189 FX_BOOL IsItemSelected(int index);
1191 FX_BOOL SetItemSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);
1193 FX_BOOL IsItemDefaultSelected(int index);
1195 int GetDefaultSelectedItem();
1202 CFX_WideString GetOptionLabel(int index);
1204 CFX_WideString GetOptionValue(int index);
1206 int FindOption(CFX_WideString csOptLabel);
1208 int FindOptionValue(FX_LPCWSTR csOptValue, int iStartIndex = 0);
1213 FX_BOOL CheckControl(int iControlIndex, FX_BOOL bChecked, FX_BOOL bNotify = FALSE);
1218 int GetTopVisibleIndex();
1223 int CountSelectedOptions();
1225 int GetSelectedOptionIndex(int index);
1227 FX_BOOL IsOptionSelected(int iOptIndex);
1229 FX_BOOL SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);
1231 FX_BOOL ClearSelectedOptions(FX_BOOL bNotify = FALSE);
1236 FX_FLOAT GetFontSize()
1241 CPDF_Font* GetFont()
1248 CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict);
1252 CPDF_FormField::Type m_Type;
1256 CPDF_InterForm* m_pForm;
1258 CPDF_Dictionary* m_pDict;
1260 CFX_PtrArray m_ControlList;
1261 friend class CPDF_InterForm;
1262 friend class CPDF_FormControl;
1266 CFX_WideString GetValue(FX_BOOL bDefault);
1268 FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);
1271 void SyncFieldFlags();
1273 int FindListSel(CPDF_String* str);
1275 CFX_WideString GetOptionText(int index, int sub_index);
1279 void UpdateAP(CPDF_FormControl* pControl);
1283 CFX_WideString GetCheckValue(FX_BOOL bDefault);
1285 FX_BOOL SetCheckValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);
1288 FX_FLOAT m_FontSize;
1292 CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name, int nLevel = 0);
1293 class CPDF_IconFit : public CFX_Object
1297 CPDF_IconFit(CPDF_Dictionary* pDict = NULL)
1302 operator CPDF_Dictionary*() const
1317 ScaleMethod GetScaleMethod();
1322 FX_BOOL IsProportionalScale();
1327 void GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom);
1332 FX_BOOL GetFittingBounds();
1335 CPDF_Dictionary* m_pDict;
1338 #define TEXTPOS_CAPTION 0
1339 #define TEXTPOS_ICON 1
1340 #define TEXTPOS_BELOW 2
1341 #define TEXTPOS_ABOVE 3
1342 #define TEXTPOS_RIGHT 4
1343 #define TEXTPOS_LEFT 5
1344 #define TEXTPOS_OVERLAID 6
1345 class CPDF_FormControl : public CFX_Object
1349 CPDF_FormField::Type GetType()
1351 return m_pField->GetType();
1354 CPDF_InterForm* GetInterForm() const
1359 CPDF_FormField* GetField() const
1364 CPDF_Dictionary* GetWidget() const
1366 return m_pWidgetDict;
1369 CFX_FloatRect GetRect();
1371 void DrawControl(CFX_RenderDevice* pDevice, CFX_AffineMatrix* pMatrix,
1372 CPDF_Page* pPage, CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions = NULL);
1376 CFX_ByteString GetCheckedAPState();
1378 CFX_WideString GetExportValue();
1380 FX_BOOL IsChecked();
1382 FX_BOOL IsDefaultChecked();
1387 enum HighlightingMode {
1395 HighlightingMode GetHighlightingMode();
1400 FX_BOOL HasMKEntry(CFX_ByteString csEntry);
1410 inline FX_ARGB GetBorderColor(int& iColorType)
1412 return GetColor(iColorType, "BC");
1415 inline FX_FLOAT GetOriginalBorderColor(int index)
1417 return GetOriginalColor(index, "BC");
1420 inline void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])
1422 GetOriginalColor(iColorType, fc, "BC");
1428 inline FX_ARGB GetBackgroundColor(int& iColorType)
1430 return GetColor(iColorType, "BG");
1433 inline FX_FLOAT GetOriginalBackgroundColor(int index)
1435 return GetOriginalColor(index, "BG");
1438 inline void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])
1440 GetOriginalColor(iColorType, fc, "BG");
1446 inline CFX_WideString GetNormalCaption()
1448 return GetCaption("CA");
1454 inline CFX_WideString GetRolloverCaption()
1456 return GetCaption("RC");
1462 inline CFX_WideString GetDownCaption()
1464 return GetCaption("AC");
1470 inline CPDF_Stream* GetNormalIcon()
1472 return GetIcon("I");
1478 inline CPDF_Stream* GetRolloverIcon()
1480 return GetIcon("RI");
1486 inline CPDF_Stream* GetDownIcon()
1488 return GetIcon("IX");
1494 CPDF_IconFit GetIconFit();
1499 int GetTextPosition();
1504 CPDF_Action GetAction();
1509 CPDF_AAction GetAdditionalAction();
1514 CPDF_DefaultAppearance GetDefaultAppearance();
1516 CPDF_Font* GetDefaultControlFont();
1521 int GetControlAlignment();
1525 CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict);
1527 CFX_ByteString GetOnStateName();
1529 void SetOnStateName(const CFX_ByteString& csOn);
1531 void CheckControl(FX_BOOL bChecked);
1533 FX_ARGB GetColor(int& iColorType, CFX_ByteString csEntry);
1535 FX_FLOAT GetOriginalColor(int index, CFX_ByteString csEntry);
1537 void GetOriginalColor(int& iColorType, FX_FLOAT fc[4], CFX_ByteString csEntry);
1539 CFX_WideString GetCaption(CFX_ByteString csEntry);
1541 CPDF_Stream* GetIcon(CFX_ByteString csEntry);
1543 CPDF_ApSettings GetMK(FX_BOOL bCreate);
1545 CPDF_InterForm* m_pForm;
1547 CPDF_FormField* m_pField;
1549 CPDF_Dictionary* m_pWidgetDict;
1550 friend class CPDF_InterForm;
1551 friend class CPDF_FormField;
1553 class CPDF_FormNotify : public CFX_Object
1557 virtual ~CPDF_FormNotify() {}
1559 virtual int BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue)
1564 virtual int AfterValueChange(const CPDF_FormField* pField)
1569 virtual int BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue)
1574 virtual int AfterSelectionChange(const CPDF_FormField* pField)
1579 virtual int AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray)
1584 virtual int BeforeFormReset(const CPDF_InterForm* pForm)
1589 virtual int AfterFormReset(const CPDF_InterForm* pForm)
1594 virtual int BeforeFormImportData(const CPDF_InterForm* pForm)
1599 virtual int AfterFormImportData(const CPDF_InterForm* pForm)
1604 FX_BOOL FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
1605 class CPDF_PageLabel : public CFX_Object
1609 CPDF_PageLabel(CPDF_Document* pDocument)
1611 m_pDocument = pDocument;
1615 CFX_WideString GetLabel(int nPage) const;
1617 FX_INT32 GetPageByLabel(FX_BSTR bsLabel) const;
1620 FX_INT32 GetPageByLabel(FX_WSTR wsLabel) const;
1623 CPDF_Document* m_pDocument;
1634 void LoadDoc(CPDF_Document *pDoc);
1637 FX_INT32 GetString(FX_BSTR bsItem, CFX_WideString &wsStr);
1639 CXML_Element* GetRoot() const;
1641 CXML_Element* GetRDF() const;
1646 class CPDF_ViewerPreferences
1650 CPDF_ViewerPreferences(CPDF_Document *pDoc);
1653 ~CPDF_ViewerPreferences();
1656 FX_BOOL IsDirectionR2L() const;
1658 FX_BOOL PrintScaling() const;
1660 FX_INT32 NumCopies() const;
1662 CPDF_Array* PrintPageRange() const;
1664 CFX_ByteString Duplex() const;
1667 CPDF_Document* m_pDoc;
1669 class CPDF_ApSettings : public CFX_Object
1673 CPDF_ApSettings(CPDF_Dictionary* pDict = NULL)
1678 operator CPDF_Dictionary* () const
1683 FX_BOOL HasMKEntry(FX_BSTR csEntry);
1692 inline FX_ARGB GetBorderColor(int& iColorType)
1694 return GetColor(iColorType, FX_BSTRC("BC"));
1697 inline FX_FLOAT GetOriginalBorderColor(int index)
1699 return GetOriginalColor(index, FX_BSTRC("BC"));
1702 inline void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])
1704 GetOriginalColor(iColorType, fc, FX_BSTRC("BC"));
1710 inline FX_ARGB GetBackgroundColor(int& iColorType)
1712 return GetColor(iColorType, FX_BSTRC("BG"));
1715 inline FX_FLOAT GetOriginalBackgroundColor(int index)
1717 return GetOriginalColor(index, FX_BSTRC("BG"));
1720 inline void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])
1722 GetOriginalColor(iColorType, fc, FX_BSTRC("BG"));
1728 inline CFX_WideString GetNormalCaption()
1730 return GetCaption(FX_BSTRC("CA"));
1736 inline CFX_WideString GetRolloverCaption()
1738 return GetCaption(FX_BSTRC("RC"));
1744 inline CFX_WideString GetDownCaption()
1746 return GetCaption(FX_BSTRC("AC"));
1752 inline CPDF_Stream* GetNormalIcon()
1754 return GetIcon(FX_BSTRC("I"));
1760 inline CPDF_Stream* GetRolloverIcon()
1762 return GetIcon(FX_BSTRC("RI"));
1768 inline CPDF_Stream* GetDownIcon()
1770 return GetIcon(FX_BSTRC("IX"));
1776 CPDF_IconFit GetIconFit();
1781 int GetTextPosition();
1783 CPDF_Dictionary* m_pDict;
1786 FX_ARGB GetColor(int& iColorType, FX_BSTR csEntry);
1788 FX_FLOAT GetOriginalColor(int index, FX_BSTR csEntry);
1790 void GetOriginalColor(int& iColorType, FX_FLOAT fc[4], FX_BSTR csEntry);
1792 CFX_WideString GetCaption(FX_BSTR csEntry);
1794 CPDF_Stream* GetIcon(FX_BSTR csEntry);
1795 friend class CPDF_FormControl;