1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
// Copyright 2016 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#ifndef CORE_FPDFDOC_CPDF_INTERACTIVEFORM_H_
#define CORE_FPDFDOC_CPDF_INTERACTIVEFORM_H_
#include <map>
#include <memory>
#include <vector>
#include "core/fpdfapi/parser/fpdf_parser_decode.h"
#include "core/fpdfdoc/cpdf_defaultappearance.h"
#include "core/fpdfdoc/cpdf_formfield.h"
#include "core/fxcrt/fx_string.h"
#include "core/fxcrt/fx_system.h"
#include "core/fxcrt/unowned_ptr.h"
class CFieldTree;
class CFDF_Document;
class CPDF_Document;
class CPDF_Dictionary;
class CPDF_Font;
class CPDF_FormControl;
class CPDF_Object;
class CPDF_Page;
class IPDF_FormNotify;
CPDF_Font* AddNativeInteractiveFormFont(CPDF_Dictionary*& pFormDict,
CPDF_Document* pDocument,
ByteString* csNameTag);
class CPDF_InteractiveForm {
public:
explicit CPDF_InteractiveForm(CPDF_Document* pDocument);
~CPDF_InteractiveForm();
static void SetUpdateAP(bool bUpdateAP);
static bool IsUpdateAPEnabled();
static CPDF_Font* AddStandardFont(CPDF_Document* pDocument,
ByteString csFontName);
static ByteString GetNativeFont(uint8_t iCharSet, void* pLogFont);
static uint8_t GetNativeCharSet();
static CPDF_Font* AddNativeFont(uint8_t iCharSet, CPDF_Document* pDocument);
static CPDF_Font* AddNativeFont(CPDF_Document* pDocument);
size_t CountFields(const WideString& csFieldName) const;
CPDF_FormField* GetField(uint32_t index, const WideString& csFieldName) const;
CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const;
CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage,
const CFX_PointF& point,
int* z_order) const;
CPDF_FormControl* GetControlByDict(const CPDF_Dictionary* pWidgetDict) const;
bool NeedConstructAP() const;
int CountFieldsInCalculationOrder();
CPDF_FormField* GetFieldInCalculationOrder(int index);
int FindFieldInCalculationOrder(const CPDF_FormField* pField);
CPDF_Font* GetFormFont(ByteString csNameTag) const;
CPDF_DefaultAppearance GetDefaultAppearance() const;
int GetFormAlignment() const;
bool CheckRequiredFields(const std::vector<CPDF_FormField*>* fields,
bool bIncludeOrExclude) const;
std::unique_ptr<CFDF_Document> ExportToFDF(const WideString& pdf_path,
bool bSimpleFileSpec) const;
std::unique_ptr<CFDF_Document> ExportToFDF(
const WideString& pdf_path,
const std::vector<CPDF_FormField*>& fields,
bool bIncludeOrExclude,
bool bSimpleFileSpec) const;
void ResetForm(NotificationOption notify);
// TODO(tsepez): Use a span.
void ResetForm(const std::vector<CPDF_FormField*>& fields,
bool bIncludeOrExclude,
NotificationOption notify);
void SetFormNotify(IPDF_FormNotify* pNotify);
bool HasXFAForm() const;
void FixPageFields(CPDF_Page* pPage);
IPDF_FormNotify* GetFormNotify() const { return m_pFormNotify.Get(); }
CPDF_Document* GetDocument() const { return m_pDocument.Get(); }
CPDF_Dictionary* GetFormDict() const { return m_pFormDict.Get(); }
private:
void LoadField(CPDF_Dictionary* pFieldDict, int nLevel);
void AddTerminalField(CPDF_Dictionary* pFieldDict);
CPDF_FormControl* AddControl(CPDF_FormField* pField,
CPDF_Dictionary* pWidgetDict);
static bool s_bUpdateAP;
UnownedPtr<CPDF_Document> const m_pDocument;
UnownedPtr<CPDF_Dictionary> m_pFormDict;
std::map<const CPDF_Dictionary*, std::unique_ptr<CPDF_FormControl>>
m_ControlMap;
std::unique_ptr<CFieldTree> m_pFieldTree;
ByteString m_bsEncoding;
UnownedPtr<IPDF_FormNotify> m_pFormNotify;
};
#endif // CORE_FPDFDOC_CPDF_INTERACTIVEFORM_H_
|