Index: core/src/fpdfdoc/doc_form.cpp |
diff --git a/core/src/fpdfdoc/doc_form.cpp b/core/src/fpdfdoc/doc_form.cpp |
index 735231cc1d113edcc9d3770f5e0353095b3fce80..a59f35eeac5139429d05897221f7078254981801 100644 |
--- a/core/src/fpdfdoc/doc_form.cpp |
+++ b/core/src/fpdfdoc/doc_form.cpp |
@@ -9,1619 +9,1617 @@ |
const int nMaxRecursion = 32; |
-class _CFieldNameExtractor |
-{ |
-public: |
- _CFieldNameExtractor(const CFX_WideString& full_name) |
- { |
- m_pStart = full_name.c_str(); |
- m_pEnd = m_pStart + full_name.GetLength(); |
- m_pCur = m_pStart; |
- } |
- void GetNext(const FX_WCHAR* &pSubName, FX_STRSIZE& size) |
- { |
- pSubName = m_pCur; |
- while (m_pCur < m_pEnd && m_pCur[0] != L'.') { |
- m_pCur++; |
- } |
- size = (FX_STRSIZE)(m_pCur - pSubName); |
- if (m_pCur < m_pEnd && m_pCur[0] == L'.') { |
- m_pCur++; |
- } |
- } |
-protected: |
- const FX_WCHAR* m_pStart; |
- const FX_WCHAR* m_pEnd; |
- const FX_WCHAR* m_pCur; |
-}; |
-class CFieldTree |
-{ |
-public: |
- struct _Node { |
- _Node *parent; |
- CFX_PtrArray children; |
- CFX_WideString short_name; |
- CPDF_FormField *field_ptr; |
- int CountFields(int nLevel = 0) |
- { |
- if (nLevel > nMaxRecursion) { |
- return 0; |
- } |
- if (field_ptr) { |
- return 1; |
- } |
- int count = 0; |
- for (int i = 0; i < children.GetSize(); i ++) { |
- count += ((_Node *)children.GetAt(i))->CountFields(nLevel + 1); |
- } |
- return count; |
- } |
- CPDF_FormField* GetField(int* fields_to_go) |
- { |
- if (field_ptr) { |
- if (*fields_to_go == 0) { |
- return field_ptr; |
- } |
- --*fields_to_go; |
- return NULL; |
- } |
- for (int i = 0; i < children.GetSize(); i++) { |
- _Node *pNode = (_Node *)children.GetAt(i); |
- CPDF_FormField* pField = pNode->GetField(fields_to_go); |
- if (pField) { |
- return pField; |
- } |
- } |
- return NULL; |
- } |
- CPDF_FormField* GetField(int index) |
- { |
- int fields_to_go = index; |
- return GetField(&fields_to_go); |
- } |
- }; |
- CFieldTree(); |
- ~CFieldTree(); |
- void SetField(const CFX_WideString &full_name, CPDF_FormField *field_ptr); |
- CPDF_FormField *GetField(const CFX_WideString &full_name); |
- CPDF_FormField *RemoveField(const CFX_WideString &full_name); |
- void RemoveAll(); |
- _Node *FindNode(const CFX_WideString &full_name); |
- _Node * AddChild(_Node *pParent, const CFX_WideString &short_name, CPDF_FormField *field_ptr); |
- void RemoveNode(_Node *pNode, int nLevel = 0); |
- _Node *_Lookup(_Node *pParent, const CFX_WideString &short_name); |
- _Node m_Root; |
+class _CFieldNameExtractor { |
+ public: |
+ _CFieldNameExtractor(const CFX_WideString& full_name) { |
+ m_pStart = full_name.c_str(); |
+ m_pEnd = m_pStart + full_name.GetLength(); |
+ m_pCur = m_pStart; |
+ } |
+ void GetNext(const FX_WCHAR*& pSubName, FX_STRSIZE& size) { |
+ pSubName = m_pCur; |
+ while (m_pCur < m_pEnd && m_pCur[0] != L'.') { |
+ m_pCur++; |
+ } |
+ size = (FX_STRSIZE)(m_pCur - pSubName); |
+ if (m_pCur < m_pEnd && m_pCur[0] == L'.') { |
+ m_pCur++; |
+ } |
+ } |
+ |
+ protected: |
+ const FX_WCHAR* m_pStart; |
+ const FX_WCHAR* m_pEnd; |
+ const FX_WCHAR* m_pCur; |
}; |
-CFieldTree::CFieldTree() |
-{ |
- m_Root.parent = NULL; |
- m_Root.field_ptr = NULL; |
-} |
-CFieldTree::~CFieldTree() |
-{ |
- RemoveAll(); |
-} |
-CFieldTree::_Node *CFieldTree::AddChild(_Node *pParent, const CFX_WideString &short_name, CPDF_FormField *field_ptr) |
-{ |
- if (pParent == NULL) { |
+class CFieldTree { |
+ public: |
+ struct _Node { |
+ _Node* parent; |
+ CFX_PtrArray children; |
+ CFX_WideString short_name; |
+ CPDF_FormField* field_ptr; |
+ int CountFields(int nLevel = 0) { |
+ if (nLevel > nMaxRecursion) { |
+ return 0; |
+ } |
+ if (field_ptr) { |
+ return 1; |
+ } |
+ int count = 0; |
+ for (int i = 0; i < children.GetSize(); i++) { |
+ count += ((_Node*)children.GetAt(i))->CountFields(nLevel + 1); |
+ } |
+ return count; |
+ } |
+ CPDF_FormField* GetField(int* fields_to_go) { |
+ if (field_ptr) { |
+ if (*fields_to_go == 0) { |
+ return field_ptr; |
+ } |
+ --*fields_to_go; |
return NULL; |
- } |
- _Node* pNode = new _Node; |
- pNode->parent = pParent; |
- pNode->short_name = short_name; |
- pNode->field_ptr = field_ptr; |
- pParent->children.Add(pNode); |
- return pNode; |
+ } |
+ for (int i = 0; i < children.GetSize(); i++) { |
+ _Node* pNode = (_Node*)children.GetAt(i); |
+ CPDF_FormField* pField = pNode->GetField(fields_to_go); |
+ if (pField) { |
+ return pField; |
+ } |
+ } |
+ return NULL; |
+ } |
+ CPDF_FormField* GetField(int index) { |
+ int fields_to_go = index; |
+ return GetField(&fields_to_go); |
+ } |
+ }; |
+ CFieldTree(); |
+ ~CFieldTree(); |
+ void SetField(const CFX_WideString& full_name, CPDF_FormField* field_ptr); |
+ CPDF_FormField* GetField(const CFX_WideString& full_name); |
+ CPDF_FormField* RemoveField(const CFX_WideString& full_name); |
+ void RemoveAll(); |
+ _Node* FindNode(const CFX_WideString& full_name); |
+ _Node* AddChild(_Node* pParent, |
+ const CFX_WideString& short_name, |
+ CPDF_FormField* field_ptr); |
+ void RemoveNode(_Node* pNode, int nLevel = 0); |
+ _Node* _Lookup(_Node* pParent, const CFX_WideString& short_name); |
+ _Node m_Root; |
+}; |
+CFieldTree::CFieldTree() { |
+ m_Root.parent = NULL; |
+ m_Root.field_ptr = NULL; |
} |
-void CFieldTree::RemoveNode(_Node *pNode, int nLevel) |
-{ |
- if (pNode == NULL) { |
- return ; |
- } |
- if (nLevel > nMaxRecursion) { |
- delete pNode; |
- return ; |
- } |
- CFX_PtrArray& ptr_array = pNode->children; |
- for (int i = 0; i < ptr_array.GetSize(); i ++) { |
- _Node *pChild = (_Node *)ptr_array[i]; |
- RemoveNode(pChild, nLevel + 1); |
- } |
- delete pNode; |
+CFieldTree::~CFieldTree() { |
+ RemoveAll(); |
} |
-CFieldTree::_Node *CFieldTree::_Lookup(_Node *pParent, const CFX_WideString &short_name) |
-{ |
- if (pParent == NULL) { |
- return NULL; |
- } |
- CFX_PtrArray& ptr_array = pParent->children; |
- for (int i = 0; i < ptr_array.GetSize(); i ++) { |
- _Node *pNode = (_Node *)ptr_array[i]; |
- if (pNode->short_name.GetLength() == short_name.GetLength() && |
- FXSYS_memcmp(pNode->short_name.c_str(), short_name.c_str(), short_name.GetLength()*sizeof(FX_WCHAR)) == 0) { |
- return pNode; |
- } |
- } |
+CFieldTree::_Node* CFieldTree::AddChild(_Node* pParent, |
+ const CFX_WideString& short_name, |
+ CPDF_FormField* field_ptr) { |
+ if (pParent == NULL) { |
return NULL; |
-} |
-void CFieldTree::RemoveAll() |
-{ |
- CFX_PtrArray& ptr_array = m_Root.children; |
- for (int i = 0; i < ptr_array.GetSize(); i ++) { |
- _Node *pNode = (_Node *)ptr_array[i]; |
- RemoveNode(pNode); |
- } |
-} |
-void CFieldTree::SetField(const CFX_WideString &full_name, CPDF_FormField *field_ptr) |
-{ |
- if (full_name == L"") { |
- return; |
+ } |
+ _Node* pNode = new _Node; |
+ pNode->parent = pParent; |
+ pNode->short_name = short_name; |
+ pNode->field_ptr = field_ptr; |
+ pParent->children.Add(pNode); |
+ return pNode; |
+} |
+void CFieldTree::RemoveNode(_Node* pNode, int nLevel) { |
+ if (pNode == NULL) { |
+ return; |
+ } |
+ if (nLevel > nMaxRecursion) { |
+ delete pNode; |
+ return; |
+ } |
+ CFX_PtrArray& ptr_array = pNode->children; |
+ for (int i = 0; i < ptr_array.GetSize(); i++) { |
+ _Node* pChild = (_Node*)ptr_array[i]; |
+ RemoveNode(pChild, nLevel + 1); |
+ } |
+ delete pNode; |
+} |
+CFieldTree::_Node* CFieldTree::_Lookup(_Node* pParent, |
+ const CFX_WideString& short_name) { |
+ if (pParent == NULL) { |
+ return NULL; |
+ } |
+ CFX_PtrArray& ptr_array = pParent->children; |
+ for (int i = 0; i < ptr_array.GetSize(); i++) { |
+ _Node* pNode = (_Node*)ptr_array[i]; |
+ if (pNode->short_name.GetLength() == short_name.GetLength() && |
+ FXSYS_memcmp(pNode->short_name.c_str(), short_name.c_str(), |
+ short_name.GetLength() * sizeof(FX_WCHAR)) == 0) { |
+ return pNode; |
+ } |
+ } |
+ return NULL; |
+} |
+void CFieldTree::RemoveAll() { |
+ CFX_PtrArray& ptr_array = m_Root.children; |
+ for (int i = 0; i < ptr_array.GetSize(); i++) { |
+ _Node* pNode = (_Node*)ptr_array[i]; |
+ RemoveNode(pNode); |
+ } |
+} |
+void CFieldTree::SetField(const CFX_WideString& full_name, |
+ CPDF_FormField* field_ptr) { |
+ if (full_name == L"") { |
+ return; |
+ } |
+ _CFieldNameExtractor name_extractor(full_name); |
+ const FX_WCHAR* pName; |
+ FX_STRSIZE nLength; |
+ name_extractor.GetNext(pName, nLength); |
+ _Node *pNode = &m_Root, *pLast = NULL; |
+ while (nLength > 0) { |
+ pLast = pNode; |
+ CFX_WideString name = CFX_WideString(pName, nLength); |
+ pNode = _Lookup(pLast, name); |
+ if (pNode == NULL) { |
+ pNode = AddChild(pLast, name, NULL); |
} |
- _CFieldNameExtractor name_extractor(full_name); |
- const FX_WCHAR* pName; |
- FX_STRSIZE nLength; |
name_extractor.GetNext(pName, nLength); |
- _Node *pNode = &m_Root, *pLast = NULL; |
- while (nLength > 0) { |
- pLast = pNode; |
- CFX_WideString name = CFX_WideString(pName, nLength); |
- pNode = _Lookup(pLast, name); |
- if (pNode == NULL) { |
- pNode = AddChild(pLast, name, NULL); |
- } |
- name_extractor.GetNext(pName, nLength); |
- } |
- if (pNode != &m_Root) { |
- pNode->field_ptr = field_ptr; |
- } |
+ } |
+ if (pNode != &m_Root) { |
+ pNode->field_ptr = field_ptr; |
+ } |
} |
-CPDF_FormField *CFieldTree::GetField(const CFX_WideString &full_name) |
-{ |
- if (full_name == L"") { |
- return NULL; |
- } |
- _CFieldNameExtractor name_extractor(full_name); |
- const FX_WCHAR* pName; |
- FX_STRSIZE nLength; |
- name_extractor.GetNext(pName, nLength); |
- _Node *pNode = &m_Root, *pLast = NULL; |
- while (nLength > 0 && pNode) { |
- pLast = pNode; |
- CFX_WideString name = CFX_WideString(pName, nLength); |
- pNode = _Lookup(pLast, name); |
- name_extractor.GetNext(pName, nLength); |
- } |
- return pNode ? pNode->field_ptr : NULL; |
-} |
-CPDF_FormField *CFieldTree::RemoveField(const CFX_WideString & full_name) |
-{ |
- if (full_name == L"") { |
- return NULL; |
- } |
- _CFieldNameExtractor name_extractor(full_name); |
- const FX_WCHAR* pName; |
- FX_STRSIZE nLength; |
+CPDF_FormField* CFieldTree::GetField(const CFX_WideString& full_name) { |
+ if (full_name == L"") { |
+ return NULL; |
+ } |
+ _CFieldNameExtractor name_extractor(full_name); |
+ const FX_WCHAR* pName; |
+ FX_STRSIZE nLength; |
+ name_extractor.GetNext(pName, nLength); |
+ _Node *pNode = &m_Root, *pLast = NULL; |
+ while (nLength > 0 && pNode) { |
+ pLast = pNode; |
+ CFX_WideString name = CFX_WideString(pName, nLength); |
+ pNode = _Lookup(pLast, name); |
name_extractor.GetNext(pName, nLength); |
- _Node *pNode = &m_Root, *pLast = NULL; |
- while (nLength > 0 && pNode) { |
- pLast = pNode; |
- CFX_WideString name = CFX_WideString(pName, nLength); |
- pNode = _Lookup(pLast, name); |
- name_extractor.GetNext(pName, nLength); |
- } |
- if (pNode && pNode != &m_Root) { |
- CFX_PtrArray& ptr_array = pLast->children; |
- for (int i = 0; i < ptr_array.GetSize(); i ++) { |
- if (pNode == (_Node *)ptr_array[i]) { |
- ptr_array.RemoveAt(i); |
- break; |
- } |
- } |
- CPDF_FormField *pField = pNode->field_ptr; |
- RemoveNode(pNode); |
- return pField; |
- } |
+ } |
+ return pNode ? pNode->field_ptr : NULL; |
+} |
+CPDF_FormField* CFieldTree::RemoveField(const CFX_WideString& full_name) { |
+ if (full_name == L"") { |
return NULL; |
+ } |
+ _CFieldNameExtractor name_extractor(full_name); |
+ const FX_WCHAR* pName; |
+ FX_STRSIZE nLength; |
+ name_extractor.GetNext(pName, nLength); |
+ _Node *pNode = &m_Root, *pLast = NULL; |
+ while (nLength > 0 && pNode) { |
+ pLast = pNode; |
+ CFX_WideString name = CFX_WideString(pName, nLength); |
+ pNode = _Lookup(pLast, name); |
+ name_extractor.GetNext(pName, nLength); |
+ } |
+ if (pNode && pNode != &m_Root) { |
+ CFX_PtrArray& ptr_array = pLast->children; |
+ for (int i = 0; i < ptr_array.GetSize(); i++) { |
+ if (pNode == (_Node*)ptr_array[i]) { |
+ ptr_array.RemoveAt(i); |
+ break; |
+ } |
+ } |
+ CPDF_FormField* pField = pNode->field_ptr; |
+ RemoveNode(pNode); |
+ return pField; |
+ } |
+ return NULL; |
} |
-CFieldTree::_Node *CFieldTree::FindNode(const CFX_WideString& full_name) |
-{ |
- if (full_name == L"") { |
- return NULL; |
- } |
- _CFieldNameExtractor name_extractor(full_name); |
- const FX_WCHAR* pName; |
- FX_STRSIZE nLength; |
+CFieldTree::_Node* CFieldTree::FindNode(const CFX_WideString& full_name) { |
+ if (full_name == L"") { |
+ return NULL; |
+ } |
+ _CFieldNameExtractor name_extractor(full_name); |
+ const FX_WCHAR* pName; |
+ FX_STRSIZE nLength; |
+ name_extractor.GetNext(pName, nLength); |
+ _Node *pNode = &m_Root, *pLast = NULL; |
+ while (nLength > 0 && pNode) { |
+ pLast = pNode; |
+ CFX_WideString name = CFX_WideString(pName, nLength); |
+ pNode = _Lookup(pLast, name); |
name_extractor.GetNext(pName, nLength); |
- _Node *pNode = &m_Root, *pLast = NULL; |
- while (nLength > 0 && pNode) { |
- pLast = pNode; |
- CFX_WideString name = CFX_WideString(pName, nLength); |
- pNode = _Lookup(pLast, name); |
- name_extractor.GetNext(pName, nLength); |
- } |
- return pNode; |
-} |
-CPDF_InterForm::CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bGenerateAP) : CFX_PrivateData() |
-{ |
- m_pDocument = pDocument; |
- m_bGenerateAP = bGenerateAP; |
- m_pFormNotify = NULL; |
- m_bUpdated = FALSE; |
- m_pFieldTree = new CFieldTree; |
- CPDF_Dictionary* pRoot = m_pDocument->GetRoot(); |
- m_pFormDict = pRoot->GetDict("AcroForm"); |
- if (m_pFormDict == NULL) { |
- return; |
- } |
- CPDF_Array* pFields = m_pFormDict->GetArray("Fields"); |
- if (pFields == NULL) { |
- return; |
- } |
- int count = pFields->GetCount(); |
- for (int i = 0; i < count; i ++) { |
- LoadField(pFields->GetDict(i)); |
- } |
-} |
-CPDF_InterForm::~CPDF_InterForm() |
-{ |
- FX_POSITION pos = m_ControlMap.GetStartPosition(); |
- while (pos) { |
- void* key; |
- void* value; |
- m_ControlMap.GetNextAssoc(pos, key, value); |
- delete (CPDF_FormControl*)value; |
- } |
- if (m_pFieldTree != NULL) { |
- int nCount = m_pFieldTree->m_Root.CountFields(); |
- for (int i = 0; i < nCount; i++) { |
- CPDF_FormField *pField = m_pFieldTree->m_Root.GetField(i); |
- delete pField; |
- } |
- delete m_pFieldTree; |
- } |
-} |
-FX_BOOL CPDF_InterForm::m_bUpdateAP = TRUE; |
-FX_BOOL CPDF_InterForm::UpdatingAPEnabled() |
-{ |
- return m_bUpdateAP; |
-} |
-void CPDF_InterForm::EnableUpdateAP(FX_BOOL bUpdateAP) |
-{ |
- m_bUpdateAP = bUpdateAP; |
-} |
-CFX_ByteString CPDF_InterForm::GenerateNewResourceName(const CPDF_Dictionary* pResDict, const FX_CHAR* csType, int iMinLen, const FX_CHAR* csPrefix) |
-{ |
- CFX_ByteString csStr = csPrefix; |
- CFX_ByteString csBType = csType; |
- if (csStr.IsEmpty()) { |
- if (csBType == "ExtGState") { |
- csStr = "GS"; |
- } else if (csBType == "ColorSpace") { |
- csStr = "CS"; |
- } else if (csBType == "Font") { |
- csStr = "ZiTi"; |
- } else { |
- csStr = "Res"; |
- } |
- } |
- CFX_ByteString csTmp = csStr; |
- int iCount = csStr.GetLength(); |
- int m = 0; |
- if (iMinLen > 0) { |
- csTmp = ""; |
- while (m < iMinLen && m < iCount) { |
- csTmp += csStr[m ++]; |
- } |
- while (m < iMinLen) { |
- csTmp += '0' + m % 10; |
- m ++; |
- } |
+ } |
+ return pNode; |
+} |
+CPDF_InterForm::CPDF_InterForm(CPDF_Document* pDocument, FX_BOOL bGenerateAP) |
+ : CFX_PrivateData() { |
+ m_pDocument = pDocument; |
+ m_bGenerateAP = bGenerateAP; |
+ m_pFormNotify = NULL; |
+ m_bUpdated = FALSE; |
+ m_pFieldTree = new CFieldTree; |
+ CPDF_Dictionary* pRoot = m_pDocument->GetRoot(); |
+ m_pFormDict = pRoot->GetDict("AcroForm"); |
+ if (m_pFormDict == NULL) { |
+ return; |
+ } |
+ CPDF_Array* pFields = m_pFormDict->GetArray("Fields"); |
+ if (pFields == NULL) { |
+ return; |
+ } |
+ int count = pFields->GetCount(); |
+ for (int i = 0; i < count; i++) { |
+ LoadField(pFields->GetDict(i)); |
+ } |
+} |
+CPDF_InterForm::~CPDF_InterForm() { |
+ FX_POSITION pos = m_ControlMap.GetStartPosition(); |
+ while (pos) { |
+ void* key; |
+ void* value; |
+ m_ControlMap.GetNextAssoc(pos, key, value); |
+ delete (CPDF_FormControl*)value; |
+ } |
+ if (m_pFieldTree != NULL) { |
+ int nCount = m_pFieldTree->m_Root.CountFields(); |
+ for (int i = 0; i < nCount; i++) { |
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
+ delete pField; |
+ } |
+ delete m_pFieldTree; |
+ } |
+} |
+FX_BOOL CPDF_InterForm::m_bUpdateAP = TRUE; |
+FX_BOOL CPDF_InterForm::UpdatingAPEnabled() { |
+ return m_bUpdateAP; |
+} |
+void CPDF_InterForm::EnableUpdateAP(FX_BOOL bUpdateAP) { |
+ m_bUpdateAP = bUpdateAP; |
+} |
+CFX_ByteString CPDF_InterForm::GenerateNewResourceName( |
+ const CPDF_Dictionary* pResDict, |
+ const FX_CHAR* csType, |
+ int iMinLen, |
+ const FX_CHAR* csPrefix) { |
+ CFX_ByteString csStr = csPrefix; |
+ CFX_ByteString csBType = csType; |
+ if (csStr.IsEmpty()) { |
+ if (csBType == "ExtGState") { |
+ csStr = "GS"; |
+ } else if (csBType == "ColorSpace") { |
+ csStr = "CS"; |
+ } else if (csBType == "Font") { |
+ csStr = "ZiTi"; |
} else { |
- m = iCount; |
- } |
- if (pResDict == NULL) { |
- return csTmp; |
- } |
- CPDF_Dictionary* pDict = pResDict->GetDict(csType); |
- if (pDict == NULL) { |
- return csTmp; |
- } |
- int num = 0; |
- CFX_ByteString bsNum; |
- while (TRUE) { |
- if (!pDict->KeyExist(csTmp + bsNum)) { |
- return csTmp + bsNum; |
- } |
- if (m < iCount) { |
- csTmp += csStr[m ++]; |
- } else { |
- bsNum.Format("%d", num++); |
- } |
- m ++; |
- } |
+ csStr = "Res"; |
+ } |
+ } |
+ CFX_ByteString csTmp = csStr; |
+ int iCount = csStr.GetLength(); |
+ int m = 0; |
+ if (iMinLen > 0) { |
+ csTmp = ""; |
+ while (m < iMinLen && m < iCount) { |
+ csTmp += csStr[m++]; |
+ } |
+ while (m < iMinLen) { |
+ csTmp += '0' + m % 10; |
+ m++; |
+ } |
+ } else { |
+ m = iCount; |
+ } |
+ if (pResDict == NULL) { |
return csTmp; |
+ } |
+ CPDF_Dictionary* pDict = pResDict->GetDict(csType); |
+ if (pDict == NULL) { |
+ return csTmp; |
+ } |
+ int num = 0; |
+ CFX_ByteString bsNum; |
+ while (TRUE) { |
+ if (!pDict->KeyExist(csTmp + bsNum)) { |
+ return csTmp + bsNum; |
+ } |
+ if (m < iCount) { |
+ csTmp += csStr[m++]; |
+ } else { |
+ bsNum.Format("%d", num++); |
+ } |
+ m++; |
+ } |
+ return csTmp; |
} |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
typedef struct _PDF_FONTDATA { |
- FX_BOOL bFind; |
- LOGFONTA lf; |
+ FX_BOOL bFind; |
+ LOGFONTA lf; |
} PDF_FONTDATA, FAR* LPDF_FONTDATA; |
-static int CALLBACK EnumFontFamExProc( ENUMLOGFONTEXA *lpelfe, |
- NEWTEXTMETRICEX *lpntme, |
- DWORD FontType, |
- LPARAM lParam |
- ) |
-{ |
- if (FontType != 0x004 || strchr(lpelfe->elfLogFont.lfFaceName, '@') != NULL) { |
- return 1; |
- } |
- LPDF_FONTDATA pData = (LPDF_FONTDATA)lParam; |
- memcpy(&pData->lf, &lpelfe->elfLogFont, sizeof(LOGFONTA)); |
- pData->bFind = TRUE; |
- return 0; |
-} |
-static FX_BOOL RetrieveSpecificFont(LOGFONTA& lf) |
-{ |
- PDF_FONTDATA fd; |
- memset(&fd, 0, sizeof(PDF_FONTDATA)); |
- HDC hDC = ::GetDC(NULL); |
- EnumFontFamiliesExA(hDC, &lf, (FONTENUMPROCA)EnumFontFamExProc, (LPARAM)&fd, 0); |
- ::ReleaseDC(NULL, hDC); |
- if (fd.bFind) { |
- memcpy(&lf, &fd.lf, sizeof(LOGFONTA)); |
- } |
- return fd.bFind; |
-} |
-static FX_BOOL RetrieveSpecificFont(uint8_t charSet, uint8_t pitchAndFamily, LPCSTR pcsFontName, LOGFONTA& lf) |
-{ |
+static int CALLBACK EnumFontFamExProc(ENUMLOGFONTEXA* lpelfe, |
+ NEWTEXTMETRICEX* lpntme, |
+ DWORD FontType, |
+ LPARAM lParam) { |
+ if (FontType != 0x004 || strchr(lpelfe->elfLogFont.lfFaceName, '@') != NULL) { |
+ return 1; |
+ } |
+ LPDF_FONTDATA pData = (LPDF_FONTDATA)lParam; |
+ memcpy(&pData->lf, &lpelfe->elfLogFont, sizeof(LOGFONTA)); |
+ pData->bFind = TRUE; |
+ return 0; |
+} |
+static FX_BOOL RetrieveSpecificFont(LOGFONTA& lf) { |
+ PDF_FONTDATA fd; |
+ memset(&fd, 0, sizeof(PDF_FONTDATA)); |
+ HDC hDC = ::GetDC(NULL); |
+ EnumFontFamiliesExA(hDC, &lf, (FONTENUMPROCA)EnumFontFamExProc, (LPARAM)&fd, |
+ 0); |
+ ::ReleaseDC(NULL, hDC); |
+ if (fd.bFind) { |
+ memcpy(&lf, &fd.lf, sizeof(LOGFONTA)); |
+ } |
+ return fd.bFind; |
+} |
+static FX_BOOL RetrieveSpecificFont(uint8_t charSet, |
+ uint8_t pitchAndFamily, |
+ LPCSTR pcsFontName, |
+ LOGFONTA& lf) { |
+ memset(&lf, 0, sizeof(LOGFONTA)); |
+ lf.lfCharSet = charSet; |
+ lf.lfPitchAndFamily = pitchAndFamily; |
+ if (pcsFontName != NULL) { |
+ strcpy(lf.lfFaceName, pcsFontName); |
+ } |
+ return RetrieveSpecificFont(lf); |
+} |
+static FX_BOOL RetrieveStockFont(int iFontObject, |
+ uint8_t charSet, |
+ LOGFONTA& lf) { |
+ HFONT hFont = (HFONT)::GetStockObject(iFontObject); |
+ if (hFont != NULL) { |
memset(&lf, 0, sizeof(LOGFONTA)); |
- lf.lfCharSet = charSet; |
- lf.lfPitchAndFamily = pitchAndFamily; |
- if (pcsFontName != NULL) { |
- strcpy(lf.lfFaceName, pcsFontName); |
- } |
- return RetrieveSpecificFont(lf); |
-} |
-static FX_BOOL RetrieveStockFont(int iFontObject, uint8_t charSet, LOGFONTA& lf) |
-{ |
- HFONT hFont = (HFONT)::GetStockObject(iFontObject); |
- if (hFont != NULL) { |
- memset(&lf, 0, sizeof(LOGFONTA)); |
- int iRet = ::GetObject(hFont, sizeof(LOGFONTA), &lf); |
- if (iRet > 0 && (lf.lfCharSet == charSet || charSet == 255)) { |
- return RetrieveSpecificFont(lf); |
- } |
+ int iRet = ::GetObject(hFont, sizeof(LOGFONTA), &lf); |
+ if (iRet > 0 && (lf.lfCharSet == charSet || charSet == 255)) { |
+ return RetrieveSpecificFont(lf); |
} |
- return FALSE; |
+ } |
+ return FALSE; |
} |
#endif |
-CPDF_Font* CPDF_InterForm::AddSystemDefaultFont(const CPDF_Document* pDocument) |
-{ |
- if (pDocument == NULL) { |
- return NULL; |
- } |
- CPDF_Font* pFont = NULL; |
+CPDF_Font* CPDF_InterForm::AddSystemDefaultFont( |
+ const CPDF_Document* pDocument) { |
+ if (pDocument == NULL) { |
+ return NULL; |
+ } |
+ CPDF_Font* pFont = NULL; |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
- LOGFONTA lf; |
- FX_BOOL bRet; |
- bRet = RetrieveStockFont(DEFAULT_GUI_FONT, 255, lf); |
- if (!bRet) { |
- bRet = RetrieveStockFont(SYSTEM_FONT, 255, lf); |
- } |
- if (bRet) { |
- pFont = ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE); |
- } |
+ LOGFONTA lf; |
+ FX_BOOL bRet; |
+ bRet = RetrieveStockFont(DEFAULT_GUI_FONT, 255, lf); |
+ if (!bRet) { |
+ bRet = RetrieveStockFont(SYSTEM_FONT, 255, lf); |
+ } |
+ if (bRet) { |
+ pFont = ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE); |
+ } |
#endif |
- return pFont; |
+ return pFont; |
} |
-CPDF_Font* CPDF_InterForm::AddSystemFont(const CPDF_Document* pDocument, CFX_ByteString csFontName, uint8_t iCharSet) |
-{ |
- if (pDocument == NULL || csFontName.IsEmpty()) { |
- return NULL; |
- } |
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
- if (iCharSet == 1) { |
- iCharSet = GetNativeCharSet(); |
- } |
- HFONT hFont = ::CreateFontA(0, 0, 0, 0, 0, 0, 0, 0, iCharSet, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, csFontName.c_str()); |
- if (hFont != NULL) { |
- LOGFONTA lf; |
- memset(&lf, 0, sizeof(LOGFONTA)); |
- ::GetObjectA(hFont, sizeof(LOGFONTA), &lf); |
- ::DeleteObject(hFont); |
- if (strlen(lf.lfFaceName) > 0) { |
- return ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE); |
- } |
- } |
-#endif |
+CPDF_Font* CPDF_InterForm::AddSystemFont(const CPDF_Document* pDocument, |
+ CFX_ByteString csFontName, |
+ uint8_t iCharSet) { |
+ if (pDocument == NULL || csFontName.IsEmpty()) { |
return NULL; |
-} |
-CPDF_Font* CPDF_InterForm::AddSystemFont(const CPDF_Document* pDocument, CFX_WideString csFontName, uint8_t iCharSet) |
-{ |
- if (pDocument == NULL || csFontName.IsEmpty()) { |
- return NULL; |
- } |
+ } |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
- if (iCharSet == 1) { |
- iCharSet = GetNativeCharSet(); |
- } |
- HFONT hFont = ::CreateFontW(0, 0, 0, 0, 0, 0, 0, 0, iCharSet, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, csFontName.c_str()); |
- if (hFont != NULL) { |
- LOGFONTA lf; |
- memset(&lf, 0, sizeof(LOGFONTA)); |
- ::GetObject(hFont, sizeof(LOGFONTA), &lf); |
- ::DeleteObject(hFont); |
- if (strlen(lf.lfFaceName) > 0) { |
- return ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE); |
- } |
+ if (iCharSet == 1) { |
+ iCharSet = GetNativeCharSet(); |
+ } |
+ HFONT hFont = ::CreateFontA( |
+ 0, 0, 0, 0, 0, 0, 0, 0, iCharSet, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, |
+ DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, csFontName.c_str()); |
+ if (hFont != NULL) { |
+ LOGFONTA lf; |
+ memset(&lf, 0, sizeof(LOGFONTA)); |
+ ::GetObjectA(hFont, sizeof(LOGFONTA), &lf); |
+ ::DeleteObject(hFont); |
+ if (strlen(lf.lfFaceName) > 0) { |
+ return ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE); |
} |
+ } |
#endif |
- return NULL; |
+ return NULL; |
} |
-CPDF_Font* CPDF_InterForm::AddStandardFont(const CPDF_Document* pDocument, CFX_ByteString csFontName) |
-{ |
- if (pDocument == NULL || csFontName.IsEmpty()) { |
- return NULL; |
- } |
- CPDF_Font* pFont = NULL; |
- if (csFontName == "ZapfDingbats") { |
- pFont = ((CPDF_Document*)pDocument)->AddStandardFont(csFontName, NULL); |
- } else { |
- CPDF_FontEncoding encoding(PDFFONT_ENCODING_WINANSI); |
- pFont = ((CPDF_Document*)pDocument)->AddStandardFont(csFontName, &encoding); |
- } |
- return pFont; |
-} |
-CFX_ByteString CPDF_InterForm::GetNativeFont(uint8_t charSet, void* pLogFont) |
-{ |
- CFX_ByteString csFontName; |
+CPDF_Font* CPDF_InterForm::AddSystemFont(const CPDF_Document* pDocument, |
+ CFX_WideString csFontName, |
+ uint8_t iCharSet) { |
+ if (pDocument == NULL || csFontName.IsEmpty()) { |
+ return NULL; |
+ } |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
+ if (iCharSet == 1) { |
+ iCharSet = GetNativeCharSet(); |
+ } |
+ HFONT hFont = ::CreateFontW( |
+ 0, 0, 0, 0, 0, 0, 0, 0, iCharSet, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, |
+ DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, csFontName.c_str()); |
+ if (hFont != NULL) { |
LOGFONTA lf; |
- FX_BOOL bRet; |
- if (charSet == ANSI_CHARSET) { |
- csFontName = "Helvetica"; |
- return csFontName; |
- } |
- bRet = FALSE; |
- if (charSet == SHIFTJIS_CHARSET) { |
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "MS Mincho", lf); |
- } else if (charSet == GB2312_CHARSET) { |
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "SimSun", lf); |
- } else if (charSet == CHINESEBIG5_CHARSET) { |
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "MingLiU", lf); |
- } |
- if (!bRet) { |
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "Arial Unicode MS", lf); |
- } |
- if (!bRet) { |
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "Microsoft Sans Serif", lf); |
- } |
- if (!bRet) { |
- bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, NULL, lf); |
- } |
- if (bRet) { |
- if (pLogFont != NULL) { |
- memcpy(pLogFont, &lf, sizeof(LOGFONTA)); |
- } |
- csFontName = lf.lfFaceName; |
- return csFontName; |
+ memset(&lf, 0, sizeof(LOGFONTA)); |
+ ::GetObject(hFont, sizeof(LOGFONTA), &lf); |
+ ::DeleteObject(hFont); |
+ if (strlen(lf.lfFaceName) > 0) { |
+ return ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE); |
} |
+ } |
#endif |
+ return NULL; |
+} |
+CPDF_Font* CPDF_InterForm::AddStandardFont(const CPDF_Document* pDocument, |
+ CFX_ByteString csFontName) { |
+ if (pDocument == NULL || csFontName.IsEmpty()) { |
+ return NULL; |
+ } |
+ CPDF_Font* pFont = NULL; |
+ if (csFontName == "ZapfDingbats") { |
+ pFont = ((CPDF_Document*)pDocument)->AddStandardFont(csFontName, NULL); |
+ } else { |
+ CPDF_FontEncoding encoding(PDFFONT_ENCODING_WINANSI); |
+ pFont = ((CPDF_Document*)pDocument)->AddStandardFont(csFontName, &encoding); |
+ } |
+ return pFont; |
+} |
+CFX_ByteString CPDF_InterForm::GetNativeFont(uint8_t charSet, void* pLogFont) { |
+ CFX_ByteString csFontName; |
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
+ LOGFONTA lf; |
+ FX_BOOL bRet; |
+ if (charSet == ANSI_CHARSET) { |
+ csFontName = "Helvetica"; |
return csFontName; |
+ } |
+ bRet = FALSE; |
+ if (charSet == SHIFTJIS_CHARSET) { |
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, |
+ "MS Mincho", lf); |
+ } else if (charSet == GB2312_CHARSET) { |
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "SimSun", |
+ lf); |
+ } else if (charSet == CHINESEBIG5_CHARSET) { |
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, "MingLiU", |
+ lf); |
+ } |
+ if (!bRet) { |
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, |
+ "Arial Unicode MS", lf); |
+ } |
+ if (!bRet) { |
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, |
+ "Microsoft Sans Serif", lf); |
+ } |
+ if (!bRet) { |
+ bRet = RetrieveSpecificFont(charSet, DEFAULT_PITCH | FF_DONTCARE, NULL, lf); |
+ } |
+ if (bRet) { |
+ if (pLogFont != NULL) { |
+ memcpy(pLogFont, &lf, sizeof(LOGFONTA)); |
+ } |
+ csFontName = lf.lfFaceName; |
+ return csFontName; |
+ } |
+#endif |
+ return csFontName; |
} |
-CFX_ByteString CPDF_InterForm::GetNativeFont(void* pLogFont) |
-{ |
+CFX_ByteString CPDF_InterForm::GetNativeFont(void* pLogFont) { |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
- uint8_t charSet = GetNativeCharSet(); |
- return GetNativeFont(charSet, pLogFont); |
+ uint8_t charSet = GetNativeCharSet(); |
+ return GetNativeFont(charSet, pLogFont); |
#else |
- return CFX_ByteString(); |
+ return CFX_ByteString(); |
#endif |
} |
-uint8_t CPDF_InterForm::GetNativeCharSet() |
-{ |
+uint8_t CPDF_InterForm::GetNativeCharSet() { |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
- uint8_t charSet = ANSI_CHARSET; |
- UINT iCodePage = ::GetACP(); |
- switch (iCodePage) { |
- case 932: |
- charSet = SHIFTJIS_CHARSET; |
- break; |
- case 936: |
- charSet = GB2312_CHARSET; |
- break; |
- case 950: |
- charSet = CHINESEBIG5_CHARSET; |
- break; |
- case 1252: |
- charSet = ANSI_CHARSET; |
- break; |
- case 874: |
- charSet = THAI_CHARSET; |
- break; |
- case 949: |
- charSet = HANGUL_CHARSET; |
- break; |
- case 1200: |
- charSet = ANSI_CHARSET; |
- break; |
- case 1250: |
- charSet = EASTEUROPE_CHARSET; |
- break; |
- case 1251: |
- charSet = RUSSIAN_CHARSET; |
- break; |
- case 1253: |
- charSet = GREEK_CHARSET; |
- break; |
- case 1254: |
- charSet = TURKISH_CHARSET; |
- break; |
- case 1255: |
- charSet = HEBREW_CHARSET; |
- break; |
- case 1256: |
- charSet = ARABIC_CHARSET; |
- break; |
- case 1257: |
- charSet = BALTIC_CHARSET; |
- break; |
- case 1258: |
- charSet = VIETNAMESE_CHARSET; |
- break; |
- case 1361: |
- charSet = JOHAB_CHARSET; |
- break; |
- } |
- return charSet; |
+ uint8_t charSet = ANSI_CHARSET; |
+ UINT iCodePage = ::GetACP(); |
+ switch (iCodePage) { |
+ case 932: |
+ charSet = SHIFTJIS_CHARSET; |
+ break; |
+ case 936: |
+ charSet = GB2312_CHARSET; |
+ break; |
+ case 950: |
+ charSet = CHINESEBIG5_CHARSET; |
+ break; |
+ case 1252: |
+ charSet = ANSI_CHARSET; |
+ break; |
+ case 874: |
+ charSet = THAI_CHARSET; |
+ break; |
+ case 949: |
+ charSet = HANGUL_CHARSET; |
+ break; |
+ case 1200: |
+ charSet = ANSI_CHARSET; |
+ break; |
+ case 1250: |
+ charSet = EASTEUROPE_CHARSET; |
+ break; |
+ case 1251: |
+ charSet = RUSSIAN_CHARSET; |
+ break; |
+ case 1253: |
+ charSet = GREEK_CHARSET; |
+ break; |
+ case 1254: |
+ charSet = TURKISH_CHARSET; |
+ break; |
+ case 1255: |
+ charSet = HEBREW_CHARSET; |
+ break; |
+ case 1256: |
+ charSet = ARABIC_CHARSET; |
+ break; |
+ case 1257: |
+ charSet = BALTIC_CHARSET; |
+ break; |
+ case 1258: |
+ charSet = VIETNAMESE_CHARSET; |
+ break; |
+ case 1361: |
+ charSet = JOHAB_CHARSET; |
+ break; |
+ } |
+ return charSet; |
#else |
- return 0; |
+ return 0; |
#endif |
} |
-CPDF_Font* CPDF_InterForm::AddNativeFont(uint8_t charSet, const CPDF_Document* pDocument) |
-{ |
- if (pDocument == NULL) { |
- return NULL; |
- } |
- CPDF_Font* pFont = NULL; |
+CPDF_Font* CPDF_InterForm::AddNativeFont(uint8_t charSet, |
+ const CPDF_Document* pDocument) { |
+ if (pDocument == NULL) { |
+ return NULL; |
+ } |
+ CPDF_Font* pFont = NULL; |
#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
- LOGFONTA lf; |
- CFX_ByteString csFontName = GetNativeFont(charSet, &lf); |
- if (!csFontName.IsEmpty()) { |
- if (csFontName == "Helvetica") { |
- pFont = AddStandardFont(pDocument, csFontName); |
- } else { |
- pFont = ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE); |
- } |
+ LOGFONTA lf; |
+ CFX_ByteString csFontName = GetNativeFont(charSet, &lf); |
+ if (!csFontName.IsEmpty()) { |
+ if (csFontName == "Helvetica") { |
+ pFont = AddStandardFont(pDocument, csFontName); |
+ } else { |
+ pFont = ((CPDF_Document*)pDocument)->AddWindowsFont(&lf, FALSE, TRUE); |
} |
+ } |
#endif |
- return pFont; |
-} |
-CPDF_Font* CPDF_InterForm::AddNativeFont(const CPDF_Document* pDocument) |
-{ |
- if (pDocument == NULL) { |
- return NULL; |
- } |
- CPDF_Font* pFont = NULL; |
- uint8_t charSet = GetNativeCharSet(); |
- pFont = AddNativeFont(charSet, pDocument); |
- return pFont; |
+ return pFont; |
} |
-FX_BOOL CPDF_InterForm::ValidateFieldName(CFX_WideString& csNewFieldName, int iType, const CPDF_FormField* pExcludedField, const CPDF_FormControl* pExcludedControl) |
-{ |
- if (csNewFieldName.IsEmpty()) { |
- return FALSE; |
- } |
- int iPos = 0; |
- int iLength = csNewFieldName.GetLength(); |
- CFX_WideString csSub; |
- while (TRUE) { |
- while (iPos < iLength && (csNewFieldName[iPos] == L'.' || csNewFieldName[iPos] == L' ')) { |
- iPos ++; |
- } |
- if (iPos < iLength && !csSub.IsEmpty()) { |
- csSub += L'.'; |
- } |
- while (iPos < iLength && csNewFieldName[iPos] != L'.') { |
- csSub += csNewFieldName[iPos ++]; |
+CPDF_Font* CPDF_InterForm::AddNativeFont(const CPDF_Document* pDocument) { |
+ if (pDocument == NULL) { |
+ return NULL; |
+ } |
+ CPDF_Font* pFont = NULL; |
+ uint8_t charSet = GetNativeCharSet(); |
+ pFont = AddNativeFont(charSet, pDocument); |
+ return pFont; |
+} |
+FX_BOOL CPDF_InterForm::ValidateFieldName( |
+ CFX_WideString& csNewFieldName, |
+ int iType, |
+ const CPDF_FormField* pExcludedField, |
+ const CPDF_FormControl* pExcludedControl) { |
+ if (csNewFieldName.IsEmpty()) { |
+ return FALSE; |
+ } |
+ int iPos = 0; |
+ int iLength = csNewFieldName.GetLength(); |
+ CFX_WideString csSub; |
+ while (TRUE) { |
+ while (iPos < iLength && |
+ (csNewFieldName[iPos] == L'.' || csNewFieldName[iPos] == L' ')) { |
+ iPos++; |
+ } |
+ if (iPos < iLength && !csSub.IsEmpty()) { |
+ csSub += L'.'; |
+ } |
+ while (iPos < iLength && csNewFieldName[iPos] != L'.') { |
+ csSub += csNewFieldName[iPos++]; |
+ } |
+ for (int i = csSub.GetLength() - 1; i > -1; i--) { |
+ if (csSub[i] == L' ' || csSub[i] == L'.') { |
+ csSub.SetAt(i, L'\0'); |
+ } else { |
+ break; |
+ } |
+ } |
+ FX_DWORD dwCount = m_pFieldTree->m_Root.CountFields(); |
+ for (FX_DWORD m = 0; m < dwCount; m++) { |
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(m); |
+ if (pField == NULL) { |
+ continue; |
+ } |
+ if (pField == pExcludedField) { |
+ if (pExcludedControl != NULL) { |
+ if (pField->CountControls() < 2) { |
+ continue; |
+ } |
+ } else { |
+ continue; |
} |
- for (int i = csSub.GetLength() - 1; i > -1; i --) { |
- if (csSub[i] == L' ' || csSub[i] == L'.') { |
- csSub.SetAt(i, L'\0'); |
- } else { |
- break; |
- } |
+ } |
+ CFX_WideString csFullName = pField->GetFullName(); |
+ int iRet = CompareFieldName(csSub, csFullName); |
+ if (iRet == 1) { |
+ if (pField->GetFieldType() != iType) { |
+ return FALSE; |
} |
- FX_DWORD dwCount = m_pFieldTree->m_Root.CountFields(); |
- for (FX_DWORD m = 0; m < dwCount; m ++) { |
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(m); |
- if (pField == NULL) { |
- continue; |
- } |
- if (pField == pExcludedField) { |
- if (pExcludedControl != NULL) { |
- if (pField->CountControls() < 2) { |
- continue; |
- } |
- } else { |
- continue; |
- } |
- } |
- CFX_WideString csFullName = pField->GetFullName(); |
- int iRet = CompareFieldName(csSub, csFullName); |
- if (iRet == 1) { |
- if (pField->GetFieldType() != iType) { |
- return FALSE; |
- } |
- } else if (iRet == 2 && csSub == csNewFieldName) { |
- if (csFullName[iPos] == L'.') { |
- return FALSE; |
- } |
- } else if (iRet == 3 && csSub == csNewFieldName) { |
- if (csNewFieldName[csFullName.GetLength()] == L'.') { |
- return FALSE; |
- } |
- } |
+ } else if (iRet == 2 && csSub == csNewFieldName) { |
+ if (csFullName[iPos] == L'.') { |
+ return FALSE; |
} |
- if (iPos >= iLength) { |
- break; |
+ } else if (iRet == 3 && csSub == csNewFieldName) { |
+ if (csNewFieldName[csFullName.GetLength()] == L'.') { |
+ return FALSE; |
} |
+ } |
} |
- if (csSub.IsEmpty()) { |
- return FALSE; |
+ if (iPos >= iLength) { |
+ break; |
} |
- csNewFieldName = csSub; |
- return TRUE; |
-} |
-FX_BOOL CPDF_InterForm::ValidateFieldName(CFX_WideString& csNewFieldName, int iType) |
-{ |
- return ValidateFieldName(csNewFieldName, iType, NULL, NULL); |
-} |
-FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormField* pField, CFX_WideString& csNewFieldName) |
-{ |
- if (pField == NULL || csNewFieldName.IsEmpty()) { |
- return FALSE; |
- } |
- return ValidateFieldName(csNewFieldName, ((CPDF_FormField*)pField)->GetFieldType(), pField, NULL); |
+ } |
+ if (csSub.IsEmpty()) { |
+ return FALSE; |
+ } |
+ csNewFieldName = csSub; |
+ return TRUE; |
} |
-FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormControl* pControl, CFX_WideString& csNewFieldName) |
-{ |
- if (pControl == NULL || csNewFieldName.IsEmpty()) { |
- return FALSE; |
- } |
- CPDF_FormField* pField = ((CPDF_FormControl*)pControl)->GetField(); |
- return ValidateFieldName(csNewFieldName, pField->GetFieldType(), pField, pControl); |
+FX_BOOL CPDF_InterForm::ValidateFieldName(CFX_WideString& csNewFieldName, |
+ int iType) { |
+ return ValidateFieldName(csNewFieldName, iType, NULL, NULL); |
} |
-int CPDF_InterForm::CompareFieldName(const CFX_ByteString& name1, const CFX_ByteString& name2) |
-{ |
- const FX_CHAR* ptr1 = name1; |
- const FX_CHAR* ptr2 = name2; |
- if (name1.GetLength() == name2.GetLength()) { |
- return name1 == name2 ? 1 : 0; |
- } |
- int i = 0; |
- while (ptr1[i] == ptr2[i]) { |
- i ++; |
- } |
- if (i == name1.GetLength()) { |
- return 2; |
- } |
- if (i == name2.GetLength()) { |
- return 3; |
- } |
- return 0; |
+FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormField* pField, |
+ CFX_WideString& csNewFieldName) { |
+ if (pField == NULL || csNewFieldName.IsEmpty()) { |
+ return FALSE; |
+ } |
+ return ValidateFieldName( |
+ csNewFieldName, ((CPDF_FormField*)pField)->GetFieldType(), pField, NULL); |
} |
-int CPDF_InterForm::CompareFieldName(const CFX_WideString& name1, const CFX_WideString& name2) |
-{ |
- const FX_WCHAR* ptr1 = name1.c_str(); |
- const FX_WCHAR* ptr2 = name2.c_str(); |
- if (name1.GetLength() == name2.GetLength()) { |
- return name1 == name2 ? 1 : 0; |
- } |
- int i = 0; |
- while (ptr1[i] == ptr2[i]) { |
- i ++; |
- } |
- if (i == name1.GetLength()) { |
- return 2; |
- } |
- if (i == name2.GetLength()) { |
- return 3; |
- } |
+FX_BOOL CPDF_InterForm::ValidateFieldName(const CPDF_FormControl* pControl, |
+ CFX_WideString& csNewFieldName) { |
+ if (pControl == NULL || csNewFieldName.IsEmpty()) { |
+ return FALSE; |
+ } |
+ CPDF_FormField* pField = ((CPDF_FormControl*)pControl)->GetField(); |
+ return ValidateFieldName(csNewFieldName, pField->GetFieldType(), pField, |
+ pControl); |
+} |
+int CPDF_InterForm::CompareFieldName(const CFX_ByteString& name1, |
+ const CFX_ByteString& name2) { |
+ const FX_CHAR* ptr1 = name1; |
+ const FX_CHAR* ptr2 = name2; |
+ if (name1.GetLength() == name2.GetLength()) { |
+ return name1 == name2 ? 1 : 0; |
+ } |
+ int i = 0; |
+ while (ptr1[i] == ptr2[i]) { |
+ i++; |
+ } |
+ if (i == name1.GetLength()) { |
+ return 2; |
+ } |
+ if (i == name2.GetLength()) { |
+ return 3; |
+ } |
+ return 0; |
+} |
+int CPDF_InterForm::CompareFieldName(const CFX_WideString& name1, |
+ const CFX_WideString& name2) { |
+ const FX_WCHAR* ptr1 = name1.c_str(); |
+ const FX_WCHAR* ptr2 = name2.c_str(); |
+ if (name1.GetLength() == name2.GetLength()) { |
+ return name1 == name2 ? 1 : 0; |
+ } |
+ int i = 0; |
+ while (ptr1[i] == ptr2[i]) { |
+ i++; |
+ } |
+ if (i == name1.GetLength()) { |
+ return 2; |
+ } |
+ if (i == name2.GetLength()) { |
+ return 3; |
+ } |
+ return 0; |
+} |
+FX_DWORD CPDF_InterForm::CountFields(const CFX_WideString& csFieldName) { |
+ if (csFieldName.IsEmpty()) { |
+ return (FX_DWORD)m_pFieldTree->m_Root.CountFields(); |
+ } |
+ CFieldTree::_Node* pNode = m_pFieldTree->FindNode(csFieldName); |
+ if (pNode == NULL) { |
return 0; |
-} |
-FX_DWORD CPDF_InterForm::CountFields(const CFX_WideString &csFieldName) |
-{ |
- if (csFieldName.IsEmpty()) { |
- return (FX_DWORD)m_pFieldTree->m_Root.CountFields(); |
- } |
- CFieldTree::_Node *pNode = m_pFieldTree->FindNode(csFieldName); |
- if (pNode == NULL) { |
- return 0; |
- } |
- return pNode->CountFields(); |
-} |
-CPDF_FormField* CPDF_InterForm::GetField(FX_DWORD index, const CFX_WideString &csFieldName) |
-{ |
- if (csFieldName == L"") { |
- return m_pFieldTree->m_Root.GetField(index); |
- } |
- CFieldTree::_Node *pNode = m_pFieldTree->FindNode(csFieldName); |
- if (pNode == NULL) { |
- return NULL; |
- } |
- return pNode->GetField(index); |
-} |
-void CPDF_InterForm::GetAllFieldNames(CFX_WideStringArray& allFieldNames) |
-{ |
- allFieldNames.RemoveAll(); |
- int nCount = m_pFieldTree->m_Root.CountFields(); |
- for (int i = 0; i < nCount; i ++) { |
- CPDF_FormField *pField = m_pFieldTree->m_Root.GetField(i); |
- if (pField) { |
- CFX_WideString full_name = GetFullName(pField->GetFieldDict()); |
- allFieldNames.Add(full_name); |
- } |
- } |
-} |
-FX_BOOL CPDF_InterForm::IsValidFormField(const void* pField) |
-{ |
- if (pField == NULL) { |
- return FALSE; |
- } |
- int nCount = m_pFieldTree->m_Root.CountFields(); |
- for (int i = 0; i < nCount; i++) { |
- CPDF_FormField *pFormField = m_pFieldTree->m_Root.GetField(i); |
- if (pField == pFormField) { |
- return TRUE; |
- } |
- } |
+ } |
+ return pNode->CountFields(); |
+} |
+CPDF_FormField* CPDF_InterForm::GetField(FX_DWORD index, |
+ const CFX_WideString& csFieldName) { |
+ if (csFieldName == L"") { |
+ return m_pFieldTree->m_Root.GetField(index); |
+ } |
+ CFieldTree::_Node* pNode = m_pFieldTree->FindNode(csFieldName); |
+ if (pNode == NULL) { |
+ return NULL; |
+ } |
+ return pNode->GetField(index); |
+} |
+void CPDF_InterForm::GetAllFieldNames(CFX_WideStringArray& allFieldNames) { |
+ allFieldNames.RemoveAll(); |
+ int nCount = m_pFieldTree->m_Root.CountFields(); |
+ for (int i = 0; i < nCount; i++) { |
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
+ if (pField) { |
+ CFX_WideString full_name = GetFullName(pField->GetFieldDict()); |
+ allFieldNames.Add(full_name); |
+ } |
+ } |
+} |
+FX_BOOL CPDF_InterForm::IsValidFormField(const void* pField) { |
+ if (pField == NULL) { |
return FALSE; |
-} |
-CPDF_FormField* CPDF_InterForm::GetFieldByDict(CPDF_Dictionary* pFieldDict) const |
-{ |
- if (pFieldDict == NULL) { |
- return NULL; |
- } |
- CFX_WideString csWName = GetFullName(pFieldDict); |
- return m_pFieldTree->GetField(csWName); |
-} |
-FX_DWORD CPDF_InterForm::CountControls(CFX_WideString csFieldName) |
-{ |
- if (csFieldName.IsEmpty()) { |
- return (FX_DWORD)m_ControlMap.GetCount(); |
- } |
- CPDF_FormField *pField = m_pFieldTree->GetField(csFieldName); |
- if (pField == NULL) { |
- return 0; |
- } |
- return pField->m_ControlList.GetSize(); |
-} |
-CPDF_FormControl* CPDF_InterForm::GetControl(FX_DWORD index, CFX_WideString csFieldName) |
-{ |
- CPDF_FormField *pField = m_pFieldTree->GetField(csFieldName); |
- if (pField == NULL) { |
- return NULL; |
- } |
- if (index < (FX_DWORD)pField->m_ControlList.GetSize()) { |
- return (CPDF_FormControl *)pField->m_ControlList.GetAt(index); |
- } |
+ } |
+ int nCount = m_pFieldTree->m_Root.CountFields(); |
+ for (int i = 0; i < nCount; i++) { |
+ CPDF_FormField* pFormField = m_pFieldTree->m_Root.GetField(i); |
+ if (pField == pFormField) { |
+ return TRUE; |
+ } |
+ } |
+ return FALSE; |
+} |
+CPDF_FormField* CPDF_InterForm::GetFieldByDict( |
+ CPDF_Dictionary* pFieldDict) const { |
+ if (pFieldDict == NULL) { |
return NULL; |
+ } |
+ CFX_WideString csWName = GetFullName(pFieldDict); |
+ return m_pFieldTree->GetField(csWName); |
+} |
+FX_DWORD CPDF_InterForm::CountControls(CFX_WideString csFieldName) { |
+ if (csFieldName.IsEmpty()) { |
+ return (FX_DWORD)m_ControlMap.GetCount(); |
+ } |
+ CPDF_FormField* pField = m_pFieldTree->GetField(csFieldName); |
+ if (pField == NULL) { |
+ return 0; |
+ } |
+ return pField->m_ControlList.GetSize(); |
} |
-FX_BOOL CPDF_InterForm::IsValidFormControl(const void* pControl) |
-{ |
- if (pControl == NULL) { |
- return FALSE; |
- } |
- FX_POSITION pos = m_ControlMap.GetStartPosition(); |
- while (pos) { |
- CPDF_Dictionary* pWidgetDict = NULL; |
- void* pFormControl = NULL; |
- m_ControlMap.GetNextAssoc(pos, (void*&)pWidgetDict, pFormControl); |
- if (pControl == pFormControl) { |
- return TRUE; |
- } |
- } |
+CPDF_FormControl* CPDF_InterForm::GetControl(FX_DWORD index, |
+ CFX_WideString csFieldName) { |
+ CPDF_FormField* pField = m_pFieldTree->GetField(csFieldName); |
+ if (pField == NULL) { |
+ return NULL; |
+ } |
+ if (index < (FX_DWORD)pField->m_ControlList.GetSize()) { |
+ return (CPDF_FormControl*)pField->m_ControlList.GetAt(index); |
+ } |
+ return NULL; |
+} |
+FX_BOOL CPDF_InterForm::IsValidFormControl(const void* pControl) { |
+ if (pControl == NULL) { |
return FALSE; |
-} |
-int CPDF_InterForm::CountPageControls(CPDF_Page* pPage) const |
-{ |
- CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots"); |
- if (pAnnotList == NULL) { |
- return 0; |
- } |
- int count = 0; |
- for (FX_DWORD i = 0; i < pAnnotList->GetCount(); i ++) { |
- CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i); |
- if (pAnnot == NULL) { |
- continue; |
- } |
- CPDF_FormControl* pControl; |
- if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) { |
- continue; |
- } |
- count ++; |
- } |
- return count; |
-} |
-CPDF_FormControl* CPDF_InterForm::GetPageControl(CPDF_Page* pPage, int index) const |
-{ |
- CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots"); |
- if (pAnnotList == NULL) { |
- return NULL; |
- } |
- int count = 0; |
- for (FX_DWORD i = 0; i < pAnnotList->GetCount(); i ++) { |
- CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i); |
- if (pAnnot == NULL) { |
- continue; |
- } |
- CPDF_FormControl* pControl; |
- if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) { |
- continue; |
- } |
- if (index == count) { |
- return pControl; |
- } |
- count ++; |
- } |
+ } |
+ FX_POSITION pos = m_ControlMap.GetStartPosition(); |
+ while (pos) { |
+ CPDF_Dictionary* pWidgetDict = NULL; |
+ void* pFormControl = NULL; |
+ m_ControlMap.GetNextAssoc(pos, (void*&)pWidgetDict, pFormControl); |
+ if (pControl == pFormControl) { |
+ return TRUE; |
+ } |
+ } |
+ return FALSE; |
+} |
+int CPDF_InterForm::CountPageControls(CPDF_Page* pPage) const { |
+ CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots"); |
+ if (pAnnotList == NULL) { |
+ return 0; |
+ } |
+ int count = 0; |
+ for (FX_DWORD i = 0; i < pAnnotList->GetCount(); i++) { |
+ CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i); |
+ if (pAnnot == NULL) { |
+ continue; |
+ } |
+ CPDF_FormControl* pControl; |
+ if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) { |
+ continue; |
+ } |
+ count++; |
+ } |
+ return count; |
+} |
+CPDF_FormControl* CPDF_InterForm::GetPageControl(CPDF_Page* pPage, |
+ int index) const { |
+ CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots"); |
+ if (pAnnotList == NULL) { |
return NULL; |
-} |
-CPDF_FormControl* CPDF_InterForm::GetControlAtPoint(CPDF_Page* pPage, FX_FLOAT pdf_x, FX_FLOAT pdf_y) const |
-{ |
- CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots"); |
- if (pAnnotList == NULL) { |
- return NULL; |
- } |
- for (FX_DWORD i = pAnnotList->GetCount(); i > 0; i --) { |
- CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i - 1); |
- if (pAnnot == NULL) { |
- continue; |
- } |
- CPDF_FormControl* pControl; |
- if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) { |
- continue; |
- } |
- CFX_FloatRect rect = pControl->GetRect(); |
- if (rect.Contains(pdf_x, pdf_y)) { |
- return pControl; |
- } |
- } |
+ } |
+ int count = 0; |
+ for (FX_DWORD i = 0; i < pAnnotList->GetCount(); i++) { |
+ CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i); |
+ if (pAnnot == NULL) { |
+ continue; |
+ } |
+ CPDF_FormControl* pControl; |
+ if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) { |
+ continue; |
+ } |
+ if (index == count) { |
+ return pControl; |
+ } |
+ count++; |
+ } |
+ return NULL; |
+} |
+CPDF_FormControl* CPDF_InterForm::GetControlAtPoint(CPDF_Page* pPage, |
+ FX_FLOAT pdf_x, |
+ FX_FLOAT pdf_y) const { |
+ CPDF_Array* pAnnotList = pPage->m_pFormDict->GetArray("Annots"); |
+ if (pAnnotList == NULL) { |
return NULL; |
-} |
-CPDF_FormControl* CPDF_InterForm::GetControlByDict(CPDF_Dictionary* pWidgetDict) const |
-{ |
- CPDF_FormControl* pControl = NULL; |
- m_ControlMap.Lookup(pWidgetDict, (void*&)pControl); |
- return pControl; |
-} |
-FX_DWORD CPDF_InterForm::CountInternalFields(const CFX_WideString& csFieldName) const |
-{ |
- if (!m_pFormDict) { |
- return 0; |
- } |
- CPDF_Array* pArray = m_pFormDict->GetArray("Fields"); |
- if (!pArray) { |
- return 0; |
- } |
- if (csFieldName.IsEmpty()) { |
- return pArray->GetCount(); |
- } |
- int iLength = csFieldName.GetLength(); |
- int iPos = 0; |
- CPDF_Dictionary* pDict = NULL; |
- while (pArray != NULL) { |
- CFX_WideString csSub; |
- if (iPos < iLength && csFieldName[iPos] == L'.') { |
- iPos ++; |
- } |
- while (iPos < iLength && csFieldName[iPos] != L'.') { |
- csSub += csFieldName[iPos ++]; |
- } |
- int iCount = pArray->GetCount(); |
- FX_BOOL bFind = FALSE; |
- for (int i = 0; i < iCount; i ++) { |
- pDict = pArray->GetDict(i); |
- if (pDict == NULL) { |
- continue; |
- } |
- CFX_WideString csT = pDict->GetUnicodeText("T"); |
- if (csT == csSub) { |
- bFind = TRUE; |
- break; |
- } |
- } |
- if (!bFind) { |
- return 0; |
- } |
- if (iPos >= iLength) { |
- break; |
- } |
- pArray = pDict->GetArray("Kids"); |
- } |
- if (!pDict) { |
- return 0; |
+ } |
+ for (FX_DWORD i = pAnnotList->GetCount(); i > 0; i--) { |
+ CPDF_Dictionary* pAnnot = pAnnotList->GetDict(i - 1); |
+ if (pAnnot == NULL) { |
+ continue; |
+ } |
+ CPDF_FormControl* pControl; |
+ if (!m_ControlMap.Lookup(pAnnot, (void*&)pControl)) { |
+ continue; |
+ } |
+ CFX_FloatRect rect = pControl->GetRect(); |
+ if (rect.Contains(pdf_x, pdf_y)) { |
+ return pControl; |
+ } |
+ } |
+ return NULL; |
+} |
+CPDF_FormControl* CPDF_InterForm::GetControlByDict( |
+ CPDF_Dictionary* pWidgetDict) const { |
+ CPDF_FormControl* pControl = NULL; |
+ m_ControlMap.Lookup(pWidgetDict, (void*&)pControl); |
+ return pControl; |
+} |
+FX_DWORD CPDF_InterForm::CountInternalFields( |
+ const CFX_WideString& csFieldName) const { |
+ if (!m_pFormDict) { |
+ return 0; |
+ } |
+ CPDF_Array* pArray = m_pFormDict->GetArray("Fields"); |
+ if (!pArray) { |
+ return 0; |
+ } |
+ if (csFieldName.IsEmpty()) { |
+ return pArray->GetCount(); |
+ } |
+ int iLength = csFieldName.GetLength(); |
+ int iPos = 0; |
+ CPDF_Dictionary* pDict = NULL; |
+ while (pArray != NULL) { |
+ CFX_WideString csSub; |
+ if (iPos < iLength && csFieldName[iPos] == L'.') { |
+ iPos++; |
+ } |
+ while (iPos < iLength && csFieldName[iPos] != L'.') { |
+ csSub += csFieldName[iPos++]; |
+ } |
+ int iCount = pArray->GetCount(); |
+ FX_BOOL bFind = FALSE; |
+ for (int i = 0; i < iCount; i++) { |
+ pDict = pArray->GetDict(i); |
+ if (pDict == NULL) { |
+ continue; |
+ } |
+ CFX_WideString csT = pDict->GetUnicodeText("T"); |
+ if (csT == csSub) { |
+ bFind = TRUE; |
+ break; |
+ } |
+ } |
+ if (!bFind) { |
+ return 0; |
+ } |
+ if (iPos >= iLength) { |
+ break; |
} |
pArray = pDict->GetArray("Kids"); |
- return pArray ? pArray->GetCount() : 1; |
+ } |
+ if (!pDict) { |
+ return 0; |
+ } |
+ pArray = pDict->GetArray("Kids"); |
+ return pArray ? pArray->GetCount() : 1; |
} |
-CPDF_Dictionary* CPDF_InterForm::GetInternalField(FX_DWORD index, const CFX_WideString& csFieldName) const |
-{ |
- if (!m_pFormDict) { |
- return nullptr; |
- } |
- CPDF_Array* pArray = m_pFormDict->GetArray("Fields"); |
- if (!pArray) { |
- return nullptr; |
- } |
- if (csFieldName.IsEmpty()) { |
- return pArray->GetDict(index); |
- } |
- int iLength = csFieldName.GetLength(); |
- int iPos = 0; |
- CPDF_Dictionary* pDict = NULL; |
- while (pArray != NULL) { |
- CFX_WideString csSub; |
- if (iPos < iLength && csFieldName[iPos] == L'.') { |
- iPos ++; |
- } |
- while (iPos < iLength && csFieldName[iPos] != L'.') { |
- csSub += csFieldName[iPos ++]; |
- } |
- int iCount = pArray->GetCount(); |
- FX_BOOL bFind = FALSE; |
- for (int i = 0; i < iCount; i ++) { |
- pDict = pArray->GetDict(i); |
- if (pDict == NULL) { |
- continue; |
- } |
- CFX_WideString csT = pDict->GetUnicodeText("T"); |
- if (csT == csSub) { |
- bFind = TRUE; |
- break; |
- } |
- } |
- if (!bFind) { |
- return NULL; |
- } |
- if (iPos >= iLength) { |
- break; |
- } |
- pArray = pDict->GetArray("Kids"); |
- } |
- if (!pDict) { |
- return nullptr; |
+CPDF_Dictionary* CPDF_InterForm::GetInternalField( |
+ FX_DWORD index, |
+ const CFX_WideString& csFieldName) const { |
+ if (!m_pFormDict) { |
+ return nullptr; |
+ } |
+ CPDF_Array* pArray = m_pFormDict->GetArray("Fields"); |
+ if (!pArray) { |
+ return nullptr; |
+ } |
+ if (csFieldName.IsEmpty()) { |
+ return pArray->GetDict(index); |
+ } |
+ int iLength = csFieldName.GetLength(); |
+ int iPos = 0; |
+ CPDF_Dictionary* pDict = NULL; |
+ while (pArray != NULL) { |
+ CFX_WideString csSub; |
+ if (iPos < iLength && csFieldName[iPos] == L'.') { |
+ iPos++; |
+ } |
+ while (iPos < iLength && csFieldName[iPos] != L'.') { |
+ csSub += csFieldName[iPos++]; |
+ } |
+ int iCount = pArray->GetCount(); |
+ FX_BOOL bFind = FALSE; |
+ for (int i = 0; i < iCount; i++) { |
+ pDict = pArray->GetDict(i); |
+ if (pDict == NULL) { |
+ continue; |
+ } |
+ CFX_WideString csT = pDict->GetUnicodeText("T"); |
+ if (csT == csSub) { |
+ bFind = TRUE; |
+ break; |
+ } |
+ } |
+ if (!bFind) { |
+ return NULL; |
+ } |
+ if (iPos >= iLength) { |
+ break; |
} |
pArray = pDict->GetArray("Kids"); |
- return pArray ? pArray->GetDict(index) : pDict; |
-} |
-FX_BOOL CPDF_InterForm::NeedConstructAP() |
-{ |
- if (m_pFormDict == NULL) { |
- return FALSE; |
- } |
- return m_pFormDict->GetBoolean("NeedAppearances"); |
-} |
-void CPDF_InterForm::NeedConstructAP(FX_BOOL bNeedAP) |
-{ |
- if (m_pFormDict == NULL) { |
- InitInterFormDict(m_pFormDict, m_pDocument); |
- } |
- m_pFormDict->SetAtBoolean("NeedAppearances", bNeedAP); |
- m_bGenerateAP = bNeedAP; |
-} |
-int CPDF_InterForm::CountFieldsInCalculationOrder() |
-{ |
- if (m_pFormDict == NULL) { |
- return 0; |
- } |
- CPDF_Array* pArray = m_pFormDict->GetArray("CO"); |
- if (pArray == NULL) { |
- return 0; |
- } |
- return pArray->GetCount(); |
+ } |
+ if (!pDict) { |
+ return nullptr; |
+ } |
+ pArray = pDict->GetArray("Kids"); |
+ return pArray ? pArray->GetDict(index) : pDict; |
+} |
+FX_BOOL CPDF_InterForm::NeedConstructAP() { |
+ if (m_pFormDict == NULL) { |
+ return FALSE; |
+ } |
+ return m_pFormDict->GetBoolean("NeedAppearances"); |
+} |
+void CPDF_InterForm::NeedConstructAP(FX_BOOL bNeedAP) { |
+ if (m_pFormDict == NULL) { |
+ InitInterFormDict(m_pFormDict, m_pDocument); |
+ } |
+ m_pFormDict->SetAtBoolean("NeedAppearances", bNeedAP); |
+ m_bGenerateAP = bNeedAP; |
+} |
+int CPDF_InterForm::CountFieldsInCalculationOrder() { |
+ if (m_pFormDict == NULL) { |
+ return 0; |
+ } |
+ CPDF_Array* pArray = m_pFormDict->GetArray("CO"); |
+ if (pArray == NULL) { |
+ return 0; |
+ } |
+ return pArray->GetCount(); |
} |
-CPDF_FormField* CPDF_InterForm::GetFieldInCalculationOrder(int index) |
-{ |
- if (m_pFormDict == NULL || index < 0) { |
- return NULL; |
- } |
- CPDF_Array* pArray = m_pFormDict->GetArray("CO"); |
- if (pArray == NULL) { |
- return NULL; |
- } |
- CPDF_Object* pElement = pArray->GetElementValue(index); |
- if (pElement != NULL && pElement->GetType() == PDFOBJ_DICTIONARY) { |
- return GetFieldByDict((CPDF_Dictionary*)pElement); |
- } |
+CPDF_FormField* CPDF_InterForm::GetFieldInCalculationOrder(int index) { |
+ if (m_pFormDict == NULL || index < 0) { |
return NULL; |
-} |
-int CPDF_InterForm::FindFieldInCalculationOrder(const CPDF_FormField* pField) |
-{ |
- if (m_pFormDict == NULL || pField == NULL) { |
- return -1; |
- } |
- CPDF_Array* pArray = m_pFormDict->GetArray("CO"); |
- if (pArray == NULL) { |
- return -1; |
- } |
- for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) { |
- CPDF_Object* pElement = pArray->GetElementValue(i); |
- if (pElement == pField->m_pDict) { |
- return i; |
- } |
- } |
+ } |
+ CPDF_Array* pArray = m_pFormDict->GetArray("CO"); |
+ if (pArray == NULL) { |
+ return NULL; |
+ } |
+ CPDF_Object* pElement = pArray->GetElementValue(index); |
+ if (pElement != NULL && pElement->GetType() == PDFOBJ_DICTIONARY) { |
+ return GetFieldByDict((CPDF_Dictionary*)pElement); |
+ } |
+ return NULL; |
+} |
+int CPDF_InterForm::FindFieldInCalculationOrder(const CPDF_FormField* pField) { |
+ if (m_pFormDict == NULL || pField == NULL) { |
return -1; |
-} |
-FX_DWORD CPDF_InterForm::CountFormFonts() |
-{ |
- return CountInterFormFonts(m_pFormDict); |
-} |
-CPDF_Font* CPDF_InterForm::GetFormFont(FX_DWORD index, CFX_ByteString& csNameTag) |
-{ |
- return GetInterFormFont(m_pFormDict, m_pDocument, index, csNameTag); |
-} |
-CPDF_Font* CPDF_InterForm::GetFormFont(CFX_ByteString csNameTag) |
-{ |
- return GetInterFormFont(m_pFormDict, m_pDocument, csNameTag); |
-} |
-CPDF_Font* CPDF_InterForm::GetFormFont(CFX_ByteString csFontName, CFX_ByteString& csNameTag) |
-{ |
- return GetInterFormFont(m_pFormDict, m_pDocument, csFontName, csNameTag); |
-} |
-CPDF_Font* CPDF_InterForm::GetNativeFormFont(uint8_t charSet, CFX_ByteString& csNameTag) |
-{ |
- return GetNativeInterFormFont(m_pFormDict, m_pDocument, charSet, csNameTag); |
-} |
-CPDF_Font* CPDF_InterForm::GetNativeFormFont(CFX_ByteString& csNameTag) |
-{ |
- return GetNativeInterFormFont(m_pFormDict, m_pDocument, csNameTag); |
-} |
-FX_BOOL CPDF_InterForm::FindFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag) |
-{ |
- return FindInterFormFont(m_pFormDict, pFont, csNameTag); |
-} |
-FX_BOOL CPDF_InterForm::FindFormFont(CFX_ByteString csFontName, CPDF_Font*& pFont, CFX_ByteString& csNameTag) |
-{ |
- return FindInterFormFont(m_pFormDict, m_pDocument, csFontName, pFont, csNameTag); |
-} |
-void CPDF_InterForm::AddFormFont(const CPDF_Font* pFont, CFX_ByteString& csNameTag) |
-{ |
- AddInterFormFont(m_pFormDict, m_pDocument, pFont, csNameTag); |
- m_bUpdated = TRUE; |
-} |
-CPDF_Font* CPDF_InterForm::AddNativeFormFont(uint8_t charSet, CFX_ByteString& csNameTag) |
-{ |
- m_bUpdated = TRUE; |
- return AddNativeInterFormFont(m_pFormDict, m_pDocument, charSet, csNameTag); |
-} |
-CPDF_Font* CPDF_InterForm::AddNativeFormFont(CFX_ByteString& csNameTag) |
-{ |
- m_bUpdated = TRUE; |
- return AddNativeInterFormFont(m_pFormDict, m_pDocument, csNameTag); |
-} |
-void CPDF_InterForm::RemoveFormFont(const CPDF_Font* pFont) |
-{ |
- m_bUpdated = TRUE; |
- RemoveInterFormFont(m_pFormDict, pFont); |
-} |
-void CPDF_InterForm::RemoveFormFont(CFX_ByteString csNameTag) |
-{ |
- m_bUpdated = TRUE; |
- RemoveInterFormFont(m_pFormDict, csNameTag); |
-} |
-CPDF_DefaultAppearance CPDF_InterForm::GetDefaultAppearance() |
-{ |
- CFX_ByteString csDA; |
- if (m_pFormDict == NULL) { |
- return csDA; |
- } |
- csDA = m_pFormDict->GetString("DA"); |
+ } |
+ CPDF_Array* pArray = m_pFormDict->GetArray("CO"); |
+ if (pArray == NULL) { |
+ return -1; |
+ } |
+ for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { |
+ CPDF_Object* pElement = pArray->GetElementValue(i); |
+ if (pElement == pField->m_pDict) { |
+ return i; |
+ } |
+ } |
+ return -1; |
+} |
+FX_DWORD CPDF_InterForm::CountFormFonts() { |
+ return CountInterFormFonts(m_pFormDict); |
+} |
+CPDF_Font* CPDF_InterForm::GetFormFont(FX_DWORD index, |
+ CFX_ByteString& csNameTag) { |
+ return GetInterFormFont(m_pFormDict, m_pDocument, index, csNameTag); |
+} |
+CPDF_Font* CPDF_InterForm::GetFormFont(CFX_ByteString csNameTag) { |
+ return GetInterFormFont(m_pFormDict, m_pDocument, csNameTag); |
+} |
+CPDF_Font* CPDF_InterForm::GetFormFont(CFX_ByteString csFontName, |
+ CFX_ByteString& csNameTag) { |
+ return GetInterFormFont(m_pFormDict, m_pDocument, csFontName, csNameTag); |
+} |
+CPDF_Font* CPDF_InterForm::GetNativeFormFont(uint8_t charSet, |
+ CFX_ByteString& csNameTag) { |
+ return GetNativeInterFormFont(m_pFormDict, m_pDocument, charSet, csNameTag); |
+} |
+CPDF_Font* CPDF_InterForm::GetNativeFormFont(CFX_ByteString& csNameTag) { |
+ return GetNativeInterFormFont(m_pFormDict, m_pDocument, csNameTag); |
+} |
+FX_BOOL CPDF_InterForm::FindFormFont(const CPDF_Font* pFont, |
+ CFX_ByteString& csNameTag) { |
+ return FindInterFormFont(m_pFormDict, pFont, csNameTag); |
+} |
+FX_BOOL CPDF_InterForm::FindFormFont(CFX_ByteString csFontName, |
+ CPDF_Font*& pFont, |
+ CFX_ByteString& csNameTag) { |
+ return FindInterFormFont(m_pFormDict, m_pDocument, csFontName, pFont, |
+ csNameTag); |
+} |
+void CPDF_InterForm::AddFormFont(const CPDF_Font* pFont, |
+ CFX_ByteString& csNameTag) { |
+ AddInterFormFont(m_pFormDict, m_pDocument, pFont, csNameTag); |
+ m_bUpdated = TRUE; |
+} |
+CPDF_Font* CPDF_InterForm::AddNativeFormFont(uint8_t charSet, |
+ CFX_ByteString& csNameTag) { |
+ m_bUpdated = TRUE; |
+ return AddNativeInterFormFont(m_pFormDict, m_pDocument, charSet, csNameTag); |
+} |
+CPDF_Font* CPDF_InterForm::AddNativeFormFont(CFX_ByteString& csNameTag) { |
+ m_bUpdated = TRUE; |
+ return AddNativeInterFormFont(m_pFormDict, m_pDocument, csNameTag); |
+} |
+void CPDF_InterForm::RemoveFormFont(const CPDF_Font* pFont) { |
+ m_bUpdated = TRUE; |
+ RemoveInterFormFont(m_pFormDict, pFont); |
+} |
+void CPDF_InterForm::RemoveFormFont(CFX_ByteString csNameTag) { |
+ m_bUpdated = TRUE; |
+ RemoveInterFormFont(m_pFormDict, csNameTag); |
+} |
+CPDF_DefaultAppearance CPDF_InterForm::GetDefaultAppearance() { |
+ CFX_ByteString csDA; |
+ if (m_pFormDict == NULL) { |
return csDA; |
+ } |
+ csDA = m_pFormDict->GetString("DA"); |
+ return csDA; |
} |
-CPDF_Font* CPDF_InterForm::GetDefaultFormFont() |
-{ |
- return GetDefaultInterFormFont(m_pFormDict, m_pDocument); |
+CPDF_Font* CPDF_InterForm::GetDefaultFormFont() { |
+ return GetDefaultInterFormFont(m_pFormDict, m_pDocument); |
} |
-int CPDF_InterForm::GetFormAlignment() |
-{ |
- if (m_pFormDict == NULL) { |
- return 0; |
- } |
- return m_pFormDict->GetInteger("Q", 0); |
-} |
-FX_BOOL CPDF_InterForm::ResetForm(const CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude, FX_BOOL bNotify) |
-{ |
- if (bNotify && m_pFormNotify != NULL) { |
- int iRet = m_pFormNotify->BeforeFormReset(this); |
- if (iRet < 0) { |
- return FALSE; |
- } |
- } |
- int nCount = m_pFieldTree->m_Root.CountFields(); |
- for (int i = 0; i < nCount; i++) { |
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
- if (pField == NULL) { |
- continue; |
- } |
- FX_BOOL bFind = FALSE; |
- int iCount = fields.GetSize(); |
- for (int i = 0; i < iCount; i ++) { |
- if (pField == (CPDF_FormField*)fields[i]) { |
- bFind = TRUE; |
- break; |
- } |
- } |
- if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) { |
- pField->ResetField(bNotify); |
- } |
- } |
- if (bNotify && m_pFormNotify != NULL) { |
- m_pFormNotify->AfterFormReset(this); |
+int CPDF_InterForm::GetFormAlignment() { |
+ if (m_pFormDict == NULL) { |
+ return 0; |
+ } |
+ return m_pFormDict->GetInteger("Q", 0); |
+} |
+FX_BOOL CPDF_InterForm::ResetForm(const CFX_PtrArray& fields, |
+ FX_BOOL bIncludeOrExclude, |
+ FX_BOOL bNotify) { |
+ if (bNotify && m_pFormNotify != NULL) { |
+ int iRet = m_pFormNotify->BeforeFormReset(this); |
+ if (iRet < 0) { |
+ return FALSE; |
+ } |
+ } |
+ int nCount = m_pFieldTree->m_Root.CountFields(); |
+ for (int i = 0; i < nCount; i++) { |
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
+ if (pField == NULL) { |
+ continue; |
+ } |
+ FX_BOOL bFind = FALSE; |
+ int iCount = fields.GetSize(); |
+ for (int i = 0; i < iCount; i++) { |
+ if (pField == (CPDF_FormField*)fields[i]) { |
+ bFind = TRUE; |
+ break; |
+ } |
+ } |
+ if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) { |
+ pField->ResetField(bNotify); |
+ } |
+ } |
+ if (bNotify && m_pFormNotify != NULL) { |
+ m_pFormNotify->AfterFormReset(this); |
+ } |
+ return TRUE; |
+} |
+FX_BOOL CPDF_InterForm::ResetForm(FX_BOOL bNotify) { |
+ if (bNotify && m_pFormNotify != NULL) { |
+ int iRet = m_pFormNotify->BeforeFormReset(this); |
+ if (iRet < 0) { |
+ return FALSE; |
+ } |
+ } |
+ int nCount = m_pFieldTree->m_Root.CountFields(); |
+ for (int i = 0; i < nCount; i++) { |
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
+ if (pField == NULL) { |
+ continue; |
+ } |
+ pField->ResetField(bNotify); |
+ } |
+ if (bNotify && m_pFormNotify != NULL) { |
+ m_pFormNotify->AfterFormReset(this); |
+ } |
+ return TRUE; |
+} |
+void CPDF_InterForm::ReloadForm() { |
+ FX_POSITION pos = m_ControlMap.GetStartPosition(); |
+ while (pos) { |
+ CPDF_Dictionary* pWidgetDict; |
+ CPDF_FormControl* pControl; |
+ m_ControlMap.GetNextAssoc(pos, (void*&)pWidgetDict, (void*&)pControl); |
+ delete pControl; |
+ } |
+ m_ControlMap.RemoveAll(); |
+ int nCount = m_pFieldTree->m_Root.CountFields(); |
+ for (int k = 0; k < nCount; k++) { |
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(k); |
+ delete pField; |
+ } |
+ m_pFieldTree->RemoveAll(); |
+ if (m_pFormDict == NULL) { |
+ return; |
+ } |
+ CPDF_Array* pFields = m_pFormDict->GetArray("Fields"); |
+ if (pFields == NULL) { |
+ return; |
+ } |
+ int iCount = pFields->GetCount(); |
+ for (int i = 0; i < iCount; i++) { |
+ LoadField(pFields->GetDict(i)); |
+ } |
+} |
+void CPDF_InterForm::LoadField(CPDF_Dictionary* pFieldDict, int nLevel) { |
+ if (nLevel > nMaxRecursion) { |
+ return; |
+ } |
+ if (pFieldDict == NULL) { |
+ return; |
+ } |
+ FX_DWORD dwParentObjNum = pFieldDict->GetObjNum(); |
+ CPDF_Array* pKids = pFieldDict->GetArray("Kids"); |
+ if (!pKids) { |
+ AddTerminalField(pFieldDict); |
+ return; |
+ } |
+ CPDF_Dictionary* pFirstKid = pKids->GetDict(0); |
+ if (pFirstKid == NULL) { |
+ return; |
+ } |
+ if (pFirstKid->KeyExist("T") || pFirstKid->KeyExist("Kids")) { |
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) { |
+ CPDF_Dictionary* pChildDict = pKids->GetDict(i); |
+ if (pChildDict) { |
+ if (pChildDict->GetObjNum() != dwParentObjNum) { |
+ LoadField(pChildDict, nLevel + 1); |
+ } |
+ } |
+ } |
+ } else { |
+ AddTerminalField(pFieldDict); |
+ } |
+} |
+FX_BOOL CPDF_InterForm::HasXFAForm() const { |
+ return m_pFormDict && m_pFormDict->GetArray(FX_BSTRC("XFA")) != NULL; |
+} |
+void CPDF_InterForm::FixPageFields(const CPDF_Page* pPage) { |
+ ASSERT(pPage != NULL); |
+ CPDF_Dictionary* pPageDict = pPage->m_pFormDict; |
+ if (pPageDict == NULL) { |
+ return; |
+ } |
+ CPDF_Array* pAnnots = pPageDict->GetArray(FX_BSTRC("Annots")); |
+ if (pAnnots == NULL) { |
+ return; |
+ } |
+ int iAnnotCount = pAnnots->GetCount(); |
+ for (int i = 0; i < iAnnotCount; i++) { |
+ CPDF_Dictionary* pAnnot = pAnnots->GetDict(i); |
+ if (pAnnot != NULL && pAnnot->GetString(FX_BSTRC("Subtype")) == "Widget") { |
+ LoadField(pAnnot); |
+ } |
+ } |
+} |
+CPDF_FormField* CPDF_InterForm::AddTerminalField( |
+ const CPDF_Dictionary* pFieldDict) { |
+ if (!pFieldDict->KeyExist(FX_BSTRC("T"))) { |
+ return NULL; |
+ } |
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pFieldDict; |
+ CFX_WideString csWName = GetFullName(pDict); |
+ if (csWName.IsEmpty()) { |
+ return NULL; |
+ } |
+ CPDF_FormField* pField = NULL; |
+ pField = m_pFieldTree->GetField(csWName); |
+ if (pField == NULL) { |
+ CPDF_Dictionary* pParent = (CPDF_Dictionary*)pFieldDict; |
+ if (!pFieldDict->KeyExist(FX_BSTRC("T")) && |
+ pFieldDict->GetString(FX_BSTRC("Subtype")) == FX_BSTRC("Widget")) { |
+ pParent = pFieldDict->GetDict(FX_BSTRC("Parent")); |
+ if (!pParent) { |
+ pParent = (CPDF_Dictionary*)pFieldDict; |
+ } |
+ } |
+ if (pParent && pParent != pFieldDict && |
+ !pParent->KeyExist(FX_BSTRC("FT"))) { |
+ if (pFieldDict->KeyExist(FX_BSTRC("FT"))) { |
+ CPDF_Object* pFTValue = pFieldDict->GetElementValue(FX_BSTRC("FT")); |
+ if (pFTValue) { |
+ pParent->SetAt(FX_BSTRC("FT"), pFTValue->Clone()); |
+ } |
+ } |
+ if (pFieldDict->KeyExist(FX_BSTRC("Ff"))) { |
+ CPDF_Object* pFfValue = pFieldDict->GetElementValue(FX_BSTRC("Ff")); |
+ if (pFfValue) { |
+ pParent->SetAt(FX_BSTRC("Ff"), pFfValue->Clone()); |
+ } |
+ } |
+ } |
+ pField = new CPDF_FormField(this, pParent); |
+ CPDF_Object* pTObj = pDict->GetElement("T"); |
+ if (pTObj && pTObj->GetType() == PDFOBJ_REFERENCE) { |
+ CPDF_Object* pClone = pTObj->Clone(TRUE); |
+ if (pClone) { |
+ pDict->SetAt("T", pClone); |
+ } else { |
+ pDict->SetAtName("T", ""); |
+ } |
+ } |
+ m_pFieldTree->SetField(csWName, pField); |
+ } |
+ CPDF_Array* pKids = pFieldDict->GetArray("Kids"); |
+ if (pKids == NULL) { |
+ if (pFieldDict->GetString("Subtype") == "Widget") { |
+ AddControl(pField, pFieldDict); |
+ } |
+ } else { |
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) { |
+ CPDF_Dictionary* pKid = pKids->GetDict(i); |
+ if (pKid == NULL) { |
+ continue; |
+ } |
+ if (pKid->GetString("Subtype") != "Widget") { |
+ continue; |
+ } |
+ AddControl(pField, pKid); |
+ } |
+ } |
+ return pField; |
+} |
+CPDF_FormControl* CPDF_InterForm::AddControl( |
+ const CPDF_FormField* pField, |
+ const CPDF_Dictionary* pWidgetDict) { |
+ void* rValue = NULL; |
+ if (m_ControlMap.Lookup((CPDF_Dictionary*)pWidgetDict, rValue)) { |
+ return (CPDF_FormControl*)rValue; |
+ } |
+ CPDF_FormControl* pControl = new CPDF_FormControl( |
+ (CPDF_FormField*)pField, (CPDF_Dictionary*)pWidgetDict); |
+ m_ControlMap.SetAt((CPDF_Dictionary*)pWidgetDict, pControl); |
+ ((CPDF_FormField*)pField)->m_ControlList.Add(pControl); |
+ return pControl; |
+} |
+CPDF_FormField* CPDF_InterForm::CheckRequiredFields( |
+ const CFX_PtrArray* fields, |
+ FX_BOOL bIncludeOrExclude) const { |
+ int nCount = m_pFieldTree->m_Root.CountFields(); |
+ for (int i = 0; i < nCount; i++) { |
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
+ if (pField == NULL) { |
+ continue; |
} |
- return TRUE; |
-} |
-FX_BOOL CPDF_InterForm::ResetForm(FX_BOOL bNotify) |
-{ |
- if (bNotify && m_pFormNotify != NULL) { |
- int iRet = m_pFormNotify->BeforeFormReset(this); |
- if (iRet < 0) { |
- return FALSE; |
- } |
+ int32_t iType = pField->GetType(); |
+ if (iType == CPDF_FormField::PushButton || |
+ iType == CPDF_FormField::CheckBox || iType == CPDF_FormField::ListBox) { |
+ continue; |
} |
- int nCount = m_pFieldTree->m_Root.CountFields(); |
- for (int i = 0; i < nCount; i++) { |
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
- if (pField == NULL) { |
- continue; |
- } |
- pField->ResetField(bNotify); |
+ FX_DWORD dwFlags = pField->GetFieldFlags(); |
+ if (dwFlags & 0x04) { |
+ continue; |
} |
- if (bNotify && m_pFormNotify != NULL) { |
- m_pFormNotify->AfterFormReset(this); |
+ FX_BOOL bFind = TRUE; |
+ if (fields != NULL) { |
+ bFind = fields->Find(pField, 0) >= 0; |
} |
- return TRUE; |
-} |
-void CPDF_InterForm::ReloadForm() |
-{ |
- FX_POSITION pos = m_ControlMap.GetStartPosition(); |
- while (pos) { |
- CPDF_Dictionary* pWidgetDict; |
- CPDF_FormControl* pControl; |
- m_ControlMap.GetNextAssoc(pos, (void*&)pWidgetDict, (void*&)pControl); |
- delete pControl; |
- } |
- m_ControlMap.RemoveAll(); |
- int nCount = m_pFieldTree->m_Root.CountFields(); |
- for (int k = 0; k < nCount; k ++) { |
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(k); |
- delete pField; |
- } |
- m_pFieldTree->RemoveAll(); |
- if (m_pFormDict == NULL) { |
- return; |
- } |
- CPDF_Array* pFields = m_pFormDict->GetArray("Fields"); |
- if (pFields == NULL) { |
- return; |
- } |
- int iCount = pFields->GetCount(); |
- for (int i = 0; i < iCount; i ++) { |
- LoadField(pFields->GetDict(i)); |
- } |
-} |
-void CPDF_InterForm::LoadField(CPDF_Dictionary* pFieldDict, int nLevel) |
-{ |
- if (nLevel > nMaxRecursion) { |
- return; |
- } |
- if (pFieldDict == NULL) { |
- return; |
- } |
- FX_DWORD dwParentObjNum = pFieldDict->GetObjNum(); |
- CPDF_Array* pKids = pFieldDict->GetArray("Kids"); |
- if (!pKids) { |
- AddTerminalField(pFieldDict); |
- return; |
- } |
- CPDF_Dictionary* pFirstKid = pKids->GetDict(0); |
- if (pFirstKid == NULL) { |
- return; |
- } |
- if (pFirstKid->KeyExist("T") || pFirstKid->KeyExist("Kids")) { |
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) { |
- CPDF_Dictionary * pChildDict = pKids->GetDict(i); |
- if (pChildDict) { |
- if (pChildDict->GetObjNum() != dwParentObjNum) { |
- LoadField(pChildDict, nLevel + 1); |
- } |
- } |
- } |
- } else { |
- AddTerminalField(pFieldDict); |
+ if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) { |
+ CPDF_Dictionary* pFieldDict = pField->m_pDict; |
+ if ((dwFlags & 0x02) != 0 && pFieldDict->GetString("V").IsEmpty()) { |
+ return pField; |
+ } |
} |
+ } |
+ return NULL; |
} |
-FX_BOOL CPDF_InterForm::HasXFAForm() const |
-{ |
- return m_pFormDict && m_pFormDict->GetArray(FX_BSTRC("XFA")) != NULL; |
-} |
-void CPDF_InterForm::FixPageFields(const CPDF_Page* pPage) |
-{ |
- ASSERT(pPage != NULL); |
- CPDF_Dictionary* pPageDict = pPage->m_pFormDict; |
- if (pPageDict == NULL) { |
- return; |
- } |
- CPDF_Array* pAnnots = pPageDict->GetArray(FX_BSTRC("Annots")); |
- if (pAnnots == NULL) { |
- return; |
- } |
- int iAnnotCount = pAnnots->GetCount(); |
- for (int i = 0; i < iAnnotCount; i++) { |
- CPDF_Dictionary* pAnnot = pAnnots->GetDict(i); |
- if (pAnnot != NULL && pAnnot->GetString(FX_BSTRC("Subtype")) == "Widget") { |
- LoadField(pAnnot); |
- } |
- } |
+CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path, |
+ FX_BOOL bSimpleFileSpec) const { |
+ CFX_PtrArray fields; |
+ int nCount = m_pFieldTree->m_Root.CountFields(); |
+ for (int i = 0; i < nCount; i++) { |
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
+ fields.Add(pField); |
+ } |
+ return ExportToFDF(pdf_path, fields, TRUE, bSimpleFileSpec); |
} |
-CPDF_FormField* CPDF_InterForm::AddTerminalField(const CPDF_Dictionary* pFieldDict) |
-{ |
- if (!pFieldDict->KeyExist(FX_BSTRC("T"))) { |
- return NULL; |
- } |
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pFieldDict; |
- CFX_WideString csWName = GetFullName(pDict); |
- if (csWName.IsEmpty()) { |
- return NULL; |
- } |
- CPDF_FormField* pField = NULL; |
- pField = m_pFieldTree->GetField(csWName); |
- if (pField == NULL) { |
- CPDF_Dictionary *pParent = (CPDF_Dictionary*)pFieldDict; |
- if (!pFieldDict->KeyExist(FX_BSTRC("T")) && |
- pFieldDict->GetString(FX_BSTRC("Subtype")) == FX_BSTRC("Widget")) { |
- pParent = pFieldDict->GetDict(FX_BSTRC("Parent")); |
- if (!pParent) { |
- pParent = (CPDF_Dictionary*)pFieldDict; |
- } |
- } |
- if (pParent && pParent != pFieldDict && !pParent->KeyExist(FX_BSTRC("FT"))) { |
- if (pFieldDict->KeyExist(FX_BSTRC("FT"))) { |
- CPDF_Object *pFTValue = pFieldDict->GetElementValue(FX_BSTRC("FT")); |
- if (pFTValue) { |
- pParent->SetAt(FX_BSTRC("FT"), pFTValue->Clone()); |
- } |
- } |
- if (pFieldDict->KeyExist(FX_BSTRC("Ff"))) { |
- CPDF_Object *pFfValue = pFieldDict->GetElementValue(FX_BSTRC("Ff")); |
- if (pFfValue) { |
- pParent->SetAt(FX_BSTRC("Ff"), pFfValue->Clone()); |
- } |
- } |
- } |
- pField = new CPDF_FormField(this, pParent); |
- CPDF_Object* pTObj = pDict->GetElement("T"); |
- if (pTObj && pTObj->GetType() == PDFOBJ_REFERENCE) { |
- CPDF_Object* pClone = pTObj->Clone(TRUE); |
- if (pClone) { |
- pDict->SetAt("T", pClone); |
- } else { |
- pDict->SetAtName("T", ""); |
- } |
- } |
- m_pFieldTree->SetField(csWName, pField); |
- } |
- CPDF_Array* pKids = pFieldDict->GetArray("Kids"); |
- if (pKids == NULL) { |
- if (pFieldDict->GetString("Subtype") == "Widget") { |
- AddControl(pField, pFieldDict); |
- } |
+CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath); |
+CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path, |
+ CFX_PtrArray& fields, |
+ FX_BOOL bIncludeOrExclude, |
+ FX_BOOL bSimpleFileSpec) const { |
+ CFDF_Document* pDoc = CFDF_Document::CreateNewDoc(); |
+ if (pDoc == NULL) { |
+ return NULL; |
+ } |
+ CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDict("FDF"); |
+ if (!pdf_path.IsEmpty()) { |
+ if (bSimpleFileSpec) { |
+ CFX_WideString wsFilePath = FILESPEC_EncodeFileName(pdf_path); |
+ pMainDict->SetAtString(FX_BSTRC("F"), |
+ CFX_ByteString::FromUnicode(wsFilePath)); |
+ pMainDict->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(wsFilePath)); |
} else { |
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) { |
- CPDF_Dictionary* pKid = pKids->GetDict(i); |
- if (pKid == NULL) { |
- continue; |
- } |
- if (pKid->GetString("Subtype") != "Widget") { |
- continue; |
- } |
- AddControl(pField, pKid); |
- } |
- } |
- return pField; |
-} |
-CPDF_FormControl* CPDF_InterForm::AddControl(const CPDF_FormField* pField, const CPDF_Dictionary* pWidgetDict) |
-{ |
- void *rValue = NULL; |
- if (m_ControlMap.Lookup((CPDF_Dictionary*)pWidgetDict, rValue)) { |
- return (CPDF_FormControl*)rValue; |
- } |
- CPDF_FormControl* pControl = new CPDF_FormControl((CPDF_FormField*)pField, (CPDF_Dictionary*)pWidgetDict); |
- m_ControlMap.SetAt((CPDF_Dictionary*)pWidgetDict, pControl); |
- ((CPDF_FormField*)pField)->m_ControlList.Add(pControl); |
- return pControl; |
-} |
-CPDF_FormField* CPDF_InterForm::CheckRequiredFields(const CFX_PtrArray *fields, FX_BOOL bIncludeOrExclude) const |
-{ |
- int nCount = m_pFieldTree->m_Root.CountFields(); |
- for (int i = 0; i < nCount; i++) { |
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
- if (pField == NULL) { |
- continue; |
- } |
- int32_t iType = pField->GetType(); |
- if (iType == CPDF_FormField::PushButton || iType == CPDF_FormField::CheckBox || iType == CPDF_FormField::ListBox) { |
- continue; |
- } |
- FX_DWORD dwFlags = pField->GetFieldFlags(); |
- if (dwFlags & 0x04) { |
- continue; |
- } |
- FX_BOOL bFind = TRUE; |
- if (fields != NULL) { |
- bFind = fields->Find(pField, 0) >= 0; |
- } |
- if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) { |
- CPDF_Dictionary *pFieldDict = pField->m_pDict; |
- if ((dwFlags & 0x02) != 0 && pFieldDict->GetString("V").IsEmpty()) { |
- return pField; |
- } |
- } |
+ CPDF_FileSpec filespec; |
+ filespec.SetFileName(pdf_path); |
+ pMainDict->SetAt("F", (CPDF_Object*)filespec); |
} |
+ } |
+ CPDF_Array* pFields = CPDF_Array::Create(); |
+ if (pFields == NULL) { |
return NULL; |
-} |
-CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path, FX_BOOL bSimpleFileSpec) const |
-{ |
- CFX_PtrArray fields; |
- int nCount = m_pFieldTree->m_Root.CountFields(); |
- for (int i = 0; i < nCount; i ++) { |
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
- fields.Add(pField); |
- } |
- return ExportToFDF(pdf_path, fields, TRUE, bSimpleFileSpec); |
-} |
-CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath); |
-CFDF_Document* CPDF_InterForm::ExportToFDF(const CFX_WideStringC& pdf_path, CFX_PtrArray& fields, FX_BOOL bIncludeOrExclude, FX_BOOL bSimpleFileSpec) const |
-{ |
- CFDF_Document* pDoc = CFDF_Document::CreateNewDoc(); |
- if (pDoc == NULL) { |
+ } |
+ pMainDict->SetAt("Fields", pFields); |
+ int nCount = m_pFieldTree->m_Root.CountFields(); |
+ for (int i = 0; i < nCount; i++) { |
+ CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
+ if (pField == NULL || pField->GetType() == CPDF_FormField::PushButton) { |
+ continue; |
+ } |
+ FX_DWORD dwFlags = pField->GetFieldFlags(); |
+ if (dwFlags & 0x04) { |
+ continue; |
+ } |
+ FX_BOOL bFind = fields.Find(pField, 0) >= 0; |
+ if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) { |
+ if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetString("V").IsEmpty()) { |
+ continue; |
+ } |
+ CFX_WideString fullname = GetFullName(pField->GetFieldDict()); |
+ CPDF_Dictionary* pFieldDict = CPDF_Dictionary::Create(); |
+ if (pFieldDict == NULL) { |
return NULL; |
- } |
- CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDict("FDF"); |
- if (!pdf_path.IsEmpty()) { |
- if (bSimpleFileSpec) { |
- CFX_WideString wsFilePath = FILESPEC_EncodeFileName(pdf_path); |
- pMainDict->SetAtString(FX_BSTRC("F"), CFX_ByteString::FromUnicode(wsFilePath)); |
- pMainDict->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(wsFilePath)); |
- } else { |
- CPDF_FileSpec filespec; |
- filespec.SetFileName(pdf_path); |
- pMainDict->SetAt("F", (CPDF_Object*)filespec); |
- } |
- } |
- CPDF_Array* pFields = CPDF_Array::Create(); |
- if (pFields == NULL) { |
+ } |
+ CPDF_String* pString = CPDF_String::Create(fullname); |
+ if (pString == NULL) { |
+ pFieldDict->Release(); |
return NULL; |
- } |
- pMainDict->SetAt("Fields", pFields); |
- int nCount = m_pFieldTree->m_Root.CountFields(); |
- for (int i = 0; i < nCount; i ++) { |
- CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
- if (pField == NULL || pField->GetType() == CPDF_FormField::PushButton) { |
- continue; |
- } |
- FX_DWORD dwFlags = pField->GetFieldFlags(); |
- if (dwFlags & 0x04) { |
- continue; |
+ } |
+ pFieldDict->SetAt("T", pString); |
+ if (pField->GetType() == CPDF_FormField::CheckBox || |
+ pField->GetType() == CPDF_FormField::RadioButton) { |
+ CFX_WideString csExport = pField->GetCheckValue(FALSE); |
+ CFX_ByteString csBExport = PDF_EncodeText(csExport); |
+ CPDF_Object* pOpt = FPDF_GetFieldAttr(pField->m_pDict, "Opt"); |
+ if (pOpt == NULL) { |
+ pFieldDict->SetAtName("V", csBExport); |
+ } else { |
+ pFieldDict->SetAtString("V", csBExport); |
} |
- FX_BOOL bFind = fields.Find(pField, 0) >= 0; |
- if ((bIncludeOrExclude && bFind) || (!bIncludeOrExclude && !bFind)) { |
- if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetString("V").IsEmpty()) { |
- continue; |
- } |
- CFX_WideString fullname = GetFullName(pField->GetFieldDict()); |
- CPDF_Dictionary* pFieldDict = CPDF_Dictionary::Create(); |
- if (pFieldDict == NULL) { |
- return NULL; |
- } |
- CPDF_String* pString = CPDF_String::Create(fullname); |
- if (pString == NULL) { |
- pFieldDict->Release(); |
- return NULL; |
- } |
- pFieldDict->SetAt("T", pString); |
- if (pField->GetType() == CPDF_FormField::CheckBox || pField->GetType() == CPDF_FormField::RadioButton) { |
- CFX_WideString csExport = pField->GetCheckValue(FALSE); |
- CFX_ByteString csBExport = PDF_EncodeText(csExport); |
- CPDF_Object* pOpt = FPDF_GetFieldAttr(pField->m_pDict, "Opt"); |
- if (pOpt == NULL) { |
- pFieldDict->SetAtName("V", csBExport); |
- } else { |
- pFieldDict->SetAtString("V", csBExport); |
- } |
- } else { |
- CPDF_Object* pV = FPDF_GetFieldAttr(pField->m_pDict, "V"); |
- if (pV != NULL) { |
- pFieldDict->SetAt("V", pV->Clone(TRUE)); |
- } |
- } |
- pFields->Add(pFieldDict); |
+ } else { |
+ CPDF_Object* pV = FPDF_GetFieldAttr(pField->m_pDict, "V"); |
+ if (pV != NULL) { |
+ pFieldDict->SetAt("V", pV->Clone(TRUE)); |
} |
+ } |
+ pFields->Add(pFieldDict); |
} |
- return pDoc; |
+ } |
+ return pDoc; |
} |
const struct _SupportFieldEncoding { |
- const FX_CHAR* m_name; |
- int32_t m_codePage; |
+ const FX_CHAR* m_name; |
+ int32_t m_codePage; |
} g_fieldEncoding[] = { |
- { "BigFive", 950 }, |
- { "GBK", 936 }, |
- { "Shift-JIS", 932 }, |
- { "UHC", 949 }, |
+ {"BigFive", 950}, |
+ {"GBK", 936}, |
+ {"Shift-JIS", 932}, |
+ {"UHC", 949}, |
}; |
-static void FPDFDOC_FDF_GetFieldValue(CPDF_Dictionary *pFieldDict, CFX_WideString &csValue, CFX_ByteString &bsEncoding) |
-{ |
- ASSERT(pFieldDict != NULL); |
- CFX_ByteString csBValue = pFieldDict->GetString("V"); |
- int32_t iCount = sizeof(g_fieldEncoding) / sizeof(g_fieldEncoding[0]); |
- int32_t i = 0; |
- for (; i < iCount; ++i) |
- if (bsEncoding == g_fieldEncoding[i].m_name) { |
- break; |
- } |
- if (i < iCount) { |
- CFX_CharMap *pCharMap = CFX_CharMap::GetDefaultMapper(g_fieldEncoding[i].m_codePage); |
- FXSYS_assert(pCharMap != NULL); |
- csValue.ConvertFrom(csBValue, pCharMap); |
- return; |
- } |
- CFX_ByteString csTemp = csBValue.Left(2); |
- if (csTemp == "\xFF\xFE" || csTemp == "\xFE\xFF") { |
- csValue = PDF_DecodeText(csBValue); |
- } else { |
- csValue = CFX_WideString::FromLocal(csBValue); |
- } |
-} |
-void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict, const CFX_WideString& parent_name, FX_BOOL bNotify, int nLevel) |
-{ |
- CFX_WideString name; |
- if (!parent_name.IsEmpty()) { |
- name = parent_name + L"."; |
- } |
- name += pFieldDict->GetUnicodeText("T"); |
- CPDF_Array* pKids = pFieldDict->GetArray("Kids"); |
- if (pKids) { |
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) { |
- CPDF_Dictionary* pKid = pKids->GetDict(i); |
- if (pKid == NULL) { |
- continue; |
- } |
- if (nLevel <= nMaxRecursion) { |
- FDF_ImportField(pKid, name, bNotify, nLevel + 1); |
- } |
- } |
- return; |
- } |
- if (!pFieldDict->KeyExist("V")) { |
- return; |
- } |
- CPDF_FormField* pField = m_pFieldTree->GetField(name); |
- if (pField == NULL) { |
- return; |
- } |
- CFX_WideString csWValue; |
- FPDFDOC_FDF_GetFieldValue(pFieldDict, csWValue, m_bsEncoding); |
- int iType = pField->GetFieldType(); |
- if (bNotify && m_pFormNotify != NULL) { |
- int iRet = 0; |
- if (iType == FIELDTYPE_LISTBOX) { |
- iRet = m_pFormNotify->BeforeSelectionChange(pField, csWValue); |
- } else if (iType == FIELDTYPE_COMBOBOX || iType == FIELDTYPE_TEXTFIELD) { |
- iRet = m_pFormNotify->BeforeValueChange(pField, csWValue); |
- } |
- if (iRet < 0) { |
- return; |
- } |
- } |
- CFX_ByteArray statusArray; |
+static void FPDFDOC_FDF_GetFieldValue(CPDF_Dictionary* pFieldDict, |
+ CFX_WideString& csValue, |
+ CFX_ByteString& bsEncoding) { |
+ ASSERT(pFieldDict != NULL); |
+ CFX_ByteString csBValue = pFieldDict->GetString("V"); |
+ int32_t iCount = sizeof(g_fieldEncoding) / sizeof(g_fieldEncoding[0]); |
+ int32_t i = 0; |
+ for (; i < iCount; ++i) |
+ if (bsEncoding == g_fieldEncoding[i].m_name) { |
+ break; |
+ } |
+ if (i < iCount) { |
+ CFX_CharMap* pCharMap = |
+ CFX_CharMap::GetDefaultMapper(g_fieldEncoding[i].m_codePage); |
+ FXSYS_assert(pCharMap != NULL); |
+ csValue.ConvertFrom(csBValue, pCharMap); |
+ return; |
+ } |
+ CFX_ByteString csTemp = csBValue.Left(2); |
+ if (csTemp == "\xFF\xFE" || csTemp == "\xFE\xFF") { |
+ csValue = PDF_DecodeText(csBValue); |
+ } else { |
+ csValue = CFX_WideString::FromLocal(csBValue); |
+ } |
+} |
+void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict, |
+ const CFX_WideString& parent_name, |
+ FX_BOOL bNotify, |
+ int nLevel) { |
+ CFX_WideString name; |
+ if (!parent_name.IsEmpty()) { |
+ name = parent_name + L"."; |
+ } |
+ name += pFieldDict->GetUnicodeText("T"); |
+ CPDF_Array* pKids = pFieldDict->GetArray("Kids"); |
+ if (pKids) { |
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) { |
+ CPDF_Dictionary* pKid = pKids->GetDict(i); |
+ if (pKid == NULL) { |
+ continue; |
+ } |
+ if (nLevel <= nMaxRecursion) { |
+ FDF_ImportField(pKid, name, bNotify, nLevel + 1); |
+ } |
+ } |
+ return; |
+ } |
+ if (!pFieldDict->KeyExist("V")) { |
+ return; |
+ } |
+ CPDF_FormField* pField = m_pFieldTree->GetField(name); |
+ if (pField == NULL) { |
+ return; |
+ } |
+ CFX_WideString csWValue; |
+ FPDFDOC_FDF_GetFieldValue(pFieldDict, csWValue, m_bsEncoding); |
+ int iType = pField->GetFieldType(); |
+ if (bNotify && m_pFormNotify != NULL) { |
+ int iRet = 0; |
+ if (iType == FIELDTYPE_LISTBOX) { |
+ iRet = m_pFormNotify->BeforeSelectionChange(pField, csWValue); |
+ } else if (iType == FIELDTYPE_COMBOBOX || iType == FIELDTYPE_TEXTFIELD) { |
+ iRet = m_pFormNotify->BeforeValueChange(pField, csWValue); |
+ } |
+ if (iRet < 0) { |
+ return; |
+ } |
+ } |
+ CFX_ByteArray statusArray; |
+ if (iType == FIELDTYPE_CHECKBOX || iType == FIELDTYPE_RADIOBUTTON) { |
+ SaveCheckedFieldStatus(pField, statusArray); |
+ } |
+ pField->SetValue(csWValue); |
+ CPDF_FormField::Type eType = pField->GetType(); |
+ if ((eType == CPDF_FormField::ListBox || eType == CPDF_FormField::ComboBox) && |
+ pFieldDict->KeyExist("Opt")) { |
+ pField->m_pDict->SetAt("Opt", |
+ pFieldDict->GetElementValue("Opt")->Clone(TRUE)); |
+ } |
+ if (bNotify && m_pFormNotify != NULL) { |
if (iType == FIELDTYPE_CHECKBOX || iType == FIELDTYPE_RADIOBUTTON) { |
- SaveCheckedFieldStatus(pField, statusArray); |
- } |
- pField->SetValue(csWValue); |
- CPDF_FormField::Type eType = pField->GetType(); |
- if ((eType == CPDF_FormField::ListBox || eType == CPDF_FormField::ComboBox) && pFieldDict->KeyExist("Opt")) { |
- pField->m_pDict->SetAt("Opt", pFieldDict->GetElementValue("Opt")->Clone(TRUE)); |
- } |
- if (bNotify && m_pFormNotify != NULL) { |
- if (iType == FIELDTYPE_CHECKBOX || iType == FIELDTYPE_RADIOBUTTON) { |
- m_pFormNotify->AfterCheckedStatusChange(pField, statusArray); |
- } else if (iType == FIELDTYPE_LISTBOX) { |
- m_pFormNotify->AfterSelectionChange(pField); |
- } else if (iType == FIELDTYPE_COMBOBOX || iType == FIELDTYPE_TEXTFIELD) { |
- m_pFormNotify->AfterValueChange(pField); |
- } |
- } |
- if (CPDF_InterForm::m_bUpdateAP) { |
- pField->UpdateAP(NULL); |
+ m_pFormNotify->AfterCheckedStatusChange(pField, statusArray); |
+ } else if (iType == FIELDTYPE_LISTBOX) { |
+ m_pFormNotify->AfterSelectionChange(pField); |
+ } else if (iType == FIELDTYPE_COMBOBOX || iType == FIELDTYPE_TEXTFIELD) { |
+ m_pFormNotify->AfterValueChange(pField); |
+ } |
+ } |
+ if (CPDF_InterForm::m_bUpdateAP) { |
+ pField->UpdateAP(NULL); |
+ } |
+} |
+FX_BOOL CPDF_InterForm::ImportFromFDF(const CFDF_Document* pFDF, |
+ FX_BOOL bNotify) { |
+ if (pFDF == NULL) { |
+ return FALSE; |
+ } |
+ CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDict("FDF"); |
+ if (pMainDict == NULL) { |
+ return FALSE; |
+ } |
+ CPDF_Array* pFields = pMainDict->GetArray("Fields"); |
+ if (pFields == NULL) { |
+ return FALSE; |
+ } |
+ m_bsEncoding = pMainDict->GetString(FX_BSTRC("Encoding")); |
+ if (bNotify && m_pFormNotify != NULL) { |
+ int iRet = m_pFormNotify->BeforeFormImportData(this); |
+ if (iRet < 0) { |
+ return FALSE; |
+ } |
+ } |
+ for (FX_DWORD i = 0; i < pFields->GetCount(); i++) { |
+ CPDF_Dictionary* pField = pFields->GetDict(i); |
+ if (pField == NULL) { |
+ continue; |
} |
+ FDF_ImportField(pField, L"", bNotify); |
+ } |
+ if (bNotify && m_pFormNotify != NULL) { |
+ m_pFormNotify->AfterFormImportData(this); |
+ } |
+ return TRUE; |
} |
-FX_BOOL CPDF_InterForm::ImportFromFDF(const CFDF_Document* pFDF, FX_BOOL bNotify) |
-{ |
- if (pFDF == NULL) { |
- return FALSE; |
- } |
- CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDict("FDF"); |
- if (pMainDict == NULL) { |
- return FALSE; |
- } |
- CPDF_Array* pFields = pMainDict->GetArray("Fields"); |
- if (pFields == NULL) { |
- return FALSE; |
- } |
- m_bsEncoding = pMainDict->GetString(FX_BSTRC("Encoding")); |
- if (bNotify && m_pFormNotify != NULL) { |
- int iRet = m_pFormNotify->BeforeFormImportData(this); |
- if (iRet < 0) { |
- return FALSE; |
- } |
- } |
- for (FX_DWORD i = 0; i < pFields->GetCount(); i ++) { |
- CPDF_Dictionary* pField = pFields->GetDict(i); |
- if (pField == NULL) { |
- continue; |
- } |
- FDF_ImportField(pField, L"", bNotify); |
+void CPDF_InterForm::SetFormNotify(const CPDF_FormNotify* pNotify) { |
+ m_pFormNotify = (CPDF_FormNotify*)pNotify; |
+} |
+int CPDF_InterForm::GetPageWithWidget(int iCurPage, FX_BOOL bNext) { |
+ if (iCurPage < 0) { |
+ return -1; |
+ } |
+ int iPageCount = m_pDocument->GetPageCount(); |
+ if (iCurPage >= iPageCount) { |
+ return -1; |
+ } |
+ int iNewPage = iCurPage; |
+ do { |
+ iNewPage += bNext ? 1 : -1; |
+ if (iNewPage >= iPageCount) { |
+ iNewPage = 0; |
} |
- if (bNotify && m_pFormNotify != NULL) { |
- m_pFormNotify->AfterFormImportData(this); |
+ if (iNewPage < 0) { |
+ iNewPage = iPageCount - 1; |
} |
- return TRUE; |
-} |
-void CPDF_InterForm::SetFormNotify(const CPDF_FormNotify* pNotify) |
-{ |
- m_pFormNotify = (CPDF_FormNotify*)pNotify; |
-} |
-int CPDF_InterForm::GetPageWithWidget(int iCurPage, FX_BOOL bNext) |
-{ |
- if (iCurPage < 0) { |
- return -1; |
+ if (iNewPage == iCurPage) { |
+ break; |
} |
- int iPageCount = m_pDocument->GetPageCount(); |
- if (iCurPage >= iPageCount) { |
- return -1; |
+ CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iNewPage); |
+ if (pPageDict == NULL) { |
+ continue; |
} |
- int iNewPage = iCurPage; |
- do { |
- iNewPage += bNext ? 1 : -1; |
- if (iNewPage >= iPageCount) { |
- iNewPage = 0; |
- } |
- if (iNewPage < 0) { |
- iNewPage = iPageCount - 1; |
- } |
- if (iNewPage == iCurPage) { |
- break; |
- } |
- CPDF_Dictionary* pPageDict = m_pDocument->GetPage(iNewPage); |
- if (pPageDict == NULL) { |
- continue; |
- } |
- CPDF_Array* pAnnots = pPageDict->GetArray("Annots"); |
- if (pAnnots == NULL) { |
- continue; |
- } |
- FX_DWORD dwCount = pAnnots->GetCount(); |
- for (FX_DWORD i = 0; i < dwCount; i ++) { |
- CPDF_Object* pAnnotDict = pAnnots->GetElementValue(i); |
- if (pAnnotDict == NULL) { |
- continue; |
- } |
- CPDF_FormControl* pControl = NULL; |
- if (m_ControlMap.Lookup(pAnnotDict, (void*&)pControl)) { |
- return iNewPage; |
- } |
- } |
- } while (TRUE); |
- return -1; |
+ CPDF_Array* pAnnots = pPageDict->GetArray("Annots"); |
+ if (pAnnots == NULL) { |
+ continue; |
+ } |
+ FX_DWORD dwCount = pAnnots->GetCount(); |
+ for (FX_DWORD i = 0; i < dwCount; i++) { |
+ CPDF_Object* pAnnotDict = pAnnots->GetElementValue(i); |
+ if (pAnnotDict == NULL) { |
+ continue; |
+ } |
+ CPDF_FormControl* pControl = NULL; |
+ if (m_ControlMap.Lookup(pAnnotDict, (void*&)pControl)) { |
+ return iNewPage; |
+ } |
+ } |
+ } while (TRUE); |
+ return -1; |
} |