Add constants for common form field dictionary entries. BUG=pdfium:1049 Change-Id: I34c8ab59ce684de2e06ab6c3c2acfa46d3b0acb9 Reviewed-on: https://pdfium-review.googlesource.com/c/51232 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
diff --git a/constants/BUILD.gn b/constants/BUILD.gn index 9216738..30c6978 100644 --- a/constants/BUILD.gn +++ b/constants/BUILD.gn
@@ -9,6 +9,7 @@ sources = [ "annotation_common.h", "annotation_flags.h", + "form_fields.h", "form_flags.h", "page_object.h", "stream_dict_common.h",
diff --git a/constants/form_fields.h b/constants/form_fields.h new file mode 100644 index 0000000..248991b --- /dev/null +++ b/constants/form_fields.h
@@ -0,0 +1,27 @@ +// Copyright 2019 PDFium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CONSTANTS_FORM_FIELDS_H_ +#define CONSTANTS_FORM_FIELDS_H_ + +namespace pdfium { +namespace form_fields { + +// PDF 1.7 spec, table 8.69. +// Entries common to all field dictionaries. +constexpr char kFT[] = "FT"; +constexpr char kParent[] = "Parent"; +constexpr char kKids[] = "Kids"; +constexpr char kT[] = "T"; +constexpr char kTU[] = "TU"; +constexpr char kTM[] = "TM"; +constexpr char kFf[] = "Ff"; +constexpr char kV[] = "V"; +constexpr char kDV[] = "DV"; +constexpr char kAA[] = "AA"; + +} // namespace form_fields +} // namespace pdfium + +#endif // CONSTANTS_FORM_FIELDS_H_
diff --git a/core/fpdfapi/parser/cpdf_crypto_handler.cpp b/core/fpdfapi/parser/cpdf_crypto_handler.cpp index d0335fc..a87211f 100644 --- a/core/fpdfapi/parser/cpdf_crypto_handler.cpp +++ b/core/fpdfapi/parser/cpdf_crypto_handler.cpp
@@ -12,6 +12,7 @@ #include <stack> #include <utility> +#include "constants/form_fields.h" #include "core/fdrm/fx_crypt.h" #include "core/fpdfapi/parser/cpdf_dictionary.h" #include "core/fpdfapi/parser/cpdf_number.h" @@ -27,7 +28,6 @@ constexpr char kContentsKey[] = "Contents"; constexpr char kTypeKey[] = "Type"; -constexpr char kFTKey[] = "FT"; constexpr char kSignTypeValue[] = "Sig"; } // namespace @@ -39,7 +39,7 @@ return false; const CPDF_Object* type_obj = dictionary->GetDirectObjectFor(kTypeKey); if (!type_obj) - type_obj = dictionary->GetDirectObjectFor(kFTKey); + type_obj = dictionary->GetDirectObjectFor(pdfium::form_fields::kFT); return type_obj && type_obj->GetString() == kSignTypeValue; } @@ -302,7 +302,8 @@ const CPDF_Dictionary* parent_dict = walker.GetParent() ? walker.GetParent()->GetDict() : nullptr; if (walker.dictionary_key() == kContentsKey && - (parent_dict->KeyExist(kTypeKey) || parent_dict->KeyExist(kFTKey))) { + (parent_dict->KeyExist(kTypeKey) || + parent_dict->KeyExist(pdfium::form_fields::kFT))) { // This object may be contents of signature dictionary. // But now values of 'Type' and 'FT' of dictionary keys are encrypted, // and we can not check this.
diff --git a/core/fpdfdoc/cpdf_annotlist.cpp b/core/fpdfdoc/cpdf_annotlist.cpp index 482c79e..f249ab8 100644 --- a/core/fpdfdoc/cpdf_annotlist.cpp +++ b/core/fpdfdoc/cpdf_annotlist.cpp
@@ -12,6 +12,7 @@ #include "constants/annotation_common.h" #include "constants/annotation_flags.h" +#include "constants/form_fields.h" #include "constants/form_flags.h" #include "core/fpdfapi/page/cpdf_page.h" #include "core/fpdfapi/parser/cpdf_array.h" @@ -88,8 +89,9 @@ auto pAnnotDict = pDocument->New<CPDF_Dictionary>(); pAnnotDict->SetNewFor<CPDF_Name>(pdfium::annotation::kType, "Annot"); pAnnotDict->SetNewFor<CPDF_Name>(pdfium::annotation::kSubtype, "Popup"); - pAnnotDict->SetNewFor<CPDF_String>("T", pParentDict->GetStringFor("T"), - false); + pAnnotDict->SetNewFor<CPDF_String>( + pdfium::form_fields::kT, + pParentDict->GetStringFor(pdfium::form_fields::kT), false); pAnnotDict->SetNewFor<CPDF_String>(pdfium::annotation::kContents, sContents.ToUTF8(), false); @@ -126,7 +128,8 @@ return; } - CPDF_Object* pFieldTypeObj = FPDF_GetFieldAttr(pAnnotDict, "FT"); + CPDF_Object* pFieldTypeObj = + FPDF_GetFieldAttr(pAnnotDict, pdfium::form_fields::kFT); if (!pFieldTypeObj) return; @@ -137,7 +140,8 @@ return; } - CPDF_Object* pFieldFlagsObj = FPDF_GetFieldAttr(pAnnotDict, "Ff"); + CPDF_Object* pFieldFlagsObj = + FPDF_GetFieldAttr(pAnnotDict, pdfium::form_fields::kFf); uint32_t flags = pFieldFlagsObj ? pFieldFlagsObj->GetInteger() : 0; if (field_type == "Ch") { auto type = (flags & pdfium::form_flags::kChoiceCombo) @@ -154,7 +158,8 @@ if (pAnnotDict->KeyExist(pdfium::annotation::kAS)) return; - CPDF_Dictionary* pParentDict = pAnnotDict->GetDictFor("Parent"); + CPDF_Dictionary* pParentDict = + pAnnotDict->GetDictFor(pdfium::form_fields::kParent); if (!pParentDict || !pParentDict->KeyExist(pdfium::annotation::kAS)) return;
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp index 1c9ea00..15b9066 100644 --- a/core/fpdfdoc/cpdf_formfield.cpp +++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -10,6 +10,7 @@ #include <set> #include <utility> +#include "constants/form_fields.h" #include "constants/form_flags.h" #include "core/fpdfapi/parser/cfdf_document.h" #include "core/fpdfapi/parser/cpdf_array.h" @@ -58,8 +59,8 @@ if (pAttr) return pAttr; - return FPDF_GetFieldAttrRecursive(pFieldDict->GetDictFor("Parent"), name, - nLevel + 1); + return FPDF_GetFieldAttrRecursive( + pFieldDict->GetDictFor(pdfium::form_fields::kParent), name, nLevel + 1); } } // namespace @@ -88,14 +89,14 @@ CPDF_Dictionary* pLevel = pFieldDict; while (pLevel) { visited.insert(pLevel); - WideString short_name = pLevel->GetUnicodeTextFor("T"); + WideString short_name = pLevel->GetUnicodeTextFor(pdfium::form_fields::kT); if (!short_name.IsEmpty()) { if (full_name.IsEmpty()) full_name = std::move(short_name); else full_name = short_name + L'.' + full_name; } - pLevel = pLevel->GetDictFor("Parent"); + pLevel = pLevel->GetDictFor(pdfium::form_fields::kParent); if (pdfium::ContainsKey(visited, pLevel)) break; } @@ -111,9 +112,11 @@ CPDF_FormField::~CPDF_FormField() {} void CPDF_FormField::InitFieldFlags() { - const CPDF_Object* ft_attr = FPDF_GetFieldAttr(m_pDict.Get(), "FT"); + const CPDF_Object* ft_attr = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kFT); ByteString type_name = ft_attr ? ft_attr->GetString() : ByteString(); - const CPDF_Object* ff_attr = FPDF_GetFieldAttr(m_pDict.Get(), "Ff"); + const CPDF_Object* ff_attr = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kFf); uint32_t flags = ff_attr ? ff_attr->GetInteger() : 0; if (flags & pdfium::form_flags::kReadOnly) { m_Flags |= pdfium::form_flags::kReadOnly; @@ -212,12 +215,14 @@ case kRichText: case kFile: default: { - const CPDF_Object* pDV = FPDF_GetFieldAttr(m_pDict.Get(), "DV"); + const CPDF_Object* pDV = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kDV); WideString csDValue; if (pDV) csDValue = pDV->GetUnicodeText(); - const CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict.Get(), "V"); + const CPDF_Object* pV = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kV); WideString csValue; if (pV) csValue = pV->GetUnicodeText(); @@ -235,14 +240,16 @@ if (!pClone) return false; - m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("V")); - m_pDict->SetFor("V", std::move(pClone)); + m_pForm->GetDocument()->AddOrphan( + m_pDict->RemoveFor(pdfium::form_fields::kV)); + m_pDict->SetFor(pdfium::form_fields::kV, std::move(pClone)); if (pRV) { m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("RV")); m_pDict->SetFor("RV", pDV->Clone()); } } else { - m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("V")); + m_pForm->GetDocument()->AddOrphan( + m_pDict->RemoveFor(pdfium::form_fields::kV)); m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("RV")); } if (notify == NotificationOption::kNotify) @@ -294,22 +301,26 @@ } CPDF_AAction CPDF_FormField::GetAdditionalAction() const { - const CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict.Get(), "AA"); + const CPDF_Object* pObj = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kAA); return CPDF_AAction(pObj ? pObj->GetDict() : nullptr); } WideString CPDF_FormField::GetAlternateName() const { - const CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict.Get(), "TU"); + const CPDF_Object* pObj = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kTU); return pObj ? pObj->GetUnicodeText() : WideString(); } WideString CPDF_FormField::GetMappingName() const { - const CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict.Get(), "TM"); + const CPDF_Object* pObj = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kTM); return pObj ? pObj->GetUnicodeText() : WideString(); } uint32_t CPDF_FormField::GetFieldFlags() const { - const CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict.Get(), "Ff"); + const CPDF_Object* pObj = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kFf); return pObj ? pObj->GetInteger() : 0; } @@ -327,13 +338,14 @@ return GetCheckValue(bDefault); const CPDF_Object* pValue = - FPDF_GetFieldAttr(m_pDict.Get(), bDefault ? "DV" : "V"); + FPDF_GetFieldAttr(m_pDict.Get(), bDefault ? pdfium::form_fields::kDV + : pdfium::form_fields::kV); if (!pValue) { if (!bDefault) { if (m_Type == kRichText) - pValue = FPDF_GetFieldAttr(m_pDict.Get(), "V"); + pValue = FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kV); if (!pValue && m_Type != kText) - pValue = FPDF_GetFieldAttr(m_pDict.Get(), "DV"); + pValue = FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kDV); } if (!pValue) return WideString(); @@ -380,7 +392,8 @@ !NotifyBeforeValueChange(csValue)) { return false; } - ByteString key(bDefault ? "DV" : "V"); + ByteString key(bDefault ? pdfium::form_fields::kDV + : pdfium::form_fields::kV); m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor(key)); m_pDict->SetNewFor<CPDF_String>(key, csValue); int iIndex = FindOptionValue(csValue); @@ -447,7 +460,8 @@ } int CPDF_FormField::CountSelectedItems() const { - const CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict.Get(), "V"); + const CPDF_Object* pValue = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kV); if (!pValue) { pValue = FPDF_GetFieldAttr(m_pDict.Get(), "I"); if (!pValue) @@ -461,7 +475,8 @@ } int CPDF_FormField::GetSelectedIndex(int index) const { - const CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict.Get(), "V"); + const CPDF_Object* pValue = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kV); if (!pValue) { pValue = FPDF_GetFieldAttr(m_pDict.Get(), "I"); if (!pValue) @@ -505,7 +520,8 @@ if (!NotifyListOrComboBoxBeforeChange(csValue)) return false; } - m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("V")); + m_pForm->GetDocument()->AddOrphan( + m_pDict->RemoveFor(pdfium::form_fields::kV)); m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("I")); if (notify == NotificationOption::kNotify) NotifyListOrComboBoxAfterChange(); @@ -520,7 +536,8 @@ return true; WideString opt_value = GetOptionValue(index); - const CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict.Get(), "V"); + const CPDF_Object* pValue = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kV); if (!pValue) { pValue = FPDF_GetFieldAttr(m_pDict.Get(), "I"); if (!pValue) @@ -581,7 +598,7 @@ void CPDF_FormField::SetItemSelectionSelected(int index, const WideString& opt_value) { if (GetType() != kListBox) { - m_pDict->SetNewFor<CPDF_String>("V", opt_value); + m_pDict->SetNewFor<CPDF_String>(pdfium::form_fields::kV, opt_value); CPDF_Array* pI = m_pDict->SetNewFor<CPDF_Array>("I"); pI->AddNew<CPDF_Number>(index); return; @@ -589,11 +606,11 @@ SelectOption(index, true, NotificationOption::kDoNotNotify); if (!(m_Flags & kFormListMultiSelect)) { - m_pDict->SetNewFor<CPDF_String>("V", opt_value); + m_pDict->SetNewFor<CPDF_String>(pdfium::form_fields::kV, opt_value); return; } - CPDF_Array* pArray = m_pDict->SetNewFor<CPDF_Array>("V"); + CPDF_Array* pArray = m_pDict->SetNewFor<CPDF_Array>(pdfium::form_fields::kV); for (int i = 0; i < CountOptions(); i++) { if (i == index || IsItemSelected(i)) pArray->AddNew<CPDF_String>(GetOptionValue(i)); @@ -602,20 +619,24 @@ void CPDF_FormField::SetItemSelectionUnselected(int index, const WideString& opt_value) { - const CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict.Get(), "V"); + const CPDF_Object* pValue = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kV); if (!pValue) return; if (GetType() != kListBox) { - m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("V")); + m_pForm->GetDocument()->AddOrphan( + m_pDict->RemoveFor(pdfium::form_fields::kV)); m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("I")); return; } SelectOption(index, false, NotificationOption::kDoNotNotify); if (pValue->IsString()) { - if (pValue->GetUnicodeText() == opt_value) - m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("V")); + if (pValue->GetUnicodeText() == opt_value) { + m_pForm->GetDocument()->AddOrphan( + m_pDict->RemoveFor(pdfium::form_fields::kV)); + } return; } @@ -628,8 +649,9 @@ pArray->AddNew<CPDF_String>(GetOptionValue(i)); } if (pArray->size() > 0) { - m_pForm->GetDocument()->AddOrphan(m_pDict->RemoveFor("V")); - m_pDict->SetFor("V", std::move(pArray)); + m_pForm->GetDocument()->AddOrphan( + m_pDict->RemoveFor(pdfium::form_fields::kV)); + m_pDict->SetFor(pdfium::form_fields::kV, std::move(pArray)); } } @@ -643,7 +665,8 @@ int CPDF_FormField::GetDefaultSelectedItem() const { ASSERT(GetType() == kComboBox || GetType() == kListBox); - const CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict.Get(), "DV"); + const CPDF_Object* pValue = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kDV); if (!pValue) return -1; WideString csDV = pValue->GetUnicodeText(); @@ -737,17 +760,19 @@ if (!ToArray(pOpt)) { ByteString csBExport = PDF_EncodeText(csWExport); if (bChecked) { - m_pDict->SetNewFor<CPDF_Name>("V", csBExport); + m_pDict->SetNewFor<CPDF_Name>(pdfium::form_fields::kV, csBExport); } else { ByteString csV; - const CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict.Get(), "V"); + const CPDF_Object* pV = + FPDF_GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kV); if (pV) csV = pV->GetString(); if (csV == csBExport) - m_pDict->SetNewFor<CPDF_Name>("V", "Off"); + m_pDict->SetNewFor<CPDF_Name>(pdfium::form_fields::kV, "Off"); } } else if (bChecked) { - m_pDict->SetNewFor<CPDF_Name>("V", ByteString::Format("%d", iControlIndex)); + m_pDict->SetNewFor<CPDF_Name>(pdfium::form_fields::kV, + ByteString::Format("%d", iControlIndex)); } if (notify == NotificationOption::kNotify && m_pForm->GetFormNotify()) m_pForm->GetFormNotify()->AfterCheckedStatusChange(this);
diff --git a/core/fpdfdoc/cpdf_interactiveform.cpp b/core/fpdfdoc/cpdf_interactiveform.cpp index 5555904..5507763 100644 --- a/core/fpdfdoc/cpdf_interactiveform.cpp +++ b/core/fpdfdoc/cpdf_interactiveform.cpp
@@ -9,6 +9,7 @@ #include <utility> #include <vector> +#include "constants/form_fields.h" #include "constants/stream_dict_common.h" #include "core/fpdfapi/font/cpdf_font.h" #include "core/fpdfapi/font/cpdf_fontencoding.h" @@ -841,7 +842,7 @@ return; uint32_t dwParentObjNum = pFieldDict->GetObjNum(); - CPDF_Array* pKids = pFieldDict->GetArrayFor("Kids"); + CPDF_Array* pKids = pFieldDict->GetArrayFor(pdfium::form_fields::kKids); if (!pKids) { AddTerminalField(pFieldDict); return; @@ -851,7 +852,8 @@ if (!pFirstKid) return; - if (pFirstKid->KeyExist("T") || pFirstKid->KeyExist("Kids")) { + if (pFirstKid->KeyExist(pdfium::form_fields::kT) || + pFirstKid->KeyExist(pdfium::form_fields::kKids)) { for (size_t i = 0; i < pKids->size(); i++) { CPDF_Dictionary* pChildDict = pKids->GetDictAt(i); if (pChildDict) { @@ -885,10 +887,11 @@ } void CPDF_InteractiveForm::AddTerminalField(CPDF_Dictionary* pFieldDict) { - if (!pFieldDict->KeyExist("FT")) { + if (!pFieldDict->KeyExist(pdfium::form_fields::kFT)) { // Key "FT" is required for terminal fields, it is also inheritable. - CPDF_Dictionary* pParentDict = pFieldDict->GetDictFor("Parent"); - if (!pParentDict || !pParentDict->KeyExist("FT")) + CPDF_Dictionary* pParentDict = + pFieldDict->GetDictFor(pdfium::form_fields::kParent); + if (!pParentDict || !pParentDict->KeyExist(pdfium::form_fields::kFT)) return; } @@ -901,42 +904,45 @@ pField = m_pFieldTree->GetField(csWName); if (!pField) { CPDF_Dictionary* pParent = pFieldDict; - if (!pFieldDict->KeyExist("T") && + if (!pFieldDict->KeyExist(pdfium::form_fields::kT) && pFieldDict->GetStringFor("Subtype") == "Widget") { - pParent = pFieldDict->GetDictFor("Parent"); + pParent = pFieldDict->GetDictFor(pdfium::form_fields::kParent); if (!pParent) pParent = pFieldDict; } - if (pParent && pParent != pFieldDict && !pParent->KeyExist("FT")) { - if (pFieldDict->KeyExist("FT")) { - CPDF_Object* pFTValue = pFieldDict->GetDirectObjectFor("FT"); + if (pParent && pParent != pFieldDict && + !pParent->KeyExist(pdfium::form_fields::kFT)) { + if (pFieldDict->KeyExist(pdfium::form_fields::kFT)) { + CPDF_Object* pFTValue = + pFieldDict->GetDirectObjectFor(pdfium::form_fields::kFT); if (pFTValue) - pParent->SetFor("FT", pFTValue->Clone()); + pParent->SetFor(pdfium::form_fields::kFT, pFTValue->Clone()); } - if (pFieldDict->KeyExist("Ff")) { - CPDF_Object* pFfValue = pFieldDict->GetDirectObjectFor("Ff"); + if (pFieldDict->KeyExist(pdfium::form_fields::kFf)) { + CPDF_Object* pFfValue = + pFieldDict->GetDirectObjectFor(pdfium::form_fields::kFf); if (pFfValue) - pParent->SetFor("Ff", pFfValue->Clone()); + pParent->SetFor(pdfium::form_fields::kFf, pFfValue->Clone()); } } auto newField = pdfium::MakeUnique<CPDF_FormField>(this, pParent); pField = newField.get(); - CPDF_Object* pTObj = pDict->GetObjectFor("T"); + CPDF_Object* pTObj = pDict->GetObjectFor(pdfium::form_fields::kT); if (ToReference(pTObj)) { std::unique_ptr<CPDF_Object> pClone = pTObj->CloneDirectObject(); if (pClone) - pDict->SetFor("T", std::move(pClone)); + pDict->SetFor(pdfium::form_fields::kT, std::move(pClone)); else - pDict->SetNewFor<CPDF_Name>("T", ByteString()); + pDict->SetNewFor<CPDF_Name>(pdfium::form_fields::kT, ByteString()); } if (!m_pFieldTree->SetField(csWName, std::move(newField))) return; } - CPDF_Array* pKids = pFieldDict->GetArrayFor("Kids"); + CPDF_Array* pKids = pFieldDict->GetArrayFor(pdfium::form_fields::kKids); if (pKids) { for (size_t i = 0; i < pKids->size(); i++) { CPDF_Dictionary* pKid = pKids->GetDictAt(i); @@ -990,8 +996,10 @@ bFind = pdfium::ContainsValue(*fields, pField); if (bIncludeOrExclude == bFind) { const CPDF_Dictionary* pFieldDict = pField->GetDict(); - if (pField->IsRequired() && pFieldDict->GetStringFor("V").IsEmpty()) + if (pField->IsRequired() && + pFieldDict->GetStringFor(pdfium::form_fields::kV).IsEmpty()) { return false; + } } } return true; @@ -1047,26 +1055,29 @@ continue; if ((dwFlags & 0x02) != 0 && - pField->GetDict()->GetStringFor("V").IsEmpty()) { + pField->GetDict()->GetStringFor(pdfium::form_fields::kV).IsEmpty()) { continue; } WideString fullname = FPDF_GetFullName(pField->GetFieldDict()); auto pFieldDict = pDoc->New<CPDF_Dictionary>(); - pFieldDict->SetNewFor<CPDF_String>("T", fullname); + pFieldDict->SetNewFor<CPDF_String>(pdfium::form_fields::kT, fullname); if (pField->GetType() == CPDF_FormField::kCheckBox || pField->GetType() == CPDF_FormField::kRadioButton) { WideString csExport = pField->GetCheckValue(false); ByteString csBExport = PDF_EncodeText(csExport); CPDF_Object* pOpt = FPDF_GetFieldAttr(pField->GetDict(), "Opt"); - if (pOpt) - pFieldDict->SetNewFor<CPDF_String>("V", csBExport, false); - else - pFieldDict->SetNewFor<CPDF_Name>("V", csBExport); + if (pOpt) { + pFieldDict->SetNewFor<CPDF_String>(pdfium::form_fields::kV, csBExport, + false); + } else { + pFieldDict->SetNewFor<CPDF_Name>(pdfium::form_fields::kV, csBExport); + } } else { - CPDF_Object* pV = FPDF_GetFieldAttr(pField->GetDict(), "V"); + CPDF_Object* pV = + FPDF_GetFieldAttr(pField->GetDict(), pdfium::form_fields::kV); if (pV) - pFieldDict->SetFor("V", pV->CloneDirectObject()); + pFieldDict->SetFor(pdfium::form_fields::kV, pV->CloneDirectObject()); } pFields->Add(std::move(pFieldDict)); }
diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp index 3117253..8f28c65 100644 --- a/core/fpdfdoc/cpvt_generateap.cpp +++ b/core/fpdfdoc/cpvt_generateap.cpp
@@ -12,6 +12,7 @@ #include <utility> #include "constants/annotation_common.h" +#include "constants/form_fields.h" #include "core/fpdfapi/font/cpdf_font.h" #include "core/fpdfapi/parser/cpdf_array.h" #include "core/fpdfapi/parser/cpdf_boolean.h" @@ -365,7 +366,7 @@ const CPDF_Dictionary& pAnnotDict, CPDF_Font* pDefFont, const ByteString& sFontName) { - WideString swValue(pAnnotDict.GetUnicodeTextFor("T")); + WideString swValue(pAnnotDict.GetUnicodeTextFor(pdfium::form_fields::kT)); swValue += L'\n'; swValue += pAnnotDict.GetUnicodeTextFor(pdfium::annotation::kContents); CPVT_FontMap map(pDoc, nullptr, pDefFont, sFontName); @@ -1079,15 +1080,18 @@ switch (type) { case CPVT_GenerateAP::kTextField: { WideString swValue = - FPDF_GetFieldAttr(pAnnotDict, "V") - ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText() + FPDF_GetFieldAttr(pAnnotDict, pdfium::form_fields::kV) + ? FPDF_GetFieldAttr(pAnnotDict, pdfium::form_fields::kV) + ->GetUnicodeText() : WideString(); int32_t nAlign = FPDF_GetFieldAttr(pAnnotDict, "Q") ? FPDF_GetFieldAttr(pAnnotDict, "Q")->GetInteger() : 0; - uint32_t dwFlags = FPDF_GetFieldAttr(pAnnotDict, "Ff") - ? FPDF_GetFieldAttr(pAnnotDict, "Ff")->GetInteger() - : 0; + uint32_t dwFlags = + FPDF_GetFieldAttr(pAnnotDict, pdfium::form_fields::kFf) + ? FPDF_GetFieldAttr(pAnnotDict, pdfium::form_fields::kFf) + ->GetInteger() + : 0; uint32_t dwMaxLen = FPDF_GetFieldAttr(pAnnotDict, "MaxLen") ? FPDF_GetFieldAttr(pAnnotDict, "MaxLen")->GetInteger() @@ -1150,8 +1154,9 @@ } case CPVT_GenerateAP::kComboBox: { WideString swValue = - FPDF_GetFieldAttr(pAnnotDict, "V") - ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText() + FPDF_GetFieldAttr(pAnnotDict, pdfium::form_fields::kV) + ? FPDF_GetFieldAttr(pAnnotDict, pdfium::form_fields::kV) + ->GetUnicodeText() : WideString(); CPVT_FontMap map( pDoc, pStreamDict ? pStreamDict->GetDictFor("Resources") : nullptr,
diff --git a/fpdfsdk/cpdfsdk_helpers.cpp b/fpdfsdk/cpdfsdk_helpers.cpp index 2a64f5f..6715c99 100644 --- a/fpdfsdk/cpdfsdk_helpers.cpp +++ b/fpdfsdk/cpdfsdk_helpers.cpp
@@ -6,6 +6,7 @@ #include "fpdfsdk/cpdfsdk_helpers.h" +#include "constants/form_fields.h" #include "constants/stream_dict_common.h" #include "core/fpdfapi/cpdf_modulemgr.h" #include "core/fpdfapi/page/cpdf_page.h" @@ -390,7 +391,7 @@ break; case CPDF_Annot::Subtype::WIDGET: { const CPDF_Dictionary* pAnnotDict = pAnnot->GetAnnotDict(); - ByteString cbString = pAnnotDict->GetStringFor("FT"); + ByteString cbString = pAnnotDict->GetStringFor(pdfium::form_fields::kFT); if (cbString == "Sig") RaiseUnSupportError(FPDF_UNSP_ANNOT_SIG); break;