OLD | NEW |
| (Empty) |
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_FPDFDOC_INCLUDE_FPDF_DOC_H_ | |
8 #define CORE_FPDFDOC_INCLUDE_FPDF_DOC_H_ | |
9 | |
10 #include <map> | |
11 #include <memory> | |
12 #include <unordered_map> | |
13 #include <vector> | |
14 | |
15 #include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h" | |
16 #include "core/fpdfapi/fpdf_parser/include/fpdf_parser_decode.h" | |
17 #include "core/fpdfdoc/cpdf_annot.h" | |
18 #include "core/fpdfdoc/cpdf_annotlist.h" | |
19 #include "core/fxge/include/fx_dib.h" | |
20 | |
21 class CFDF_Document; | |
22 class CFieldTree; | |
23 class CFX_RenderDevice; | |
24 class CPDF_AAction; | |
25 class CPDF_Action; | |
26 class CPDF_ActionFields; | |
27 class CPDF_ApSettings; | |
28 class CPDF_Bookmark; | |
29 class CPDF_BookmarkTree; | |
30 class CPDF_DefaultAppearance; | |
31 class CPDF_Dest; | |
32 class CPDF_DocJSActions; | |
33 class CPDF_Document; | |
34 class CPDF_FileSpec; | |
35 class CPDF_Font; | |
36 class CPDF_Form; | |
37 class CPDF_FormControl; | |
38 class CPDF_FormField; | |
39 class CPDF_IconFit; | |
40 class CPDF_Link; | |
41 class CPDF_Metadata; | |
42 class CPDF_OCContext; | |
43 class CPDF_Page; | |
44 class CPDF_PageObject; | |
45 class CPDF_RenderContext; | |
46 class CPDF_RenderOptions; | |
47 class CXML_Element; | |
48 class IPDF_FormNotify; | |
49 | |
50 enum class BorderStyle { SOLID, DASH, BEVELED, INSET, UNDERLINE }; | |
51 | |
52 class CPDF_NameTree { | |
53 public: | |
54 explicit CPDF_NameTree(CPDF_Dictionary* pRoot) : m_pRoot(pRoot) {} | |
55 CPDF_NameTree(CPDF_Document* pDoc, const CFX_ByteString& category); | |
56 | |
57 CPDF_Object* LookupValue(int nIndex, CFX_ByteString& csName) const; | |
58 CPDF_Object* LookupValue(const CFX_ByteString& csName) const; | |
59 CPDF_Array* LookupNamedDest(CPDF_Document* pDoc, const CFX_ByteString& sName); | |
60 int GetIndex(const CFX_ByteString& csName) const; | |
61 size_t GetCount() const; | |
62 CPDF_Dictionary* GetRoot() const { return m_pRoot; } | |
63 | |
64 protected: | |
65 CPDF_Dictionary* m_pRoot; | |
66 }; | |
67 | |
68 class CPDF_BookmarkTree { | |
69 public: | |
70 explicit CPDF_BookmarkTree(CPDF_Document* pDoc) : m_pDocument(pDoc) {} | |
71 | |
72 CPDF_Bookmark GetFirstChild(const CPDF_Bookmark& parent) const; | |
73 CPDF_Bookmark GetNextSibling(const CPDF_Bookmark& bookmark) const; | |
74 CPDF_Document* GetDocument() const { return m_pDocument; } | |
75 | |
76 protected: | |
77 CPDF_Document* const m_pDocument; | |
78 }; | |
79 | |
80 #define PDFBOOKMARK_ITALIC 1 | |
81 #define PDFBOOKMARK_BOLD 2 | |
82 class CPDF_Bookmark { | |
83 public: | |
84 CPDF_Bookmark() : m_pDict(nullptr) {} | |
85 explicit CPDF_Bookmark(CPDF_Dictionary* pDict) : m_pDict(pDict) {} | |
86 | |
87 CPDF_Dictionary* GetDict() const { return m_pDict; } | |
88 uint32_t GetColorRef() const; | |
89 uint32_t GetFontStyle() const; | |
90 CFX_WideString GetTitle() const; | |
91 CPDF_Dest GetDest(CPDF_Document* pDocument) const; | |
92 CPDF_Action GetAction() const; | |
93 | |
94 protected: | |
95 CPDF_Dictionary* m_pDict; | |
96 }; | |
97 | |
98 #define PDFZOOM_XYZ 1 | |
99 #define PDFZOOM_FITPAGE 2 | |
100 #define PDFZOOM_FITHORZ 3 | |
101 #define PDFZOOM_FITVERT 4 | |
102 #define PDFZOOM_FITRECT 5 | |
103 #define PDFZOOM_FITBBOX 6 | |
104 #define PDFZOOM_FITBHORZ 7 | |
105 #define PDFZOOM_FITBVERT 8 | |
106 class CPDF_Dest { | |
107 public: | |
108 CPDF_Dest() : m_pObj(nullptr) {} | |
109 explicit CPDF_Dest(CPDF_Object* pObj) : m_pObj(pObj) {} | |
110 | |
111 CPDF_Object* GetObject() const { return m_pObj; } | |
112 CFX_ByteString GetRemoteName(); | |
113 int GetPageIndex(CPDF_Document* pDoc); | |
114 uint32_t GetPageObjNum(); | |
115 int GetZoomMode(); | |
116 FX_FLOAT GetParam(int index); | |
117 | |
118 protected: | |
119 CPDF_Object* m_pObj; | |
120 }; | |
121 | |
122 class CPDF_OCContext { | |
123 public: | |
124 enum UsageType { View = 0, Design, Print, Export }; | |
125 | |
126 CPDF_OCContext(CPDF_Document* pDoc, UsageType eUsageType); | |
127 ~CPDF_OCContext(); | |
128 | |
129 bool CheckOCGVisible(const CPDF_Dictionary* pOCGDict); | |
130 bool CheckObjectVisible(const CPDF_PageObject* pObj); | |
131 | |
132 protected: | |
133 bool LoadOCGStateFromConfig(const CFX_ByteString& csConfig, | |
134 const CPDF_Dictionary* pOCGDict) const; | |
135 bool LoadOCGState(const CPDF_Dictionary* pOCGDict) const; | |
136 bool GetOCGVisible(const CPDF_Dictionary* pOCGDict); | |
137 bool GetOCGVE(CPDF_Array* pExpression, int nLevel); | |
138 bool LoadOCMDState(const CPDF_Dictionary* pOCMDDict); | |
139 | |
140 CPDF_Document* const m_pDocument; | |
141 const UsageType m_eUsageType; | |
142 std::unordered_map<const CPDF_Dictionary*, bool> m_OCGStates; | |
143 }; | |
144 | |
145 class CPDF_ActionFields { | |
146 public: | |
147 explicit CPDF_ActionFields(const CPDF_Action* pAction) : m_pAction(pAction) {} | |
148 | |
149 size_t GetFieldsCount() const; | |
150 std::vector<CPDF_Object*> GetAllFields() const; | |
151 CPDF_Object* GetField(size_t iIndex) const; | |
152 | |
153 protected: | |
154 const CPDF_Action* const m_pAction; | |
155 }; | |
156 | |
157 #define PDFNAMED_NEXTPAGE 1 | |
158 #define PDFNAMED_PREVPAGE 2 | |
159 #define PDFNAMED_FIRSTPAGE 3 | |
160 #define PDFNAMED_LASTPAGE 4 | |
161 #define PDFJS_MAXLENGTH 64 | |
162 class CPDF_Action { | |
163 public: | |
164 enum ActionType { | |
165 Unknown = 0, | |
166 GoTo, | |
167 GoToR, | |
168 GoToE, | |
169 Launch, | |
170 Thread, | |
171 URI, | |
172 Sound, | |
173 Movie, | |
174 Hide, | |
175 Named, | |
176 SubmitForm, | |
177 ResetForm, | |
178 ImportData, | |
179 JavaScript, | |
180 SetOCGState, | |
181 Rendition, | |
182 Trans, | |
183 GoTo3DView | |
184 }; | |
185 | |
186 CPDF_Action() : m_pDict(nullptr) {} | |
187 explicit CPDF_Action(CPDF_Dictionary* pDict) : m_pDict(pDict) {} | |
188 | |
189 CPDF_Dictionary* GetDict() const { return m_pDict; } | |
190 ActionType GetType() const; | |
191 CPDF_Dest GetDest(CPDF_Document* pDoc) const; | |
192 CFX_WideString GetFilePath() const; | |
193 CFX_ByteString GetURI(CPDF_Document* pDoc) const; | |
194 bool GetHideStatus() const { return m_pDict->GetBooleanBy("H", true); } | |
195 CFX_ByteString GetNamedAction() const { return m_pDict->GetStringBy("N"); } | |
196 uint32_t GetFlags() const { return m_pDict->GetIntegerBy("Flags"); } | |
197 CFX_WideString GetJavaScript() const; | |
198 size_t GetSubActionsCount() const; | |
199 CPDF_Action GetSubAction(size_t iIndex) const; | |
200 | |
201 protected: | |
202 CPDF_Dictionary* const m_pDict; | |
203 }; | |
204 | |
205 class CPDF_AAction { | |
206 public: | |
207 enum AActionType { | |
208 CursorEnter = 0, | |
209 CursorExit, | |
210 ButtonDown, | |
211 ButtonUp, | |
212 GetFocus, | |
213 LoseFocus, | |
214 PageOpen, | |
215 PageClose, | |
216 PageVisible, | |
217 PageInvisible, | |
218 OpenPage, | |
219 ClosePage, | |
220 KeyStroke, | |
221 Format, | |
222 Validate, | |
223 Calculate, | |
224 CloseDocument, | |
225 SaveDocument, | |
226 DocumentSaved, | |
227 PrintDocument, | |
228 DocumentPrinted | |
229 }; | |
230 | |
231 CPDF_AAction() : m_pDict(nullptr) {} | |
232 explicit CPDF_AAction(CPDF_Dictionary* pDict) : m_pDict(pDict) {} | |
233 | |
234 FX_BOOL ActionExist(AActionType eType) const; | |
235 CPDF_Action GetAction(AActionType eType) const; | |
236 CPDF_Dictionary* GetDict() const { return m_pDict; } | |
237 | |
238 protected: | |
239 CPDF_Dictionary* const m_pDict; | |
240 }; | |
241 | |
242 class CPDF_DocJSActions { | |
243 public: | |
244 explicit CPDF_DocJSActions(CPDF_Document* pDoc); | |
245 | |
246 int CountJSActions() const; | |
247 CPDF_Action GetJSAction(int index, CFX_ByteString& csName) const; | |
248 CPDF_Action GetJSAction(const CFX_ByteString& csName) const; | |
249 int FindJSAction(const CFX_ByteString& csName) const; | |
250 CPDF_Document* GetDocument() const { return m_pDocument; } | |
251 | |
252 protected: | |
253 CPDF_Document* const m_pDocument; | |
254 }; | |
255 | |
256 class CPDF_FileSpec { | |
257 public: | |
258 CPDF_FileSpec(); | |
259 explicit CPDF_FileSpec(CPDF_Object* pObj) : m_pObj(pObj) {} | |
260 | |
261 // Convert a platform dependent file name into pdf format. | |
262 static CFX_WideString EncodeFileName(const CFX_WideStringC& filepath); | |
263 | |
264 // Convert a pdf file name into platform dependent format. | |
265 static CFX_WideString DecodeFileName(const CFX_WideStringC& filepath); | |
266 | |
267 CPDF_Object* GetObj() const { return m_pObj; } | |
268 bool GetFileName(CFX_WideString* wsFileName) const; | |
269 | |
270 // Set this file spec to refer to a file name (not a url). | |
271 void SetFileName(const CFX_WideStringC& wsFileName); | |
272 | |
273 protected: | |
274 CPDF_Object* m_pObj; | |
275 }; | |
276 | |
277 class CPDF_LinkList { | |
278 public: | |
279 CPDF_LinkList(); | |
280 ~CPDF_LinkList(); | |
281 | |
282 CPDF_Link GetLinkAtPoint(CPDF_Page* pPage, | |
283 FX_FLOAT pdf_x, | |
284 FX_FLOAT pdf_y, | |
285 int* z_order); | |
286 | |
287 private: | |
288 const std::vector<CPDF_Dictionary*>* GetPageLinks(CPDF_Page* pPage); | |
289 void LoadPageLinks(CPDF_Page* pPage, std::vector<CPDF_Dictionary*>* pList); | |
290 | |
291 std::map<uint32_t, std::vector<CPDF_Dictionary*>> m_PageMap; | |
292 }; | |
293 | |
294 class CPDF_Link { | |
295 public: | |
296 CPDF_Link() : m_pDict(nullptr) {} | |
297 explicit CPDF_Link(CPDF_Dictionary* pDict) : m_pDict(pDict) {} | |
298 | |
299 CPDF_Dictionary* GetDict() const { return m_pDict; } | |
300 | |
301 CFX_FloatRect GetRect(); | |
302 CPDF_Dest GetDest(CPDF_Document* pDoc); | |
303 CPDF_Action GetAction(); | |
304 | |
305 protected: | |
306 CPDF_Dictionary* m_pDict; | |
307 }; | |
308 | |
309 #define COLORTYPE_TRANSPARENT 0 | |
310 #define COLORTYPE_GRAY 1 | |
311 #define COLORTYPE_RGB 2 | |
312 #define COLORTYPE_CMYK 3 | |
313 class CPDF_DefaultAppearance { | |
314 public: | |
315 CPDF_DefaultAppearance() {} | |
316 explicit CPDF_DefaultAppearance(const CFX_ByteString& csDA) : m_csDA(csDA) {} | |
317 | |
318 CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA) { | |
319 m_csDA = cDA.GetStr(); | |
320 } | |
321 | |
322 CFX_ByteString GetStr() const { return m_csDA; } | |
323 FX_BOOL HasFont(); | |
324 CFX_ByteString GetFontString(); | |
325 void GetFont(CFX_ByteString& csFontNameTag, FX_FLOAT& fFontSize); | |
326 FX_BOOL HasColor(FX_BOOL bStrokingOperation = FALSE); | |
327 CFX_ByteString GetColorString(FX_BOOL bStrokingOperation = FALSE); | |
328 void GetColor(int& iColorType, | |
329 FX_FLOAT fc[4], | |
330 FX_BOOL bStrokingOperation = FALSE); | |
331 void GetColor(FX_ARGB& color, | |
332 int& iColorType, | |
333 FX_BOOL bStrokingOperation = FALSE); | |
334 FX_BOOL HasTextMatrix(); | |
335 CFX_ByteString GetTextMatrixString(); | |
336 CFX_Matrix GetTextMatrix(); | |
337 | |
338 protected: | |
339 CFX_ByteString m_csDA; | |
340 }; | |
341 | |
342 #define FIELDTYPE_UNKNOWN 0 | |
343 #define FIELDTYPE_PUSHBUTTON 1 | |
344 #define FIELDTYPE_CHECKBOX 2 | |
345 #define FIELDTYPE_RADIOBUTTON 3 | |
346 #define FIELDTYPE_COMBOBOX 4 | |
347 #define FIELDTYPE_LISTBOX 5 | |
348 #define FIELDTYPE_TEXTFIELD 6 | |
349 #define FIELDTYPE_SIGNATURE 7 | |
350 | |
351 class CPDF_InterForm { | |
352 public: | |
353 explicit CPDF_InterForm(CPDF_Document* pDocument); | |
354 ~CPDF_InterForm(); | |
355 | |
356 static void SetUpdateAP(FX_BOOL bUpdateAP); | |
357 static FX_BOOL IsUpdateAPEnabled(); | |
358 static CFX_ByteString GenerateNewResourceName(const CPDF_Dictionary* pResDict, | |
359 const FX_CHAR* csType, | |
360 int iMinLen = 2, | |
361 const FX_CHAR* csPrefix = ""); | |
362 static CPDF_Font* AddStandardFont(CPDF_Document* pDocument, | |
363 CFX_ByteString csFontName); | |
364 static CFX_ByteString GetNativeFont(uint8_t iCharSet, | |
365 void* pLogFont = nullptr); | |
366 static CFX_ByteString GetNativeFont(void* pLogFont = nullptr); | |
367 static uint8_t GetNativeCharSet(); | |
368 static CPDF_Font* AddNativeFont(uint8_t iCharSet, CPDF_Document* pDocument); | |
369 static CPDF_Font* AddNativeFont(CPDF_Document* pDocument); | |
370 | |
371 FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, int iType); | |
372 FX_BOOL ValidateFieldName(const CPDF_FormField* pField, | |
373 CFX_WideString& csNewFieldName); | |
374 FX_BOOL ValidateFieldName(const CPDF_FormControl* pControl, | |
375 CFX_WideString& csNewFieldName); | |
376 | |
377 uint32_t CountFields(const CFX_WideString& csFieldName = L""); | |
378 CPDF_FormField* GetField(uint32_t index, | |
379 const CFX_WideString& csFieldName = L""); | |
380 CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const; | |
381 | |
382 CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage, | |
383 FX_FLOAT pdf_x, | |
384 FX_FLOAT pdf_y, | |
385 int* z_order) const; | |
386 CPDF_FormControl* GetControlByDict(const CPDF_Dictionary* pWidgetDict) const; | |
387 | |
388 CPDF_Document* GetDocument() const { return m_pDocument; } | |
389 CPDF_Dictionary* GetFormDict() const { return m_pFormDict; } | |
390 FX_BOOL NeedConstructAP() const; | |
391 int CountFieldsInCalculationOrder(); | |
392 CPDF_FormField* GetFieldInCalculationOrder(int index); | |
393 int FindFieldInCalculationOrder(const CPDF_FormField* pField); | |
394 | |
395 uint32_t CountFormFonts(); | |
396 CPDF_Font* GetFormFont(uint32_t index, CFX_ByteString& csNameTag); | |
397 CPDF_Font* GetFormFont(CFX_ByteString csNameTag); | |
398 CPDF_Font* GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag); | |
399 CPDF_Font* GetNativeFormFont(uint8_t iCharSet, CFX_ByteString& csNameTag); | |
400 CPDF_Font* GetNativeFormFont(CFX_ByteString& csNameTag); | |
401 FX_BOOL FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag); | |
402 FX_BOOL FindFormFont(CFX_ByteString csFontName, | |
403 CPDF_Font*& pFont, | |
404 CFX_ByteString& csNameTag); | |
405 | |
406 FX_BOOL FindFormFont(CFX_WideString csFontName, | |
407 CPDF_Font*& pFont, | |
408 CFX_ByteString& csNameTag) { | |
409 return FindFormFont(PDF_EncodeText(csFontName), pFont, csNameTag); | |
410 } | |
411 | |
412 void AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag); | |
413 CPDF_Font* AddNativeFormFont(uint8_t iCharSet, CFX_ByteString& csNameTag); | |
414 CPDF_Font* AddNativeFormFont(CFX_ByteString& csNameTag); | |
415 | |
416 void RemoveFormFont(const CPDF_Font* pFont); | |
417 void RemoveFormFont(CFX_ByteString csNameTag); | |
418 | |
419 CPDF_DefaultAppearance GetDefaultAppearance(); | |
420 CPDF_Font* GetDefaultFormFont(); | |
421 int GetFormAlignment(); | |
422 | |
423 CPDF_FormField* CheckRequiredFields( | |
424 const std::vector<CPDF_FormField*>* fields, | |
425 bool bIncludeOrExclude) const; | |
426 | |
427 CFDF_Document* ExportToFDF(const CFX_WideStringC& pdf_path, | |
428 bool bSimpleFileSpec = false) const; | |
429 CFDF_Document* ExportToFDF(const CFX_WideStringC& pdf_path, | |
430 const std::vector<CPDF_FormField*>& fields, | |
431 bool bIncludeOrExclude = true, | |
432 bool bSimpleFileSpec = false) const; | |
433 FX_BOOL ImportFromFDF(const CFDF_Document* pFDFDoc, FX_BOOL bNotify = FALSE); | |
434 | |
435 bool ResetForm(const std::vector<CPDF_FormField*>& fields, | |
436 bool bIncludeOrExclude = true, | |
437 bool bNotify = false); | |
438 bool ResetForm(bool bNotify = false); | |
439 | |
440 void SetFormNotify(IPDF_FormNotify* pNotify); | |
441 FX_BOOL HasXFAForm() const; | |
442 void FixPageFields(const CPDF_Page* pPage); | |
443 | |
444 protected: | |
445 static FX_BOOL s_bUpdateAP; | |
446 | |
447 void LoadField(CPDF_Dictionary* pFieldDict, int nLevel = 0); | |
448 CPDF_Object* GetFieldAttr(CPDF_Dictionary* pFieldDict, const FX_CHAR* name); | |
449 CPDF_FormField* AddTerminalField(CPDF_Dictionary* pFieldDict); | |
450 CPDF_FormControl* AddControl(CPDF_FormField* pField, | |
451 CPDF_Dictionary* pWidgetDict); | |
452 void FDF_ImportField(CPDF_Dictionary* pField, | |
453 const CFX_WideString& parent_name, | |
454 FX_BOOL bNotify = FALSE, | |
455 int nLevel = 0); | |
456 FX_BOOL ValidateFieldName(CFX_WideString& csNewFieldName, | |
457 int iType, | |
458 const CPDF_FormField* pExcludedField, | |
459 const CPDF_FormControl* pExcludedControl); | |
460 int CompareFieldName(const CFX_WideString& name1, | |
461 const CFX_WideString& name2); | |
462 int CompareFieldName(const CFX_ByteString& name1, | |
463 const CFX_ByteString& name2); | |
464 | |
465 CPDF_Document* const m_pDocument; | |
466 CPDF_Dictionary* m_pFormDict; | |
467 std::map<const CPDF_Dictionary*, CPDF_FormControl*> m_ControlMap; | |
468 std::unique_ptr<CFieldTree> m_pFieldTree; | |
469 CFX_ByteString m_bsEncoding; | |
470 IPDF_FormNotify* m_pFormNotify; | |
471 | |
472 friend class CPDF_FormControl; | |
473 friend class CPDF_FormField; | |
474 }; | |
475 | |
476 #define FORMFIELD_READONLY 0x01 | |
477 #define FORMFIELD_REQUIRED 0x02 | |
478 #define FORMFIELD_NOEXPORT 0x04 | |
479 #define FORMRADIO_NOTOGGLEOFF 0x100 | |
480 #define FORMRADIO_UNISON 0x200 | |
481 #define FORMTEXT_MULTILINE 0x100 | |
482 #define FORMTEXT_PASSWORD 0x200 | |
483 #define FORMTEXT_NOSCROLL 0x400 | |
484 #define FORMTEXT_COMB 0x800 | |
485 #define FORMCOMBO_EDIT 0x100 | |
486 #define FORMLIST_MULTISELECT 0x100 | |
487 | |
488 class CPDF_FormField { | |
489 public: | |
490 enum Type { | |
491 Unknown, | |
492 PushButton, | |
493 RadioButton, | |
494 CheckBox, | |
495 Text, | |
496 RichText, | |
497 File, | |
498 ListBox, | |
499 ComboBox, | |
500 Sign | |
501 }; | |
502 | |
503 CFX_WideString GetFullName() const; | |
504 | |
505 Type GetType() const { return m_Type; } | |
506 uint32_t GetFlags() const { return m_Flags; } | |
507 | |
508 CPDF_Dictionary* GetFieldDict() const { return m_pDict; } | |
509 void SetFieldDict(CPDF_Dictionary* pDict) { m_pDict = pDict; } | |
510 | |
511 FX_BOOL ResetField(FX_BOOL bNotify = FALSE); | |
512 | |
513 int CountControls() const { return m_ControlList.GetSize(); } | |
514 | |
515 CPDF_FormControl* GetControl(int index) const { | |
516 return m_ControlList.GetAt(index); | |
517 } | |
518 | |
519 int GetControlIndex(const CPDF_FormControl* pControl) const; | |
520 int GetFieldType() const; | |
521 | |
522 CPDF_AAction GetAdditionalAction() const; | |
523 CFX_WideString GetAlternateName() const; | |
524 CFX_WideString GetMappingName() const; | |
525 | |
526 uint32_t GetFieldFlags() const; | |
527 CFX_ByteString GetDefaultStyle() const; | |
528 CFX_WideString GetRichTextString() const; | |
529 | |
530 CFX_WideString GetValue() const; | |
531 CFX_WideString GetDefaultValue() const; | |
532 FX_BOOL SetValue(const CFX_WideString& value, FX_BOOL bNotify = FALSE); | |
533 | |
534 int GetMaxLen() const; | |
535 int CountSelectedItems() const; | |
536 int GetSelectedIndex(int index) const; | |
537 | |
538 FX_BOOL ClearSelection(FX_BOOL bNotify = FALSE); | |
539 FX_BOOL IsItemSelected(int index) const; | |
540 FX_BOOL SetItemSelection(int index, | |
541 FX_BOOL bSelected, | |
542 FX_BOOL bNotify = FALSE); | |
543 | |
544 FX_BOOL IsItemDefaultSelected(int index) const; | |
545 | |
546 int GetDefaultSelectedItem() const; | |
547 int CountOptions() const; | |
548 | |
549 CFX_WideString GetOptionLabel(int index) const; | |
550 CFX_WideString GetOptionValue(int index) const; | |
551 | |
552 int FindOption(CFX_WideString csOptLabel) const; | |
553 int FindOptionValue(const CFX_WideString& csOptValue) const; | |
554 | |
555 FX_BOOL CheckControl(int iControlIndex, bool bChecked, bool bNotify = false); | |
556 | |
557 int GetTopVisibleIndex() const; | |
558 int CountSelectedOptions() const; | |
559 | |
560 int GetSelectedOptionIndex(int index) const; | |
561 FX_BOOL IsOptionSelected(int iOptIndex) const; | |
562 | |
563 FX_BOOL SelectOption(int iOptIndex, | |
564 FX_BOOL bSelected, | |
565 FX_BOOL bNotify = FALSE); | |
566 | |
567 FX_BOOL ClearSelectedOptions(FX_BOOL bNotify = FALSE); | |
568 | |
569 #ifdef PDF_ENABLE_XFA | |
570 FX_BOOL ClearOptions(FX_BOOL bNotify = FALSE); | |
571 | |
572 int InsertOption(CFX_WideString csOptLabel, | |
573 int index = -1, | |
574 FX_BOOL bNotify = FALSE); | |
575 #endif // PDF_ENABLE_XFA | |
576 | |
577 FX_FLOAT GetFontSize() const { return m_FontSize; } | |
578 CPDF_Font* GetFont() const { return m_pFont; } | |
579 | |
580 protected: | |
581 CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict); | |
582 ~CPDF_FormField(); | |
583 | |
584 CFX_WideString GetValue(FX_BOOL bDefault) const; | |
585 FX_BOOL SetValue(const CFX_WideString& value, | |
586 FX_BOOL bDefault, | |
587 FX_BOOL bNotify); | |
588 | |
589 void SyncFieldFlags(); | |
590 int FindListSel(CPDF_String* str); | |
591 CFX_WideString GetOptionText(int index, int sub_index) const; | |
592 | |
593 void LoadDA(); | |
594 CFX_WideString GetCheckValue(FX_BOOL bDefault) const; | |
595 FX_BOOL SetCheckValue(const CFX_WideString& value, | |
596 FX_BOOL bDefault, | |
597 FX_BOOL bNotify); | |
598 | |
599 bool NotifyBeforeSelectionChange(const CFX_WideString& value); | |
600 void NotifyAfterSelectionChange(); | |
601 | |
602 bool NotifyBeforeValueChange(const CFX_WideString& value); | |
603 void NotifyAfterValueChange(); | |
604 | |
605 bool NotifyListOrComboBoxBeforeChange(const CFX_WideString& value); | |
606 void NotifyListOrComboBoxAfterChange(); | |
607 | |
608 CPDF_FormField::Type m_Type; | |
609 uint32_t m_Flags; | |
610 CPDF_InterForm* m_pForm; | |
611 CPDF_Dictionary* m_pDict; | |
612 CFX_ArrayTemplate<CPDF_FormControl*> m_ControlList; | |
613 FX_FLOAT m_FontSize; | |
614 CPDF_Font* m_pFont; | |
615 | |
616 friend class CPDF_InterForm; | |
617 friend class CPDF_FormControl; | |
618 }; | |
619 | |
620 CPDF_Object* FPDF_GetFieldAttr(CPDF_Dictionary* pFieldDict, | |
621 const FX_CHAR* name, | |
622 int nLevel = 0); | |
623 class CPDF_IconFit { | |
624 public: | |
625 enum ScaleMethod { Always = 0, Bigger, Smaller, Never }; | |
626 | |
627 explicit CPDF_IconFit(const CPDF_Dictionary* pDict) : m_pDict(pDict) {} | |
628 | |
629 ScaleMethod GetScaleMethod(); | |
630 FX_BOOL IsProportionalScale(); | |
631 void GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom); | |
632 bool GetFittingBounds(); | |
633 const CPDF_Dictionary* GetDict() const { return m_pDict; } | |
634 | |
635 protected: | |
636 const CPDF_Dictionary* const m_pDict; | |
637 }; | |
638 | |
639 #define TEXTPOS_CAPTION 0 | |
640 #define TEXTPOS_ICON 1 | |
641 #define TEXTPOS_BELOW 2 | |
642 #define TEXTPOS_ABOVE 3 | |
643 #define TEXTPOS_RIGHT 4 | |
644 #define TEXTPOS_LEFT 5 | |
645 #define TEXTPOS_OVERLAID 6 | |
646 | |
647 class CPDF_FormControl { | |
648 public: | |
649 enum HighlightingMode { None = 0, Invert, Outline, Push, Toggle }; | |
650 | |
651 CPDF_FormField::Type GetType() const { return m_pField->GetType(); } | |
652 CPDF_InterForm* GetInterForm() const { return m_pForm; } | |
653 CPDF_FormField* GetField() const { return m_pField; } | |
654 CPDF_Dictionary* GetWidget() const { return m_pWidgetDict; } | |
655 CFX_FloatRect GetRect() const { return m_pWidgetDict->GetRectBy("Rect"); } | |
656 | |
657 void DrawControl(CFX_RenderDevice* pDevice, | |
658 CFX_Matrix* pMatrix, | |
659 CPDF_Page* pPage, | |
660 CPDF_Annot::AppearanceMode mode, | |
661 const CPDF_RenderOptions* pOptions = nullptr); | |
662 | |
663 CFX_ByteString GetCheckedAPState(); | |
664 CFX_WideString GetExportValue() const; | |
665 | |
666 bool IsChecked() const; | |
667 bool IsDefaultChecked() const; | |
668 | |
669 HighlightingMode GetHighlightingMode(); | |
670 bool HasMKEntry(const CFX_ByteString& csEntry) const; | |
671 int GetRotation(); | |
672 | |
673 FX_ARGB GetBorderColor(int& iColorType) { return GetColor(iColorType, "BC"); } | |
674 | |
675 FX_FLOAT GetOriginalBorderColor(int index) { | |
676 return GetOriginalColor(index, "BC"); | |
677 } | |
678 | |
679 void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4]) { | |
680 GetOriginalColor(iColorType, fc, "BC"); | |
681 } | |
682 | |
683 FX_ARGB GetBackgroundColor(int& iColorType) { | |
684 return GetColor(iColorType, "BG"); | |
685 } | |
686 | |
687 FX_FLOAT GetOriginalBackgroundColor(int index) { | |
688 return GetOriginalColor(index, "BG"); | |
689 } | |
690 | |
691 void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4]) { | |
692 GetOriginalColor(iColorType, fc, "BG"); | |
693 } | |
694 | |
695 CFX_WideString GetNormalCaption() { return GetCaption("CA"); } | |
696 CFX_WideString GetRolloverCaption() { return GetCaption("RC"); } | |
697 CFX_WideString GetDownCaption() { return GetCaption("AC"); } | |
698 | |
699 CPDF_Stream* GetNormalIcon() { return GetIcon("I"); } | |
700 CPDF_Stream* GetRolloverIcon() { return GetIcon("RI"); } | |
701 CPDF_Stream* GetDownIcon() { return GetIcon("IX"); } | |
702 CPDF_IconFit GetIconFit(); | |
703 | |
704 int GetTextPosition(); | |
705 CPDF_Action GetAction(); | |
706 CPDF_AAction GetAdditionalAction(); | |
707 CPDF_DefaultAppearance GetDefaultAppearance(); | |
708 | |
709 CPDF_Font* GetDefaultControlFont(); | |
710 int GetControlAlignment(); | |
711 | |
712 protected: | |
713 CPDF_FormControl(CPDF_FormField* pField, CPDF_Dictionary* pWidgetDict); | |
714 | |
715 CFX_ByteString GetOnStateName() const; | |
716 void SetOnStateName(const CFX_ByteString& csOn); | |
717 void CheckControl(FX_BOOL bChecked); | |
718 FX_ARGB GetColor(int& iColorType, const CFX_ByteString& csEntry); | |
719 FX_FLOAT GetOriginalColor(int index, const CFX_ByteString& csEntry); | |
720 void GetOriginalColor(int& iColorType, | |
721 FX_FLOAT fc[4], | |
722 const CFX_ByteString& csEntry); | |
723 | |
724 CFX_WideString GetCaption(const CFX_ByteString& csEntry); | |
725 CPDF_Stream* GetIcon(const CFX_ByteString& csEntry); | |
726 CPDF_ApSettings GetMK() const; | |
727 | |
728 CPDF_FormField* const m_pField; | |
729 CPDF_Dictionary* const m_pWidgetDict; | |
730 CPDF_InterForm* const m_pForm; | |
731 | |
732 friend class CPDF_InterForm; | |
733 friend class CPDF_FormField; | |
734 }; | |
735 | |
736 class IPDF_FormNotify { | |
737 public: | |
738 virtual ~IPDF_FormNotify(); | |
739 | |
740 virtual int BeforeValueChange(CPDF_FormField* pField, | |
741 const CFX_WideString& csValue); | |
742 virtual void AfterValueChange(CPDF_FormField* pField); | |
743 virtual int BeforeSelectionChange(CPDF_FormField* pField, | |
744 const CFX_WideString& csValue); | |
745 virtual void AfterSelectionChange(CPDF_FormField* pField); | |
746 virtual void AfterCheckedStatusChange(CPDF_FormField* pField); | |
747 virtual int BeforeFormReset(CPDF_InterForm* pForm); | |
748 virtual void AfterFormReset(CPDF_InterForm* pForm); | |
749 virtual int BeforeFormImportData(CPDF_InterForm* pForm); | |
750 virtual void AfterFormImportData(CPDF_InterForm* pForm); | |
751 }; | |
752 | |
753 class CPDF_PageLabel { | |
754 public: | |
755 explicit CPDF_PageLabel(CPDF_Document* pDocument); | |
756 | |
757 CFX_WideString GetLabel(int nPage) const; | |
758 int32_t GetPageByLabel(const CFX_ByteStringC& bsLabel) const; | |
759 int32_t GetPageByLabel(const CFX_WideStringC& wsLabel) const; | |
760 | |
761 protected: | |
762 CPDF_Document* const m_pDocument; | |
763 }; | |
764 | |
765 class CPDF_Metadata { | |
766 public: | |
767 explicit CPDF_Metadata(CPDF_Document* pDoc); | |
768 ~CPDF_Metadata(); | |
769 | |
770 const CXML_Element* GetRoot() const; | |
771 | |
772 private: | |
773 std::unique_ptr<CXML_Element> m_pXmlElement; | |
774 }; | |
775 | |
776 class CPDF_ViewerPreferences { | |
777 public: | |
778 explicit CPDF_ViewerPreferences(CPDF_Document* pDoc); | |
779 ~CPDF_ViewerPreferences(); | |
780 | |
781 FX_BOOL IsDirectionR2L() const; | |
782 FX_BOOL PrintScaling() const; | |
783 int32_t NumCopies() const; | |
784 CPDF_Array* PrintPageRange() const; | |
785 CFX_ByteString Duplex() const; | |
786 | |
787 protected: | |
788 CPDF_Dictionary* GetViewerPreferences() const; | |
789 | |
790 CPDF_Document* const m_pDoc; | |
791 }; | |
792 | |
793 class CPDF_ApSettings { | |
794 public: | |
795 explicit CPDF_ApSettings(CPDF_Dictionary* pDict); | |
796 | |
797 bool HasMKEntry(const CFX_ByteString& csEntry) const; | |
798 int GetRotation() const; | |
799 | |
800 FX_ARGB GetBorderColor(int& iColorType) const { | |
801 return GetColor(iColorType, "BC"); | |
802 } | |
803 | |
804 FX_FLOAT GetOriginalBorderColor(int index) const { | |
805 return GetOriginalColor(index, "BC"); | |
806 } | |
807 | |
808 void GetOriginalBorderColor(int& iColorType, FX_FLOAT fc[4]) const { | |
809 GetOriginalColor(iColorType, fc, "BC"); | |
810 } | |
811 | |
812 FX_ARGB GetBackgroundColor(int& iColorType) const { | |
813 return GetColor(iColorType, "BG"); | |
814 } | |
815 | |
816 FX_FLOAT GetOriginalBackgroundColor(int index) const { | |
817 return GetOriginalColor(index, "BG"); | |
818 } | |
819 | |
820 void GetOriginalBackgroundColor(int& iColorType, FX_FLOAT fc[4]) const { | |
821 GetOriginalColor(iColorType, fc, "BG"); | |
822 } | |
823 | |
824 CFX_WideString GetNormalCaption() const { return GetCaption("CA"); } | |
825 CFX_WideString GetRolloverCaption() const { return GetCaption("RC"); } | |
826 CFX_WideString GetDownCaption() const { return GetCaption("AC"); } | |
827 CPDF_Stream* GetNormalIcon() const { return GetIcon("I"); } | |
828 CPDF_Stream* GetRolloverIcon() const { return GetIcon("RI"); } | |
829 CPDF_Stream* GetDownIcon() const { return GetIcon("IX"); } | |
830 CPDF_IconFit GetIconFit() const; | |
831 int GetTextPosition() const; | |
832 | |
833 protected: | |
834 friend class CPDF_FormControl; | |
835 | |
836 FX_ARGB GetColor(int& iColorType, const CFX_ByteString& csEntry) const; | |
837 FX_FLOAT GetOriginalColor(int index, const CFX_ByteString& csEntry) const; | |
838 void GetOriginalColor(int& iColorType, | |
839 FX_FLOAT fc[4], | |
840 const CFX_ByteString& csEntry) const; | |
841 | |
842 CFX_WideString GetCaption(const CFX_ByteString& csEntry) const; | |
843 CPDF_Stream* GetIcon(const CFX_ByteString& csEntry) const; | |
844 | |
845 CPDF_Dictionary* const m_pDict; | |
846 }; | |
847 | |
848 CPDF_Stream* FPDFDOC_GetAnnotAP(CPDF_Dictionary* pAnnotDict, | |
849 CPDF_Annot::AppearanceMode mode); | |
850 | |
851 #endif // CORE_FPDFDOC_INCLUDE_FPDF_DOC_H_ | |
OLD | NEW |