Home | History | Annotate | Download | only in fpdfdoc
      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.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef CORE_INCLUDE_FPDFDOC_FPDF_DOC_H_
      8 #define CORE_INCLUDE_FPDFDOC_FPDF_DOC_H_
      9 
     10 #include "../fpdfapi/fpdf_parser.h"
     11 #include "../fpdfapi/fpdf_render.h"
     12 
     13 class CPDF_Action;
     14 class CPDF_Annot;
     15 class CPDF_AnnotList;
     16 class CPDF_Bookmark;
     17 class CPDF_BookmarkTree;
     18 class CPDF_Dest;
     19 class CPDF_Link;
     20 class CPDF_LinkList;
     21 class CPDF_Metadata;
     22 class CPDF_NameTree;
     23 class CPDF_NumberTree;
     24 class CPDF_TextObject;
     25 class CPDF_ViewerPreferences;
     26 class CPDF_Page;
     27 class CPDF_RenderOptions;
     28 class CXML_Element;
     29 class CPDF_OCContext;
     30 class CPDF_DocJSActions;
     31 class CPDF_ActionFields;
     32 class CPDF_AAction;
     33 class CPDF_FileSpec;
     34 class CPDF_IconFit;
     35 class CPDF_DefaultAppearance;
     36 class CPDF_InterForm;
     37 class CPDF_FormField;
     38 class CPDF_FormNotify;
     39 class CPDF_FormControl;
     40 class CPDF_LWinParam;
     41 class CFieldTree;
     42 class CPDF_ApSettings;
     43 class CPDF_NameTree
     44 {
     45 public:
     46 
     47     CPDF_NameTree(CPDF_Dictionary* pRoot)
     48     {
     49         m_pRoot = pRoot;
     50     }
     51 
     52     CPDF_NameTree(CPDF_Document* pDoc, FX_BSTR category);
     53 
     54     CPDF_Object*		LookupValue(int nIndex, CFX_ByteString& csName) const;
     55 
     56     CPDF_Object*		LookupValue(const CFX_ByteString& csName) const;
     57 
     58     CPDF_Array*			LookupNamedDest(CPDF_Document* pDoc, FX_BSTR sName);
     59 
     60     int					GetIndex(const CFX_ByteString& csName) const;
     61 
     62     int					GetCount() const;
     63 
     64 
     65     CPDF_Dictionary*	GetRoot() const
     66     {
     67         return m_pRoot;
     68     }
     69 
     70 protected:
     71 
     72     CPDF_Dictionary*		m_pRoot;
     73 };
     74 class CPDF_BookmarkTree
     75 {
     76 public:
     77     CPDF_BookmarkTree(CPDF_Document* pDoc) : m_pDocument(pDoc) {}
     78 
     79     CPDF_Bookmark		GetFirstChild(const CPDF_Bookmark& parent) const;
     80 
     81     CPDF_Bookmark		GetNextSibling(const CPDF_Bookmark& bookmark) const;
     82 
     83     CPDF_Document*		GetDocument() const { return m_pDocument; }
     84 
     85 protected:
     86     CPDF_Document*		m_pDocument;
     87 };
     88 #define PDFBOOKMARK_ITALIC			1
     89 #define PDFBOOKMARK_BOLD			2
     90 class CPDF_Bookmark
     91 {
     92 public:
     93 
     94     CPDF_Bookmark() : m_pDict(NULL) {}
     95 
     96     explicit CPDF_Bookmark(CPDF_Dictionary* pDict) : m_pDict(pDict) {}
     97 
     98     CPDF_Dictionary* GetDict() const { return m_pDict; }
     99 
    100     operator bool() const { return m_pDict != NULL; }
    101 
    102     FX_DWORD			GetColorRef() const;
    103 
    104     FX_DWORD			GetFontStyle() const;
    105 
    106     CFX_WideString		GetTitle() const;
    107 
    108     CPDF_Dest			GetDest(CPDF_Document* pDocument) const;
    109 
    110     CPDF_Action			GetAction() const;
    111 
    112     CPDF_Dictionary*	m_pDict;
    113 };
    114 #define PDFZOOM_XYZ					1
    115 #define PDFZOOM_FITPAGE				2
    116 #define PDFZOOM_FITHORZ				3
    117 #define PDFZOOM_FITVERT				4
    118 #define PDFZOOM_FITRECT				5
    119 #define PDFZOOM_FITBBOX				6
    120 #define PDFZOOM_FITBHORZ			7
    121 #define PDFZOOM_FITBVERT			8
    122 class CPDF_Dest
    123 {
    124 public:
    125     CPDF_Dest() : m_pObj(nullptr) { }
    126     explicit CPDF_Dest(CPDF_Object* pObj) : m_pObj(pObj) { }
    127 
    128     operator bool () const { return m_pObj != NULL; }
    129     CPDF_Object* GetObject() const { return m_pObj; }
    130 
    131     CFX_ByteString		GetRemoteName();
    132     int					GetPageIndex(CPDF_Document* pDoc);
    133     FX_DWORD			GetPageObjNum();
    134     int					GetZoomMode();
    135     FX_FLOAT			GetParam(int index);
    136 
    137 protected:
    138     CPDF_Object*		m_pObj;
    139 };
    140 class CPDF_OCContext : public IPDF_OCContext
    141 {
    142 public:
    143 
    144     enum UsageType {
    145         View = 0,
    146         Design,
    147         Print,
    148         Export
    149     };
    150 
    151     CPDF_OCContext(CPDF_Document *pDoc, UsageType eUsageType = View);
    152 
    153     virtual ~CPDF_OCContext();
    154 
    155     CPDF_Document*	GetDocument() const
    156     {
    157         return m_pDocument;
    158     }
    159 
    160     UsageType		GetUsageType() const
    161     {
    162         return m_eUsageType;
    163     }
    164 
    165     FX_BOOL			CheckOCGVisible(const CPDF_Dictionary *pOCGDict);
    166 
    167     void			ResetOCContext();
    168 protected:
    169 
    170     FX_BOOL			LoadOCGStateFromConfig(FX_BSTR csConfig, const CPDF_Dictionary *pOCGDict, FX_BOOL &bValidConfig) const;
    171 
    172     FX_BOOL			LoadOCGState(const CPDF_Dictionary *pOCGDict) const;
    173 
    174     FX_BOOL			GetOCGVisible(const CPDF_Dictionary *pOCGDict);
    175 
    176     FX_BOOL			GetOCGVE(CPDF_Array *pExpression, FX_BOOL bFromConfig, int nLevel = 0);
    177 
    178     FX_BOOL			LoadOCMDState(const CPDF_Dictionary *pOCMDDict, FX_BOOL bFromConfig);
    179 
    180     CPDF_Document		*m_pDocument;
    181 
    182     UsageType			m_eUsageType;
    183 
    184     CFX_MapPtrTemplate<const CPDF_Dictionary*, void*>	m_OCGStates;
    185 };
    186 class CPDF_LWinParam
    187 {
    188 public:
    189 
    190     CPDF_LWinParam(CPDF_Dictionary* pDict)
    191     {
    192         m_pDict = pDict;
    193     }
    194 
    195     operator CPDF_Dictionary* () const
    196     {
    197         return m_pDict;
    198     }
    199 
    200     inline CFX_ByteString	GetFileName()
    201     {
    202         return m_pDict->GetString("F");
    203     }
    204 
    205 
    206     inline CFX_ByteString	GetDefaultDirectory()
    207     {
    208         return m_pDict->GetString("D");
    209     }
    210 
    211 
    212     inline CFX_ByteString	GetOperation()
    213     {
    214         return m_pDict->GetString("O");
    215     }
    216 
    217 
    218     inline CFX_ByteString	GetParameter()
    219     {
    220         return m_pDict->GetString("P");
    221     }
    222 
    223     CPDF_Dictionary*		m_pDict;
    224 };
    225 class CPDF_ActionFields
    226 {
    227 public:
    228 
    229     CPDF_ActionFields(const CPDF_Action* pAction)
    230     {
    231         m_pAction = (CPDF_Action*)pAction;
    232     }
    233 
    234     operator CPDF_Action*() const
    235     {
    236         return m_pAction;
    237     }
    238 
    239     FX_DWORD				GetFieldsCount() const;
    240 
    241     void					GetAllFields(CFX_PtrArray& fieldObjects) const;
    242 
    243     CPDF_Object*			GetField(FX_DWORD iIndex) const;
    244 
    245     CPDF_Action*			m_pAction;
    246 };
    247 
    248 #define PDFNAMED_NEXTPAGE		1
    249 #define PDFNAMED_PREVPAGE		2
    250 #define PDFNAMED_FIRSTPAGE		3
    251 #define PDFNAMED_LASTPAGE		4
    252 #define PDFJS_MAXLENGTH			64
    253 class CPDF_Action
    254 {
    255 public:
    256     enum ActionType {
    257         Unknown = 0,
    258         GoTo,
    259         GoToR,
    260         GoToE,
    261         Launch,
    262         Thread,
    263         URI,
    264         Sound,
    265         Movie,
    266         Hide,
    267         Named,
    268         SubmitForm,
    269         ResetForm,
    270         ImportData,
    271         JavaScript,
    272         SetOCGState,
    273         Rendition,
    274         Trans,
    275         GoTo3DView
    276     };
    277 
    278     CPDF_Action() : m_pDict(nullptr) { }
    279     explicit CPDF_Action(CPDF_Dictionary* pDict) : m_pDict(pDict) { }
    280 
    281     operator bool () const { return m_pDict != NULL; }
    282 
    283     CPDF_Dictionary* GetDict() const { return m_pDict; }
    284 
    285     CFX_ByteString		GetTypeName() const
    286     {
    287         return m_pDict->GetString("S");
    288     }
    289 
    290     ActionType			GetType() const;
    291 
    292 
    293 
    294     CPDF_Dest			GetDest(CPDF_Document* pDoc) const;
    295 
    296 
    297 
    298 
    299 
    300     CFX_WideString		GetFilePath() const;
    301 
    302 
    303 
    304 
    305     FX_BOOL				GetNewWindow() const
    306     {
    307         return m_pDict->GetBoolean("NewWindow");
    308     }
    309 
    310 
    311 
    312 
    313     CPDF_LWinParam		GetWinParam() const;
    314 
    315 
    316 
    317 
    318     CFX_ByteString		GetURI(CPDF_Document* pDoc) const;
    319 
    320 
    321 
    322 
    323     FX_BOOL				GetMouseMap() const
    324     {
    325         return m_pDict->GetBoolean("IsMap");
    326     }
    327 
    328 
    329 
    330 
    331     CPDF_ActionFields	GetWidgets() const
    332     {
    333         return this;
    334     }
    335 
    336 
    337 
    338 
    339     FX_BOOL				GetHideStatus() const
    340     {
    341         return m_pDict->GetBoolean("H", TRUE);
    342     }
    343 
    344 
    345 
    346 
    347     CFX_ByteString		GetNamedAction() const
    348     {
    349         return m_pDict->GetString("N");
    350     }
    351 
    352 
    353 
    354 
    355     FX_DWORD			GetFlags() const
    356     {
    357         return m_pDict->GetInteger("Flags");
    358     }
    359 
    360 
    361 
    362 
    363     CFX_WideString		GetJavaScript() const;
    364 
    365 
    366 
    367 
    368     CPDF_Dictionary*	GetAnnot() const;
    369 
    370 
    371 
    372 
    373     FX_INT32			GetOperationType() const;
    374 
    375 
    376 
    377 
    378     CPDF_Stream*		GetSoundStream() const
    379     {
    380         return m_pDict->GetStream("Sound");
    381     }
    382 
    383     FX_FLOAT			GetVolume() const
    384     {
    385         return m_pDict->GetNumber("Volume");
    386     }
    387 
    388     FX_BOOL				IsSynchronous() const
    389     {
    390         return m_pDict->GetBoolean("Synchronous");
    391     }
    392 
    393     FX_BOOL				IsRepeat() const
    394     {
    395         return m_pDict->GetBoolean("Repeat");
    396     }
    397 
    398     FX_BOOL				IsMixPlay() const
    399     {
    400         return m_pDict->GetBoolean("Mix");
    401     }
    402 
    403 
    404 
    405 
    406     FX_DWORD			GetSubActionsCount() const;
    407 
    408     CPDF_Action			GetSubAction(FX_DWORD iIndex) const;
    409 
    410 protected:
    411     CPDF_Dictionary*	m_pDict;
    412 };
    413 class CPDF_AAction
    414 {
    415 public:
    416 
    417     CPDF_AAction(CPDF_Dictionary* pDict = NULL)
    418     {
    419         m_pDict = pDict;
    420     }
    421 
    422     operator CPDF_Dictionary*()	const
    423     {
    424         return m_pDict;
    425     }
    426 
    427     enum AActionType {
    428         CursorEnter = 0,
    429         CursorExit,
    430         ButtonDown,
    431         ButtonUp,
    432         GetFocus,
    433         LoseFocus,
    434         PageOpen,
    435         PageClose,
    436         PageVisible,
    437         PageInvisible,
    438         OpenPage,
    439         ClosePage,
    440         KeyStroke,
    441         Format,
    442         Validate,
    443         Calculate,
    444         CloseDocument,
    445         SaveDocument,
    446         DocumentSaved,
    447         PrintDocument,
    448         DocumentPrinted
    449     };
    450 
    451     FX_BOOL				ActionExist(AActionType eType) const;
    452 
    453     CPDF_Action			GetAction(AActionType eType) const;
    454 
    455     FX_POSITION			GetStartPos() const;
    456 
    457     CPDF_Action			GetNextAction(FX_POSITION& pos, AActionType& eType) const;
    458 
    459     CPDF_Dictionary*	m_pDict;
    460 };
    461 class CPDF_DocJSActions
    462 {
    463 public:
    464     CPDF_DocJSActions(CPDF_Document* pDoc);
    465 
    466 
    467     int					CountJSActions() const;
    468 
    469     CPDF_Action			GetJSAction(int index, CFX_ByteString& csName) const;
    470 
    471     CPDF_Action			GetJSAction(const CFX_ByteString& csName) const;
    472 
    473     int					FindJSAction(const CFX_ByteString& csName) const;
    474 
    475 
    476     CPDF_Document*		GetDocument() const
    477     {
    478         return m_pDocument;
    479     }
    480 
    481 protected:
    482 
    483     CPDF_Document*		m_pDocument;
    484 };
    485 class CPDF_FileSpec
    486 {
    487 public:
    488 
    489     CPDF_FileSpec();
    490 
    491     CPDF_FileSpec(CPDF_Object *pObj)
    492     {
    493         m_pObj = pObj;
    494     }
    495 
    496     operator CPDF_Object*() const
    497     {
    498         return m_pObj;
    499     }
    500 
    501     FX_BOOL			IsURL() const;
    502 
    503     FX_BOOL			GetFileName(CFX_WideString &wsFileName) const;
    504 
    505     CPDF_Stream*	GetFileStream() const;
    506 
    507     void			SetFileName(FX_WSTR wsFileName, FX_BOOL bURL = FALSE);
    508 protected:
    509 
    510     CPDF_Object		*m_pObj;
    511 };
    512 class CPDF_LinkList
    513 {
    514 public:
    515 
    516     CPDF_LinkList(CPDF_Document* pDoc)
    517     {
    518         m_pDocument = pDoc;
    519     }
    520 
    521     ~CPDF_LinkList();
    522 
    523     CPDF_Link			GetLinkAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y);
    524 
    525     int					CountLinks(CPDF_Page* pPage);
    526 
    527     CPDF_Link			GetLink(CPDF_Page* pPage, int index);
    528 
    529     CPDF_Document*		GetDocument() const
    530     {
    531         return m_pDocument;
    532     }
    533 protected:
    534 
    535     CPDF_Document*		m_pDocument;
    536 
    537     CFX_MapPtrToPtr		m_PageMap;
    538 
    539     CFX_PtrArray*		GetPageLinks(CPDF_Page* pPage);
    540 
    541     void				LoadPageLinks(CPDF_Page* pPage, CFX_PtrArray* pList);
    542 };
    543 class CPDF_Link
    544 {
    545 public:
    546     CPDF_Link() : m_pDict(nullptr) { }
    547     explicit CPDF_Link(CPDF_Dictionary* pDict) : m_pDict(pDict) { }
    548 
    549     CPDF_Dictionary* GetDict() const { return m_pDict; }
    550 
    551     CFX_FloatRect		GetRect();
    552     CPDF_Dest			GetDest(CPDF_Document* pDoc);
    553     CPDF_Action			GetAction();
    554 
    555 protected:
    556     CPDF_Dictionary*	m_pDict;
    557 };
    558 #define ANNOTFLAG_INVISIBLE			1
    559 #define ANNOTFLAG_HIDDEN			2
    560 #define ANNOTFLAG_PRINT				4
    561 #define ANNOTFLAG_NOZOOM			8
    562 #define ANNOTFLAG_NOROTATE			0x10
    563 #define ANNOTFLAG_NOVIEW			0x20
    564 #define ANNOTFLAG_READONLY			0x40
    565 #define ANNOTFLAG_LOCKED			0x80
    566 #define ANNOTFLAG_TOGGLENOVIEW		0x100
    567 class CPDF_Annot : public CFX_PrivateData
    568 {
    569 public:
    570 
    571     CPDF_Annot(CPDF_Dictionary* pDict);
    572 
    573     ~CPDF_Annot();
    574 
    575     CPDF_Dictionary*	m_pAnnotDict;
    576 
    577     CFX_ByteString		GetSubType() const;
    578 
    579     FX_DWORD			GetFlags() const
    580     {
    581         return m_pAnnotDict->GetInteger("F");
    582     }
    583 
    584     void				GetRect(CFX_FloatRect& rect) const;
    585 
    586     enum AppearanceMode	{
    587         Normal,
    588         Rollover,
    589         Down
    590     };
    591 
    592     FX_BOOL				DrawAppearance(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,
    593                                        AppearanceMode mode, const CPDF_RenderOptions* pOptions);
    594 
    595     FX_BOOL				DrawInContext(const CPDF_Page* pPage, const CPDF_RenderContext* pContext,
    596                                       const CFX_AffineMatrix* pUser2Device, AppearanceMode mode);
    597 
    598     void				ClearCachedAP();
    599 
    600 
    601     void				DrawBorder(CFX_RenderDevice* pDevice, const CFX_AffineMatrix* pUser2Device,
    602                                    const CPDF_RenderOptions* pOptions);
    603 
    604     CPDF_PageObject*	GetBorder(FX_BOOL bPrint, const CPDF_RenderOptions* pOptions);
    605 
    606 
    607 
    608     int					CountIRTNotes();
    609 
    610     CPDF_Annot*			GetIRTNote(int index);
    611 
    612 
    613     CPDF_Form*			GetAPForm(const CPDF_Page* pPage, AppearanceMode mode);
    614 private:
    615 
    616     CFX_MapPtrToPtr		m_APMap;
    617 protected:
    618     friend class		CPDF_AnnotList;
    619 
    620     CPDF_AnnotList*		m_pList;
    621 
    622     CPDF_Reference*		NewAnnotRef();
    623 };
    624 class CPDF_AnnotList
    625 {
    626 public:
    627 
    628     CPDF_AnnotList(CPDF_Page* pPage);
    629 
    630     ~CPDF_AnnotList();
    631 
    632     void	GetAnnotMatrix(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CFX_Matrix &matrix) const;
    633 
    634     void	GetAnnotRect(const CPDF_Dictionary* pAnnotDict, const CFX_Matrix* pUser2Device, CPDF_Rect &rtAnnot) const;
    635 
    636     void				DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,
    637                                       CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
    638                                       CPDF_RenderOptions* pOptions);
    639 
    640     void				DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,
    641                                       FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
    642                                       CPDF_RenderOptions* pOptions)
    643     {
    644         DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, NULL);
    645     }
    646 
    647     void				DisplayAnnots(const CPDF_Page* pPage, CPDF_RenderContext* pContext,
    648                                       FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_BOOL bShowWidget,
    649                                       CPDF_RenderOptions* pOptions, FX_RECT *pClipRect)
    650     {
    651         DisplayAnnots(pPage, NULL, pContext, bPrinting, pMatrix, bShowWidget ? 3 : 1, pOptions, pClipRect);
    652     }
    653 
    654     void				DisplayAnnots(const CPDF_Page* pPage, CFX_RenderDevice* pDevice, CPDF_RenderContext* pContext,
    655                                       FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix, FX_DWORD dwAnnotFlags,
    656                                       CPDF_RenderOptions* pOptions, FX_RECT* pClipRect);
    657 
    658 
    659 
    660     CPDF_Annot*			GetAt(int index)
    661     {
    662         return (CPDF_Annot*)m_AnnotList.GetAt(index);
    663     }
    664 
    665     int					Count()
    666     {
    667         return m_AnnotList.GetSize();
    668     }
    669 
    670     int					GetIndex(CPDF_Annot* pAnnot);
    671 
    672 
    673     CPDF_Document*		GetDocument() const
    674     {
    675         return m_pDocument;
    676     }
    677 protected:
    678 
    679     CFX_PtrArray		m_AnnotList;
    680 
    681     CPDF_Dictionary*	m_pPageDict;
    682 
    683     CPDF_Document*		m_pDocument;
    684 
    685     CFX_PtrArray		m_Borders;
    686 
    687     void				DisplayPass(const CPDF_Page* pPage, CFX_RenderDevice* pDevice,
    688                                     CPDF_RenderContext* pContext, FX_BOOL bPrinting, CFX_AffineMatrix* pMatrix,
    689                                     FX_BOOL bWidget, CPDF_RenderOptions* pOptions, FX_RECT* clip_rect);
    690     friend class		CPDF_Annot;
    691 };
    692 #define COLORTYPE_TRANSPARENT	0
    693 #define COLORTYPE_GRAY			1
    694 #define COLORTYPE_RGB			2
    695 #define COLORTYPE_CMYK			3
    696 class CPDF_DefaultAppearance
    697 {
    698 public:
    699 
    700     CPDF_DefaultAppearance(const CFX_ByteString& csDA = "")
    701     {
    702         m_csDA = csDA;
    703     }
    704 
    705     CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA)
    706     {
    707         m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
    708     }
    709 
    710 
    711     operator CFX_ByteString() const
    712     {
    713         return m_csDA;
    714     }
    715 
    716     const CPDF_DefaultAppearance& operator =(const CFX_ByteString& csDA)
    717     {
    718         m_csDA = csDA;
    719         return *this;
    720     }
    721 
    722     const CPDF_DefaultAppearance& operator =(const CPDF_DefaultAppearance& cDA)
    723     {
    724         m_csDA = (CFX_ByteString)(CPDF_DefaultAppearance&)cDA;
    725         return *this;
    726     }
    727 
    728 
    729 
    730     FX_BOOL				HasFont();
    731 
    732     CFX_ByteString		GetFontString();
    733 
    734     void				GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize);
    735 
    736 
    737 
    738 
    739     FX_BOOL				HasColor(FX_BOOL bStrokingOperation = FALSE);
    740 
    741     CFX_ByteString		GetColorString(FX_BOOL bStrokingOperation = FALSE);
    742 
    743     void				GetColor(int& iColorType, FX_FLOAT fc[4], FX_BOOL bStrokingOperation = FALSE);
    744 
    745     void				GetColor(FX_ARGB& color, int& iColorType, FX_BOOL bStrokingOperation = FALSE);
    746 
    747 
    748 
    749 
    750     FX_BOOL				HasTextMatrix();
    751 
    752     CFX_ByteString		GetTextMatrixString();
    753 
    754     CFX_AffineMatrix	GetTextMatrix();
    755 
    756 protected:
    757 
    758     CFX_ByteString		m_csDA;
    759 };
    760 #define FIELDTYPE_UNKNOWN			0
    761 #define FIELDTYPE_PUSHBUTTON		1
    762 #define FIELDTYPE_CHECKBOX			2
    763 #define FIELDTYPE_RADIOBUTTON		3
    764 #define FIELDTYPE_COMBOBOX			4
    765 #define FIELDTYPE_LISTBOX			5
    766 #define FIELDTYPE_TEXTFIELD			6
    767 #define FIELDTYPE_SIGNATURE			7
    768 class CPDF_InterForm : public CFX_PrivateData
    769 {
    770 public:
    771 
    772     CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bUpdateAP);
    773 
    774     ~CPDF_InterForm();
    775 
    776 
    777 
    778     static void				EnableUpdateAP(FX_BOOL bUpdateAP);
    779 
    780     static FX_BOOL			UpdatingAPEnabled();
    781 
    782 
    783     static CFX_ByteString	GenerateNewResourceName(const CPDF_Dictionary* pResDict, FX_LPCSTR csType, int iMinLen = 2, FX_LPCSTR csPrefix = "");
    784 
    785 
    786 
    787     static CPDF_Font*		AddSystemDefaultFont(const CPDF_Document* pDocument);
    788 
    789     static CPDF_Font*		AddSystemFont(const CPDF_Document* pDocument, CFX_ByteString csFontName, FX_BYTE iCharSet = 1);
    790 
    791     static CPDF_Font*		AddSystemFont(const CPDF_Document* pDocument, CFX_WideString csFontName, FX_BYTE iCharSet = 1);
    792 
    793     static CPDF_Font*		AddStandardFont(const CPDF_Document* pDocument, CFX_ByteString csFontName);
    794 
    795     static CFX_ByteString	GetNativeFont(FX_BYTE iCharSet, FX_LPVOID pLogFont = NULL);
    796 
    797     static CFX_ByteString	GetNativeFont(FX_LPVOID pLogFont = NULL);
    798 
    799     static FX_BYTE			GetNativeCharSet();
    800 
    801     static CPDF_Font*		AddNativeFont(FX_BYTE iCharSet, const CPDF_Document* pDocument);
    802 
    803     static CPDF_Font*		AddNativeFont(const CPDF_Document* pDocument);
    804 
    805 
    806 
    807 
    808     FX_BOOL					ValidateFieldName(CFX_WideString& csNewFieldName, int iType);
    809 
    810     FX_BOOL					ValidateFieldName(const CPDF_FormField* pField, CFX_WideString& csNewFieldName);
    811 
    812     FX_BOOL					ValidateFieldName(const CPDF_FormControl* pControl, CFX_WideString& csNewFieldName);
    813 
    814 
    815 
    816 
    817     FX_DWORD				CountFields(const CFX_WideString &csFieldName = L"");
    818 
    819     CPDF_FormField*			GetField(FX_DWORD index, const CFX_WideString &csFieldName = L"");
    820 
    821     void					GetAllFieldNames(CFX_WideStringArray& allFieldNames);
    822 
    823     FX_BOOL					IsValidFormField(const void* pField);
    824 
    825     CPDF_FormField*			GetFieldByDict(CPDF_Dictionary* pFieldDict) const;
    826 
    827 
    828 
    829 
    830     FX_DWORD				CountControls(CFX_WideString csFieldName = L"");
    831 
    832     CPDF_FormControl*		GetControl(FX_DWORD index, CFX_WideString csFieldName = L"");
    833 
    834     FX_BOOL					IsValidFormControl(const void* pControl);
    835 
    836     int						CountPageControls(CPDF_Page* pPage) const;
    837 
    838     CPDF_FormControl*		GetPageControl(CPDF_Page* pPage, int index) const;
    839 
    840 
    841     CPDF_FormControl*		GetControlAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y) const;
    842 
    843     CPDF_FormControl*		GetControlByDict(CPDF_Dictionary* pWidgetDict) const;
    844 
    845 
    846 
    847 
    848     FX_DWORD				CountInternalFields(const CFX_WideString& csFieldName = L"") const;
    849 
    850     CPDF_Dictionary*		GetInternalField(FX_DWORD index, const CFX_WideString& csFieldName = L"") const;
    851 
    852 
    853 
    854 
    855 
    856     CPDF_Document*			GetDocument() const
    857     {
    858         return m_pDocument;
    859     }
    860 
    861     CPDF_Dictionary*		GetFormDict() const
    862     {
    863         return m_pFormDict;
    864     }
    865 
    866 
    867 
    868 
    869     FX_BOOL					NeedConstructAP();
    870 
    871     void					NeedConstructAP(FX_BOOL bNeedAP);
    872 
    873 
    874 
    875 
    876     int						CountFieldsInCalculationOrder();
    877 
    878     CPDF_FormField*			GetFieldInCalculationOrder(int index);
    879 
    880     int						FindFieldInCalculationOrder(const CPDF_FormField* pField);
    881 
    882 
    883 
    884 
    885     FX_DWORD				CountFormFonts();
    886 
    887     CPDF_Font*				GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag);
    888 
    889     CPDF_Font*				GetFormFont(CFX_ByteString csNameTag);
    890 
    891     CPDF_Font*				GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag);
    892 
    893     CPDF_Font*				GetNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag);
    894 
    895     CPDF_Font*				GetNativeFormFont(CFX_ByteString& csNameTag);
    896 
    897     FX_BOOL					FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
    898 
    899     FX_BOOL					FindFormFont(CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag);
    900 
    901     inline FX_BOOL			FindFormFont(CFX_WideString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag)
    902     {
    903         return FindFormFont(PDF_EncodeText(csFontName), pFont, csNameTag);
    904     }
    905 
    906 
    907 
    908 
    909 
    910     void					AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag);
    911 
    912     CPDF_Font*				AddNativeFormFont(FX_BYTE iCharSet, CFX_ByteString& csNameTag);
    913 
    914     CPDF_Font*				AddNativeFormFont(CFX_ByteString& csNameTag);
    915 
    916     void					RemoveFormFont(const CPDF_Font* pFont);
    917 
    918     void					RemoveFormFont(CFX_ByteString csNameTag);
    919 
    920 
    921 
    922 
    923     CPDF_DefaultAppearance	GetDefaultAppearance();
    924 
    925     CPDF_Font*				GetDefaultFormFont();
    926 
    927 
    928 
    929     int						GetFormAlignment();
    930 
    931 
    932 
    933 
    934     CPDF_FormField*			CheckRequiredFields(const CFX_PtrArray *fields = NULL, FX_BOOL bIncludeOrExclude = TRUE) const;
    935 
    936     CFDF_Document* 			ExportToFDF(FX_WSTR pdf_path, FX_BOOL bSimpleFileSpec = FALSE) const;
    937 
    938     CFDF_Document*			ExportToFDF(FX_WSTR pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bSimpleFileSpec = FALSE) const;
    939 
    940     FX_BOOL					ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE);
    941 
    942 
    943 
    944 
    945     FX_BOOL					ResetForm(const CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude = TRUE, FX_BOOL bNotify = FALSE);
    946 
    947     FX_BOOL					ResetForm(FX_BOOL bNotify = FALSE);
    948 
    949     void					ReloadForm();
    950 
    951     CPDF_FormNotify*		GetFormNotify() const
    952     {
    953         return m_pFormNotify;
    954     }
    955 
    956     void					SetFormNotify(const CPDF_FormNotify* pNotify);
    957 
    958 
    959     int						GetPageWithWidget(int iCurPage, FX_BOOL bNext);
    960 
    961 
    962 
    963     FX_BOOL					IsUpdated()
    964     {
    965         return m_bUpdated;
    966     }
    967 
    968     void					ClearUpdatedFlag()
    969     {
    970         m_bUpdated = FALSE;
    971     }
    972 
    973 
    974     FX_BOOL					HasXFAForm() const;
    975 
    976     void					FixPageFields(const CPDF_Page* pPage);
    977 protected:
    978 
    979     static FX_BOOL			m_bUpdateAP;
    980 
    981     void					LoadField(CPDF_Dictionary* pFieldDict, int nLevel = 0);
    982 
    983     CPDF_Object*			GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name);
    984 
    985     CPDF_FormField*			AddTerminalField(const CPDF_Dictionary* pFieldDict);
    986 
    987     CPDF_FormControl*		AddControl(const CPDF_FormField* pField, const CPDF_Dictionary* pWidgetDict);
    988 
    989     void					FDF_ImportField(CPDF_Dictionary* pField, const CFX_WideString& parent_name, FX_BOOL bNotify = FALSE, int nLevel = 0);
    990 
    991     FX_BOOL					ValidateFieldName(CFX_WideString& csNewFieldName, int iType, const CPDF_FormField* pExcludedField, const CPDF_FormControl* pExcludedControl);
    992 
    993     int						CompareFieldName(const CFX_WideString& name1, const CFX_WideString& name2);
    994 
    995     int						CompareFieldName(const CFX_ByteString& name1, const CFX_ByteString& name2);
    996 
    997     CPDF_Document*			m_pDocument;
    998 
    999     FX_BOOL					m_bGenerateAP;
   1000 
   1001     CPDF_Dictionary*		m_pFormDict;
   1002 
   1003     CFX_MapPtrToPtr			m_ControlMap;
   1004 
   1005     CFieldTree *m_pFieldTree;
   1006 
   1007     CFX_ByteString			m_bsEncoding;
   1008 
   1009     CPDF_FormNotify*		m_pFormNotify;
   1010 
   1011     FX_BOOL					m_bUpdated;
   1012     friend class CPDF_FormControl;
   1013     friend class CPDF_FormField;
   1014 };
   1015 #define FORMFIELD_READONLY		0x01
   1016 #define FORMFIELD_REQUIRED		0x02
   1017 #define FORMFIELD_NOEXPORT		0x04
   1018 #define FORMRADIO_NOTOGGLEOFF	0x100
   1019 #define FORMRADIO_UNISON		0x200
   1020 #define FORMTEXT_MULTILINE		0x100
   1021 #define FORMTEXT_PASSWORD		0x200
   1022 #define FORMTEXT_NOSCROLL		0x400
   1023 #define FORMTEXT_COMB			0x800
   1024 #define FORMCOMBO_EDIT			0x100
   1025 #define FORMLIST_MULTISELECT	0x100
   1026 class CPDF_FormField
   1027 {
   1028 public:
   1029 
   1030     enum Type {
   1031         Unknown,
   1032         PushButton,
   1033         RadioButton,
   1034         CheckBox,
   1035         Text,
   1036         RichText,
   1037         File,
   1038         ListBox,
   1039         ComboBox,
   1040         Sign
   1041     };
   1042 
   1043     CFX_WideString			GetFullName();
   1044 
   1045     Type					GetType()
   1046     {
   1047         return m_Type;
   1048     }
   1049 
   1050     FX_DWORD				GetFlags()
   1051     {
   1052         return m_Flags;
   1053     }
   1054 
   1055     CPDF_InterForm*			GetInterForm() const
   1056     {
   1057         return m_pForm;
   1058     }
   1059 
   1060     CPDF_Dictionary*		GetFieldDict() const
   1061     {
   1062         return m_pDict;
   1063     }
   1064 
   1065     void					SetFieldDict(CPDF_Dictionary* pDict)
   1066     {
   1067         m_pDict = pDict;
   1068     }
   1069 
   1070     FX_BOOL					ResetField(FX_BOOL bNotify = FALSE);
   1071 
   1072 
   1073 
   1074     int						CountControls()
   1075     {
   1076         return m_ControlList.GetSize();
   1077     }
   1078 
   1079     CPDF_FormControl*		GetControl(int index)
   1080     {
   1081         return (CPDF_FormControl*)m_ControlList.GetAt(index);
   1082     }
   1083 
   1084     int						GetControlIndex(const CPDF_FormControl* pControl);
   1085 
   1086 
   1087 
   1088 
   1089     int						GetFieldType();
   1090 
   1091 
   1092 
   1093 
   1094     CPDF_AAction			GetAdditionalAction();
   1095 
   1096 
   1097 
   1098 
   1099     CFX_WideString			GetAlternateName();
   1100 
   1101 
   1102 
   1103 
   1104     CFX_WideString			GetMappingName();
   1105 
   1106 
   1107 
   1108 
   1109     FX_DWORD				GetFieldFlags();
   1110 
   1111 
   1112 
   1113 
   1114     CFX_ByteString			GetDefaultStyle();
   1115 
   1116 
   1117 
   1118 
   1119     CFX_WideString			GetRichTextString();
   1120 
   1121 
   1122 
   1123     CFX_WideString			GetValue();
   1124 
   1125     CFX_WideString			GetDefaultValue();
   1126 
   1127     FX_BOOL					SetValue(const CFX_WideString& value, FX_BOOL bNotify = FALSE);
   1128 
   1129 
   1130 
   1131 
   1132 
   1133     int						GetMaxLen();
   1134 
   1135 
   1136 
   1137 
   1138     int						CountSelectedItems();
   1139 
   1140     int						GetSelectedIndex(int index);
   1141 
   1142     FX_BOOL					ClearSelection(FX_BOOL bNotify = FALSE);
   1143 
   1144     FX_BOOL					IsItemSelected(int index);
   1145 
   1146     FX_BOOL					SetItemSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);
   1147 
   1148     FX_BOOL					IsItemDefaultSelected(int index);
   1149 
   1150     int						GetDefaultSelectedItem();
   1151 
   1152 
   1153 
   1154 
   1155     int						CountOptions();
   1156 
   1157     CFX_WideString			GetOptionLabel(int index);
   1158 
   1159     CFX_WideString			GetOptionValue(int index);
   1160 
   1161     int						FindOption(CFX_WideString csOptLabel);
   1162 
   1163     int						FindOptionValue(const CFX_WideString& csOptValue, int iStartIndex = 0);
   1164 
   1165 
   1166 
   1167 
   1168     FX_BOOL					CheckControl(int iControlIndex, FX_BOOL bChecked, FX_BOOL bNotify = FALSE);
   1169 
   1170 
   1171 
   1172 
   1173     int						GetTopVisibleIndex();
   1174 
   1175 
   1176 
   1177 
   1178     int						CountSelectedOptions();
   1179 
   1180     int						GetSelectedOptionIndex(int index);
   1181 
   1182     FX_BOOL					IsOptionSelected(int iOptIndex);
   1183 
   1184     FX_BOOL					SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify = FALSE);
   1185 
   1186     FX_BOOL					ClearSelectedOptions(FX_BOOL bNotify = FALSE);
   1187 
   1188 
   1189 
   1190 
   1191     FX_FLOAT				GetFontSize()
   1192     {
   1193         return m_FontSize;
   1194     }
   1195 
   1196     CPDF_Font*				GetFont()
   1197     {
   1198         return m_pFont;
   1199     }
   1200 
   1201 protected:
   1202 
   1203     CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict);
   1204 
   1205     ~CPDF_FormField();
   1206 
   1207     CPDF_FormField::Type	m_Type;
   1208 
   1209     FX_DWORD				m_Flags;
   1210 
   1211     CPDF_InterForm*			m_pForm;
   1212 
   1213     CPDF_Dictionary*		m_pDict;
   1214 
   1215     CFX_PtrArray			m_ControlList;
   1216     friend class			CPDF_InterForm;
   1217     friend class			CPDF_FormControl;
   1218 
   1219 
   1220 
   1221     CFX_WideString			GetValue(FX_BOOL bDefault);
   1222 
   1223     FX_BOOL					SetValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);
   1224 
   1225 
   1226     void					SyncFieldFlags();
   1227 
   1228     int						FindListSel(CPDF_String* str);
   1229 
   1230     CFX_WideString			GetOptionText(int index, int sub_index);
   1231 
   1232     void					LoadDA();
   1233 
   1234     void					UpdateAP(CPDF_FormControl* pControl);
   1235 
   1236 
   1237 
   1238     CFX_WideString			GetCheckValue(FX_BOOL bDefault);
   1239 
   1240     FX_BOOL					SetCheckValue(const CFX_WideString& value, FX_BOOL bDefault, FX_BOOL bNotify);
   1241 
   1242 
   1243     FX_FLOAT				m_FontSize;
   1244 
   1245     CPDF_Font*				m_pFont;
   1246 };
   1247 CPDF_Object*	FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name, int nLevel = 0);
   1248 class CPDF_IconFit
   1249 {
   1250 public:
   1251 
   1252     CPDF_IconFit(CPDF_Dictionary* pDict = NULL)
   1253     {
   1254         m_pDict = pDict;
   1255     }
   1256 
   1257     operator CPDF_Dictionary*() const
   1258     {
   1259         return m_pDict;
   1260     }
   1261 
   1262 
   1263 
   1264 
   1265     enum ScaleMethod {
   1266         Always = 0,
   1267         Bigger,
   1268         Smaller,
   1269         Never
   1270     };
   1271 
   1272     ScaleMethod				GetScaleMethod();
   1273 
   1274 
   1275 
   1276 
   1277     FX_BOOL					IsProportionalScale();
   1278 
   1279 
   1280 
   1281 
   1282     void					GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom);
   1283 
   1284 
   1285 
   1286 
   1287     FX_BOOL					GetFittingBounds();
   1288 
   1289 
   1290     CPDF_Dictionary*		m_pDict;
   1291 };
   1292 
   1293 #define TEXTPOS_CAPTION		0
   1294 #define TEXTPOS_ICON		1
   1295 #define TEXTPOS_BELOW		2
   1296 #define TEXTPOS_ABOVE		3
   1297 #define TEXTPOS_RIGHT		4
   1298 #define TEXTPOS_LEFT		5
   1299 #define TEXTPOS_OVERLAID	6
   1300 class CPDF_FormControl
   1301 {
   1302 public:
   1303 
   1304     CPDF_FormField::Type	GetType()
   1305     {
   1306         return m_pField->GetType();
   1307     }
   1308 
   1309     CPDF_InterForm*			GetInterForm() const
   1310     {
   1311         return m_pForm;
   1312     }
   1313 
   1314     CPDF_FormField*			GetField() const
   1315     {
   1316         return m_pField;
   1317     }
   1318 
   1319     CPDF_Dictionary*		GetWidget() const
   1320     {
   1321         return m_pWidgetDict;
   1322     }
   1323 
   1324     CFX_FloatRect			GetRect();
   1325 
   1326     void					DrawControl(CFX_RenderDevice* pDevice, CFX_AffineMatrix* pMatrix,
   1327                                         CPDF_Page* pPage, CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions = NULL);
   1328 
   1329 
   1330 
   1331     CFX_ByteString			GetCheckedAPState();
   1332 
   1333     CFX_WideString			GetExportValue();
   1334 
   1335     FX_BOOL					IsChecked();
   1336 
   1337     FX_BOOL					IsDefaultChecked();
   1338 
   1339 
   1340 
   1341 
   1342     enum HighlightingMode	{
   1343         None = 0,
   1344         Invert,
   1345         Outline,
   1346         Push,
   1347         Toggle
   1348     };
   1349 
   1350     HighlightingMode		GetHighlightingMode();
   1351 
   1352 
   1353 
   1354 
   1355     FX_BOOL					HasMKEntry(CFX_ByteString csEntry);
   1356 
   1357 
   1358 
   1359 
   1360     int						GetRotation();
   1361 
   1362 
   1363 
   1364 
   1365     inline FX_ARGB			GetBorderColor(int& iColorType)
   1366     {
   1367         return GetColor(iColorType, "BC");
   1368     }
   1369 
   1370     inline FX_FLOAT			GetOriginalBorderColor(int index)
   1371     {
   1372         return GetOriginalColor(index, "BC");
   1373     }
   1374 
   1375     inline void				GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])
   1376     {
   1377         GetOriginalColor(iColorType, fc, "BC");
   1378     }
   1379 
   1380 
   1381 
   1382 
   1383     inline FX_ARGB			GetBackgroundColor(int& iColorType)
   1384     {
   1385         return GetColor(iColorType, "BG");
   1386     }
   1387 
   1388     inline FX_FLOAT			GetOriginalBackgroundColor(int index)
   1389     {
   1390         return GetOriginalColor(index, "BG");
   1391     }
   1392 
   1393     inline void				GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])
   1394     {
   1395         GetOriginalColor(iColorType, fc, "BG");
   1396     }
   1397 
   1398 
   1399 
   1400 
   1401     inline CFX_WideString	GetNormalCaption()
   1402     {
   1403         return GetCaption("CA");
   1404     }
   1405 
   1406 
   1407 
   1408 
   1409     inline CFX_WideString	GetRolloverCaption()
   1410     {
   1411         return GetCaption("RC");
   1412     }
   1413 
   1414 
   1415 
   1416 
   1417     inline CFX_WideString	GetDownCaption()
   1418     {
   1419         return GetCaption("AC");
   1420     }
   1421 
   1422 
   1423 
   1424 
   1425     inline CPDF_Stream*		GetNormalIcon()
   1426     {
   1427         return GetIcon("I");
   1428     }
   1429 
   1430 
   1431 
   1432 
   1433     inline CPDF_Stream*		GetRolloverIcon()
   1434     {
   1435         return GetIcon("RI");
   1436     }
   1437 
   1438 
   1439 
   1440 
   1441     inline CPDF_Stream*		GetDownIcon()
   1442     {
   1443         return GetIcon("IX");
   1444     }
   1445 
   1446 
   1447 
   1448 
   1449     CPDF_IconFit			GetIconFit();
   1450 
   1451 
   1452 
   1453 
   1454     int						GetTextPosition();
   1455 
   1456 
   1457 
   1458 
   1459     CPDF_Action				GetAction();
   1460 
   1461 
   1462 
   1463 
   1464     CPDF_AAction			GetAdditionalAction();
   1465 
   1466 
   1467 
   1468 
   1469     CPDF_DefaultAppearance	GetDefaultAppearance();
   1470 
   1471     CPDF_Font*				GetDefaultControlFont();
   1472 
   1473 
   1474 
   1475 
   1476     int						GetControlAlignment();
   1477 
   1478 protected:
   1479 
   1480     CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict);
   1481 
   1482     CFX_ByteString			GetOnStateName();
   1483 
   1484     void					SetOnStateName(const CFX_ByteString& csOn);
   1485 
   1486     void					CheckControl(FX_BOOL bChecked);
   1487 
   1488     FX_ARGB					GetColor(int& iColorType, CFX_ByteString csEntry);
   1489 
   1490     FX_FLOAT				GetOriginalColor(int index, CFX_ByteString csEntry);
   1491 
   1492     void					GetOriginalColor(int& iColorType, FX_FLOAT fc[4], CFX_ByteString csEntry);
   1493 
   1494     CFX_WideString			GetCaption(CFX_ByteString csEntry);
   1495 
   1496     CPDF_Stream*			GetIcon(CFX_ByteString csEntry);
   1497 
   1498     CPDF_ApSettings			GetMK(FX_BOOL bCreate);
   1499 
   1500     CPDF_InterForm*			m_pForm;
   1501 
   1502     CPDF_FormField*			m_pField;
   1503 
   1504     CPDF_Dictionary*		m_pWidgetDict;
   1505     friend class			CPDF_InterForm;
   1506     friend class			CPDF_FormField;
   1507 };
   1508 class CPDF_FormNotify
   1509 {
   1510 public:
   1511 
   1512     virtual ~CPDF_FormNotify() {}
   1513 
   1514     virtual int		BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue)
   1515     {
   1516         return 0;
   1517     }
   1518 
   1519     virtual int		AfterValueChange(const CPDF_FormField* pField)
   1520     {
   1521         return 0;
   1522     }
   1523 
   1524     virtual int		BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue)
   1525     {
   1526         return 0;
   1527     }
   1528 
   1529     virtual int		AfterSelectionChange(const CPDF_FormField* pField)
   1530     {
   1531         return 0;
   1532     }
   1533 
   1534     virtual int		AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray)
   1535     {
   1536         return 0;
   1537     }
   1538 
   1539     virtual int		BeforeFormReset(const CPDF_InterForm* pForm)
   1540     {
   1541         return 0;
   1542     }
   1543 
   1544     virtual int		AfterFormReset(const CPDF_InterForm* pForm)
   1545     {
   1546         return 0;
   1547     }
   1548 
   1549     virtual int		BeforeFormImportData(const CPDF_InterForm* pForm)
   1550     {
   1551         return 0;
   1552     }
   1553 
   1554     virtual int		AfterFormImportData(const CPDF_InterForm* pForm)
   1555     {
   1556         return 0;
   1557     }
   1558 };
   1559 FX_BOOL		FPDF_GenerateAP(CPDF_Document* pDoc, CPDF_Dictionary* pAnnotDict);
   1560 class CPDF_PageLabel
   1561 {
   1562 public:
   1563 
   1564     CPDF_PageLabel(CPDF_Document* pDocument)
   1565     {
   1566         m_pDocument = pDocument;
   1567     }
   1568 
   1569 
   1570     CFX_WideString					GetLabel(int nPage) const;
   1571 
   1572     FX_INT32						GetPageByLabel(FX_BSTR bsLabel) const;
   1573 
   1574 
   1575     FX_INT32						GetPageByLabel(FX_WSTR wsLabel) const;
   1576 
   1577 protected:
   1578     CPDF_Document*					m_pDocument;
   1579 };
   1580 class CPDF_Metadata
   1581 {
   1582 public:
   1583 
   1584     CPDF_Metadata();
   1585 
   1586 
   1587     ~CPDF_Metadata();
   1588 
   1589     void				LoadDoc(CPDF_Document *pDoc);
   1590 
   1591 
   1592     FX_INT32			GetString(FX_BSTR bsItem, CFX_WideString &wsStr);
   1593 
   1594     CXML_Element*		GetRoot() const;
   1595 
   1596     CXML_Element*		GetRDF() const;
   1597 
   1598 protected:
   1599     FX_LPVOID	m_pData;
   1600 };
   1601 class CPDF_ViewerPreferences
   1602 {
   1603 public:
   1604 
   1605     CPDF_ViewerPreferences(CPDF_Document *pDoc);
   1606 
   1607 
   1608     ~CPDF_ViewerPreferences();
   1609 
   1610 
   1611     FX_BOOL IsDirectionR2L() const;
   1612 
   1613     FX_BOOL PrintScaling() const;
   1614 
   1615     FX_INT32 NumCopies() const;
   1616 
   1617     CPDF_Array* PrintPageRange() const;
   1618 
   1619     CFX_ByteString Duplex() const;
   1620 
   1621 protected:
   1622     CPDF_Document*	m_pDoc;
   1623 };
   1624 class CPDF_ApSettings
   1625 {
   1626 public:
   1627 
   1628     CPDF_ApSettings(CPDF_Dictionary* pDict = NULL)
   1629     {
   1630         m_pDict = pDict;
   1631     }
   1632 
   1633     operator CPDF_Dictionary* () const
   1634     {
   1635         return m_pDict;
   1636     }
   1637 
   1638     FX_BOOL					HasMKEntry(FX_BSTR csEntry);
   1639 
   1640 
   1641 
   1642     int						GetRotation();
   1643 
   1644 
   1645 
   1646 
   1647     inline FX_ARGB			GetBorderColor(int& iColorType)
   1648     {
   1649         return GetColor(iColorType, FX_BSTRC("BC"));
   1650     }
   1651 
   1652     inline FX_FLOAT			GetOriginalBorderColor(int index)
   1653     {
   1654         return GetOriginalColor(index, FX_BSTRC("BC"));
   1655     }
   1656 
   1657     inline void				GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4])
   1658     {
   1659         GetOriginalColor(iColorType, fc, FX_BSTRC("BC"));
   1660     }
   1661 
   1662 
   1663 
   1664 
   1665     inline FX_ARGB			GetBackgroundColor(int& iColorType)
   1666     {
   1667         return GetColor(iColorType, FX_BSTRC("BG"));
   1668     }
   1669 
   1670     inline FX_FLOAT			GetOriginalBackgroundColor(int index)
   1671     {
   1672         return GetOriginalColor(index, FX_BSTRC("BG"));
   1673     }
   1674 
   1675     inline void				GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4])
   1676     {
   1677         GetOriginalColor(iColorType, fc, FX_BSTRC("BG"));
   1678     }
   1679 
   1680 
   1681 
   1682 
   1683     inline CFX_WideString	GetNormalCaption()
   1684     {
   1685         return GetCaption(FX_BSTRC("CA"));
   1686     }
   1687 
   1688 
   1689 
   1690 
   1691     inline CFX_WideString	GetRolloverCaption()
   1692     {
   1693         return GetCaption(FX_BSTRC("RC"));
   1694     }
   1695 
   1696 
   1697 
   1698 
   1699     inline CFX_WideString	GetDownCaption()
   1700     {
   1701         return GetCaption(FX_BSTRC("AC"));
   1702     }
   1703 
   1704 
   1705 
   1706 
   1707     inline CPDF_Stream*		GetNormalIcon()
   1708     {
   1709         return GetIcon(FX_BSTRC("I"));
   1710     }
   1711 
   1712 
   1713 
   1714 
   1715     inline CPDF_Stream*		GetRolloverIcon()
   1716     {
   1717         return GetIcon(FX_BSTRC("RI"));
   1718     }
   1719 
   1720 
   1721 
   1722 
   1723     inline CPDF_Stream*		GetDownIcon()
   1724     {
   1725         return GetIcon(FX_BSTRC("IX"));
   1726     }
   1727 
   1728 
   1729 
   1730 
   1731     CPDF_IconFit			GetIconFit();
   1732 
   1733 
   1734 
   1735 
   1736     int						GetTextPosition();
   1737 
   1738     CPDF_Dictionary*		m_pDict;
   1739 protected:
   1740 
   1741     FX_ARGB					GetColor(int& iColorType, FX_BSTR csEntry);
   1742 
   1743     FX_FLOAT				GetOriginalColor(int index, FX_BSTR csEntry);
   1744 
   1745     void					GetOriginalColor(int& iColorType, FX_FLOAT fc[4], FX_BSTR csEntry);
   1746 
   1747     CFX_WideString			GetCaption(FX_BSTR csEntry);
   1748 
   1749     CPDF_Stream*			GetIcon(FX_BSTR csEntry);
   1750     friend class			CPDF_FormControl;
   1751 };
   1752 
   1753 #endif  // CORE_INCLUDE_FPDFDOC_FPDF_DOC_H_
   1754