| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "core/include/fpdfdoc/fpdf_doc.h" | 7 #include "core/include/fpdfdoc/fpdf_doc.h" |
| 8 #include "doc_utils.h" | 8 #include "doc_utils.h" |
| 9 | 9 |
| 10 const int nMaxRecursion = 32; | 10 const int nMaxRecursion = 32; |
| (...skipping 1030 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1041 if (bSimpleFileSpec) { | 1041 if (bSimpleFileSpec) { |
| 1042 CFX_WideString wsFilePath = FILESPEC_EncodeFileName(pdf_path); | 1042 CFX_WideString wsFilePath = FILESPEC_EncodeFileName(pdf_path); |
| 1043 pMainDict->SetAtString("F", CFX_ByteString::FromUnicode(wsFilePath)); | 1043 pMainDict->SetAtString("F", CFX_ByteString::FromUnicode(wsFilePath)); |
| 1044 pMainDict->SetAtString("UF", PDF_EncodeText(wsFilePath)); | 1044 pMainDict->SetAtString("UF", PDF_EncodeText(wsFilePath)); |
| 1045 } else { | 1045 } else { |
| 1046 CPDF_FileSpec filespec; | 1046 CPDF_FileSpec filespec; |
| 1047 filespec.SetFileName(pdf_path); | 1047 filespec.SetFileName(pdf_path); |
| 1048 pMainDict->SetAt("F", static_cast<CPDF_Object*>(filespec)); | 1048 pMainDict->SetAt("F", static_cast<CPDF_Object*>(filespec)); |
| 1049 } | 1049 } |
| 1050 } | 1050 } |
| 1051 CPDF_Array* pFields = CPDF_Array::Create(); | 1051 CPDF_Array* pFields = new CPDF_Array; |
| 1052 if (!pFields) { | |
| 1053 return NULL; | |
| 1054 } | |
| 1055 pMainDict->SetAt("Fields", pFields); | 1052 pMainDict->SetAt("Fields", pFields); |
| 1056 int nCount = m_pFieldTree->m_Root.CountFields(); | 1053 int nCount = m_pFieldTree->m_Root.CountFields(); |
| 1057 for (int i = 0; i < nCount; i++) { | 1054 for (int i = 0; i < nCount; i++) { |
| 1058 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); | 1055 CPDF_FormField* pField = m_pFieldTree->m_Root.GetField(i); |
| 1059 if (!pField || pField->GetType() == CPDF_FormField::PushButton) { | 1056 if (!pField || pField->GetType() == CPDF_FormField::PushButton) { |
| 1060 continue; | 1057 continue; |
| 1061 } | 1058 } |
| 1062 FX_DWORD dwFlags = pField->GetFieldFlags(); | 1059 FX_DWORD dwFlags = pField->GetFieldFlags(); |
| 1063 if (dwFlags & 0x04) | 1060 if (dwFlags & 0x04) |
| 1064 continue; | 1061 continue; |
| 1065 | 1062 |
| 1066 auto it = std::find(fields.begin(), fields.end(), pField); | 1063 auto it = std::find(fields.begin(), fields.end(), pField); |
| 1067 if (bIncludeOrExclude == (it != fields.end())) { | 1064 if (bIncludeOrExclude == (it != fields.end())) { |
| 1068 if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetString("V").IsEmpty()) | 1065 if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetString("V").IsEmpty()) |
| 1069 continue; | 1066 continue; |
| 1070 | 1067 |
| 1071 CFX_WideString fullname = GetFullName(pField->GetFieldDict()); | 1068 CFX_WideString fullname = GetFullName(pField->GetFieldDict()); |
| 1072 CPDF_Dictionary* pFieldDict = CPDF_Dictionary::Create(); | 1069 CPDF_Dictionary* pFieldDict = new CPDF_Dictionary; |
| 1073 if (!pFieldDict) | 1070 pFieldDict->SetAt("T", new CPDF_String(fullname)); |
| 1074 return nullptr; | |
| 1075 | |
| 1076 CPDF_String* pString = CPDF_String::Create(fullname); | |
| 1077 if (!pString) { | |
| 1078 pFieldDict->Release(); | |
| 1079 return nullptr; | |
| 1080 } | |
| 1081 pFieldDict->SetAt("T", pString); | |
| 1082 if (pField->GetType() == CPDF_FormField::CheckBox || | 1071 if (pField->GetType() == CPDF_FormField::CheckBox || |
| 1083 pField->GetType() == CPDF_FormField::RadioButton) { | 1072 pField->GetType() == CPDF_FormField::RadioButton) { |
| 1084 CFX_WideString csExport = pField->GetCheckValue(FALSE); | 1073 CFX_WideString csExport = pField->GetCheckValue(FALSE); |
| 1085 CFX_ByteString csBExport = PDF_EncodeText(csExport); | 1074 CFX_ByteString csBExport = PDF_EncodeText(csExport); |
| 1086 CPDF_Object* pOpt = FPDF_GetFieldAttr(pField->m_pDict, "Opt"); | 1075 CPDF_Object* pOpt = FPDF_GetFieldAttr(pField->m_pDict, "Opt"); |
| 1087 if (pOpt) | 1076 if (pOpt) |
| 1088 pFieldDict->SetAtString("V", csBExport); | 1077 pFieldDict->SetAtString("V", csBExport); |
| 1089 else | 1078 else |
| 1090 pFieldDict->SetAtName("V", csBExport); | 1079 pFieldDict->SetAtName("V", csBExport); |
| 1091 } else { | 1080 } else { |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1226 FDF_ImportField(pField, L"", bNotify); | 1215 FDF_ImportField(pField, L"", bNotify); |
| 1227 } | 1216 } |
| 1228 if (bNotify && m_pFormNotify) { | 1217 if (bNotify && m_pFormNotify) { |
| 1229 m_pFormNotify->AfterFormImportData(this); | 1218 m_pFormNotify->AfterFormImportData(this); |
| 1230 } | 1219 } |
| 1231 return TRUE; | 1220 return TRUE; |
| 1232 } | 1221 } |
| 1233 void CPDF_InterForm::SetFormNotify(const CPDF_FormNotify* pNotify) { | 1222 void CPDF_InterForm::SetFormNotify(const CPDF_FormNotify* pNotify) { |
| 1234 m_pFormNotify = (CPDF_FormNotify*)pNotify; | 1223 m_pFormNotify = (CPDF_FormNotify*)pNotify; |
| 1235 } | 1224 } |
| OLD | NEW |