CFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault) const { if (GetType() == CheckBox || GetType() == RadioButton) return GetCheckValue(bDefault); CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V"); if (!pValue) { if (!bDefault) { if (m_Type == RichText) { pValue = FPDF_GetFieldAttr(m_pDict, "V"); } if (!pValue && m_Type != Text) { pValue = FPDF_GetFieldAttr(m_pDict, "DV"); } } if (!pValue) return CFX_WideString(); } switch (pValue->GetType()) { case CPDF_Object::STRING: case CPDF_Object::STREAM: return pValue->GetUnicodeText(); case CPDF_Object::ARRAY: pValue = pValue->AsArray()->GetDirectObjectAt(0); if (pValue) return pValue->GetUnicodeText(); break; default: break; } return CFX_WideString(); }
int CPDF_FormField::CountSelectedItems() { CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); if (pValue == NULL) { pValue = FPDF_GetFieldAttr(m_pDict, "I"); if (pValue == NULL) { return 0; } } if (pValue->GetType() == PDFOBJ_STRING) { if (pValue->GetString().IsEmpty()) { return 0; } return 1; } if (pValue->GetType() == PDFOBJ_NUMBER) { if (pValue->GetString().IsEmpty()) { return 0; } return 1; } if (pValue->GetType() != PDFOBJ_ARRAY) { return 0; } return ((CPDF_Array*)pValue)->GetCount(); }
CFDF_Document* CPDF_InterForm::ExportToFDF( const CFX_WideStringC& pdf_path, const std::vector<CPDF_FormField*>& fields, bool bIncludeOrExclude, bool bSimpleFileSpec) const { CFDF_Document* pDoc = CFDF_Document::CreateNewDoc(); if (!pDoc) return nullptr; CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDictBy("FDF"); if (!pdf_path.IsEmpty()) { if (bSimpleFileSpec) { CFX_WideString wsFilePath = CPDF_FileSpec::EncodeFileName(pdf_path); pMainDict->SetAtString("F", CFX_ByteString::FromUnicode(wsFilePath)); pMainDict->SetAtString("UF", PDF_EncodeText(wsFilePath)); } else { CPDF_FileSpec filespec; filespec.SetFileName(pdf_path); pMainDict->SetAt("F", filespec.GetObj()); } } CPDF_Array* pFields = new CPDF_Array; 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 || pField->GetType() == CPDF_FormField::PushButton) continue; uint32_t dwFlags = pField->GetFieldFlags(); if (dwFlags & 0x04) continue; if (bIncludeOrExclude == pdfium::ContainsValue(fields, pField)) { if ((dwFlags & 0x02) != 0 && pField->m_pDict->GetStringBy("V").IsEmpty()) continue; CFX_WideString fullname = FPDF_GetFullName(pField->GetFieldDict()); CPDF_Dictionary* pFieldDict = new CPDF_Dictionary; pFieldDict->SetAt("T", new CPDF_String(fullname)); 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) pFieldDict->SetAtString("V", csBExport); else pFieldDict->SetAtName("V", csBExport); } else { CPDF_Object* pV = FPDF_GetFieldAttr(pField->m_pDict, "V"); if (pV) pFieldDict->SetAt("V", pV->CloneDirectObject()); } pFields->Add(pFieldDict); } } return pDoc; }
CFX_WideString CPDF_FormField::GetValue(FX_BOOL bDefault) { if (GetType() == CheckBox || GetType() == RadioButton) { return GetCheckValue(bDefault); } CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, bDefault ? "DV" : "V"); if (pValue == NULL) { if (!bDefault) { if (m_Type == RichText) { pValue = FPDF_GetFieldAttr(m_pDict, "V"); } if (pValue == NULL && m_Type != Text) { pValue = FPDF_GetFieldAttr(m_pDict, "DV"); } } if (pValue == NULL) { return CFX_WideString(); } } switch (pValue->GetType()) { case PDFOBJ_STRING: case PDFOBJ_STREAM: return pValue->GetUnicodeText(); case PDFOBJ_ARRAY: pValue = ((CPDF_Array*)pValue)->GetElementValue(0); return pValue->GetUnicodeText(); break; } return CFX_WideString(); }
FX_BOOL CPDF_FormField::CheckControl(int iControlIndex, bool bChecked, bool bNotify) { ASSERT(GetType() == CheckBox || GetType() == RadioButton); CPDF_FormControl* pControl = GetControl(iControlIndex); if (!pControl) { return FALSE; } if (!bChecked && pControl->IsChecked() == bChecked) { return FALSE; } CFX_WideString csWExport = pControl->GetExportValue(); CFX_ByteString csBExport = PDF_EncodeText(csWExport); int iCount = CountControls(); bool bUnison = PDF_FormField_IsUnison(this); for (int i = 0; i < iCount; i++) { CPDF_FormControl* pCtrl = GetControl(i); if (bUnison) { CFX_WideString csEValue = pCtrl->GetExportValue(); if (csEValue == csWExport) { if (pCtrl->GetOnStateName() == pControl->GetOnStateName()) { pCtrl->CheckControl(bChecked); } else if (bChecked) { pCtrl->CheckControl(FALSE); } } else if (bChecked) { pCtrl->CheckControl(FALSE); } } else { if (i == iControlIndex) { pCtrl->CheckControl(bChecked); } else if (bChecked) { pCtrl->CheckControl(FALSE); } } } CPDF_Object* pOpt = FPDF_GetFieldAttr(m_pDict, "Opt"); if (!ToArray(pOpt)) { if (bChecked) { m_pDict->SetAtName("V", csBExport); } else { CFX_ByteString csV; CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict, "V"); if (pV) { csV = pV->GetString(); } if (csV == csBExport) { m_pDict->SetAtName("V", "Off"); } } } else if (bChecked) { CFX_ByteString csIndex; csIndex.Format("%d", iControlIndex); m_pDict->SetAtName("V", csIndex); } if (bNotify && m_pForm->m_pFormNotify) m_pForm->m_pFormNotify->AfterCheckedStatusChange(this); return TRUE; }
void CPDF_FormField::SyncFieldFlags() { CFX_ByteString type_name = FPDF_GetFieldAttr(m_pDict, "FT") ? FPDF_GetFieldAttr(m_pDict, "FT")->GetString() : CFX_ByteString(); uint32_t flags = FPDF_GetFieldAttr(m_pDict, "Ff") ? FPDF_GetFieldAttr(m_pDict, "Ff")->GetInteger() : 0; m_Flags = 0; if (flags & 1) m_Flags |= kFormFieldReadOnly; if (flags & 2) m_Flags |= kFormFieldRequired; if (flags & 4) m_Flags |= kFormFieldNoExport; if (type_name == "Btn") { if (flags & 0x8000) { m_Type = RadioButton; if (flags & 0x4000) m_Flags |= kFormRadioNoToggleOff; if (flags & 0x2000000) m_Flags |= kFormRadioUnison; } else if (flags & 0x10000) { m_Type = PushButton; } else { m_Type = CheckBox; } } else if (type_name == "Tx") { if (flags & 0x100000) { m_Type = File; } else if (flags & 0x2000000) { m_Type = RichText; } else { m_Type = Text; if (flags & 0x1000) m_Flags |= kFormTextMultiLine; if (flags & 0x2000) m_Flags |= kFormTextPassword; if (flags & 0x800000) m_Flags |= kFormTextNoScroll; if (flags & 0x100000) m_Flags |= kFormTextComb; } LoadDA(); } else if (type_name == "Ch") { if (flags & 0x20000) { m_Type = ComboBox; if (flags & 0x40000) m_Flags |= kFormComboEdit; } else { m_Type = ListBox; if (flags & 0x200000) m_Flags |= kFormListMultiSelect; } LoadDA(); } else if (type_name == "Sig") { m_Type = Sign; } }
CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString& sAlias) { ASSERT(m_pAnnotDict != NULL); ASSERT(m_pDocument != NULL); CPDF_Dictionary* pAcroFormDict = NULL; FX_BOOL bWidget = (m_pAnnotDict->GetString("Subtype") == "Widget"); if (bWidget) { if (CPDF_Dictionary* pRootDict = m_pDocument->GetRoot()) pAcroFormDict = pRootDict->GetDict("AcroForm"); } CFX_ByteString sDA; CPDF_Object* pObj; if ((pObj = FPDF_GetFieldAttr(m_pAnnotDict, "DA"))) sDA = pObj->GetString(); if (bWidget) { if (sDA.IsEmpty()) { pObj = FPDF_GetFieldAttr(pAcroFormDict, "DA"); sDA = pObj ? pObj->GetString() : CFX_ByteString(); } } CPDF_Dictionary* pFontDict = NULL; if (!sDA.IsEmpty()) { CPDF_SimpleParser syntax(sDA); syntax.FindTagParam("Tf", 2); CFX_ByteString sFontName = syntax.GetWord(); sAlias = PDF_NameDecode(sFontName).Mid(1); if (CPDF_Dictionary* pDRDict = m_pAnnotDict->GetDict("DR")) if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDict("Font")) pFontDict = pDRFontDict->GetDict(sAlias); if (!pFontDict) if (CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDict("AP")) if (CPDF_Dictionary* pNormalDict = pAPDict->GetDict("N")) if (CPDF_Dictionary* pNormalResDict = pNormalDict->GetDict("Resources")) if (CPDF_Dictionary* pResFontDict = pNormalResDict->GetDict("Font")) pFontDict = pResFontDict->GetDict(sAlias); if (bWidget) { if (!pFontDict) { if (pAcroFormDict) { if (CPDF_Dictionary* pDRDict = pAcroFormDict->GetDict("DR")) if (CPDF_Dictionary* pDRFontDict = pDRDict->GetDict("Font")) pFontDict = pDRFontDict->GetDict(sAlias); } } } } return pFontDict ? m_pDocument->LoadFont(pFontDict) : nullptr; }
int CPDF_FormField::CountSelectedItems() const { CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); if (!pValue) { pValue = FPDF_GetFieldAttr(m_pDict, "I"); if (!pValue) return 0; } if (pValue->IsString() || pValue->IsNumber()) return pValue->GetString().IsEmpty() ? 0 : 1; if (CPDF_Array* pArray = pValue->AsArray()) return pArray->GetCount(); return 0; }
FX_BOOL CPDF_FormField::IsItemSelected(int index) { ASSERT(GetType() == ComboBox || GetType() == ListBox); if (index < 0 || index >= CountOptions()) { return FALSE; } if (IsOptionSelected(index)) { return TRUE; } CFX_WideString opt_value = GetOptionValue(index); CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); if (pValue == NULL) { pValue = FPDF_GetFieldAttr(m_pDict, "I"); if (pValue == NULL) { return FALSE; } } if (pValue->GetType() == PDFOBJ_STRING) { if (pValue->GetUnicodeText() == opt_value) { return TRUE; } return FALSE; } if (pValue->GetType() == PDFOBJ_NUMBER) { if (pValue->GetString().IsEmpty()) { return FALSE; } if (pValue->GetInteger() == index) { return TRUE; } return FALSE; } if (pValue->GetType() != PDFOBJ_ARRAY) { return FALSE; } CPDF_Array* pArray = (CPDF_Array*)pValue; int iPos = -1; for (int j = 0; j < CountSelectedOptions(); j ++) { if (GetSelectedOptionIndex(j) == index) { iPos = j; break; } } for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) if (pArray->GetElementValue(i)->GetUnicodeText() == opt_value && (int)i == iPos) { return TRUE; } return FALSE; }
CFX_ByteString CPDF_FormField::GetDefaultStyle() const { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS"); if (!pObj) { return ""; } return pObj->GetString(); }
uint32_t CPDF_FormField::GetFieldFlags() const { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "Ff"); if (!pObj) { return 0; } return pObj->GetInteger(); }
CFX_WideString CPDF_FormField::GetMappingName() const { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TM"); if (!pObj) { return L""; } return pObj->GetUnicodeText(); }
CFX_WideString CPDF_FormField::GetAlternateName() { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TU"); if (!pObj) { return L""; } return pObj->GetUnicodeText(); }
void CPDF_FormField::LoadDA() { CPDF_Dictionary* pFormDict = m_pForm->m_pFormDict; if (!pFormDict) return; CFX_ByteString DA; if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DA")) DA = pObj->GetString(); if (DA.IsEmpty()) DA = pFormDict->GetStringBy("DA"); if (DA.IsEmpty()) return; CPDF_Dictionary* pDR = pFormDict->GetDictBy("DR"); if (!pDR) return; CPDF_Dictionary* pFont = pDR->GetDictBy("Font"); if (!pFont) return; CPDF_SimpleParser syntax(DA.AsStringC()); syntax.FindTagParamFromStart("Tf", 2); CFX_ByteString font_name(syntax.GetWord()); CPDF_Dictionary* pFontDict = pFont->GetDictBy(font_name); if (!pFontDict) return; m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict); m_FontSize = FX_atof(syntax.GetWord()); }
void CPDF_FormField::LoadDA() { CFX_ByteString DA; if (CPDF_Object* pObj_t = FPDF_GetFieldAttr(m_pDict, "DA")) { DA = pObj_t->GetString(); } if (DA.IsEmpty() && m_pForm->m_pFormDict) { DA = m_pForm->m_pFormDict->GetStringBy("DA"); } if (DA.IsEmpty()) { return; } CPDF_SimpleParser syntax(DA); syntax.FindTagParam("Tf", 2); CFX_ByteString font_name = syntax.GetWord(); CPDF_Dictionary* pFontDict = NULL; if (m_pForm->m_pFormDict && m_pForm->m_pFormDict->GetDictBy("DR") && m_pForm->m_pFormDict->GetDictBy("DR")->GetDictBy("Font")) pFontDict = m_pForm->m_pFormDict->GetDictBy("DR") ->GetDictBy("Font") ->GetDictBy(font_name); if (!pFontDict) { return; } m_pFont = m_pForm->m_pDocument->LoadFont(pFontDict); m_FontSize = FX_atof(syntax.GetWord()); }
int CPDF_FormField::GetTopVisibleIndex() { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); if (!pObj) { return 0; } return pObj->GetInteger(); }
FX_DWORD CPDF_FormField::GetFieldFlags() { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "Ff"); if (!pObj) { return 0; } return pObj->GetInteger(); }
CFX_WideString CPDF_FormField::GetRichTextString() const { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "RV"); if (!pObj) { return L""; } return pObj->GetUnicodeText(); }
int CPDF_FormField::CountOptions() { CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt"); if (pValue == NULL || pValue->GetType() != PDFOBJ_ARRAY) { return 0; } return ((CPDF_Array*)pValue)->GetCount(); }
int CPDF_FormField::InsertOption(CFX_WideString csOptLabel, int index, bool bNotify) { if (csOptLabel.IsEmpty()) return -1; if (bNotify && !NotifyListOrComboBoxBeforeChange(csOptLabel)) return -1; CFX_ByteString csStr = PDF_EncodeText(csOptLabel.c_str(), csOptLabel.GetLength()); CPDF_Array* pOpt = ToArray(FPDF_GetFieldAttr(m_pDict, "Opt")); if (!pOpt) pOpt = m_pDict->SetNewFor<CPDF_Array>("Opt"); int iCount = pdfium::base::checked_cast<int>(pOpt->GetCount()); if (index >= iCount) { pOpt->AddNew<CPDF_String>(csStr, false); index = iCount; } else { pOpt->InsertNewAt<CPDF_String>(index, csStr, false); } if (bNotify) NotifyListOrComboBoxAfterChange(); return index; }
CPDF_AAction CPDF_FormField::GetAdditionalAction() { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "AA"); if (!pObj) { return NULL; } return pObj->GetDict(); }
int CPDF_FormField::InsertOption(CFX_WideString csOptLabel, int index, FX_BOOL bNotify) { if (csOptLabel.IsEmpty()) return -1; if (bNotify && !NotifyListOrComboBoxBeforeChange(csOptLabel)) return -1; CFX_ByteString csStr = PDF_EncodeText(csOptLabel.c_str(), csOptLabel.GetLength()); CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "Opt"); CPDF_Array* pOpt = ToArray(pValue); if (!pOpt) { pOpt = new CPDF_Array; m_pDict->SetAt("Opt", pOpt); } int iCount = (int)pOpt->GetCount(); if (index < 0 || index >= iCount) { pOpt->AddString(csStr); index = iCount; } else { CPDF_String* pString = new CPDF_String(csStr, FALSE); pOpt->InsertAt(index, pString); } if (bNotify) NotifyListOrComboBoxAfterChange(); return index; }
bool CPDF_FormField::SetItemSelection(int index, bool bSelected, bool bNotify) { ASSERT(GetType() == ComboBox || GetType() == ListBox); if (index < 0 || index >= CountOptions()) return false; CFX_WideString opt_value = GetOptionValue(index); if (bNotify && !NotifyListOrComboBoxBeforeChange(opt_value)) return false; if (bSelected) { if (GetType() == ListBox) { SelectOption(index, true); if (!(m_Flags & kFormListMultiSelect)) { m_pDict->SetNewFor<CPDF_String>("V", PDF_EncodeText(opt_value), false); } else { CPDF_Array* pArray = m_pDict->SetNewFor<CPDF_Array>("V"); for (int i = 0; i < CountOptions(); i++) { if (i == index || IsItemSelected(i)) { opt_value = GetOptionValue(i); pArray->AddNew<CPDF_String>(PDF_EncodeText(opt_value), false); } } } } else { m_pDict->SetNewFor<CPDF_String>("V", PDF_EncodeText(opt_value), false); CPDF_Array* pI = m_pDict->SetNewFor<CPDF_Array>("I"); pI->AddNew<CPDF_Number>(index); } } else { CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); if (pValue) { if (GetType() == ListBox) { SelectOption(index, false); if (pValue->IsString()) { if (pValue->GetUnicodeText() == opt_value) m_pDict->RemoveFor("V"); } else if (pValue->IsArray()) { std::unique_ptr<CPDF_Array> pArray(new CPDF_Array); for (int i = 0; i < CountOptions(); i++) { if (i != index && IsItemSelected(i)) { opt_value = GetOptionValue(i); pArray->AddNew<CPDF_String>(PDF_EncodeText(opt_value), false); } } if (pArray->GetCount() > 0) m_pDict->SetFor("V", std::move(pArray)); } } else { m_pDict->RemoveFor("V"); m_pDict->RemoveFor("I"); } } } if (bNotify) NotifyListOrComboBoxAfterChange(); return true; }
FX_BOOL CPDF_FormField::IsItemSelected(int index) const { ASSERT(GetType() == ComboBox || GetType() == ListBox); if (index < 0 || index >= CountOptions()) { return FALSE; } if (IsOptionSelected(index)) { return TRUE; } CFX_WideString opt_value = GetOptionValue(index); CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); if (!pValue) { pValue = FPDF_GetFieldAttr(m_pDict, "I"); if (!pValue) { return FALSE; } } if (pValue->IsString()) return pValue->GetUnicodeText() == opt_value; if (pValue->IsNumber()) { if (pValue->GetString().IsEmpty()) return FALSE; return (pValue->GetInteger() == index); } CPDF_Array* pArray = pValue->AsArray(); if (!pArray) return FALSE; int iPos = -1; for (int j = 0; j < CountSelectedOptions(); j++) { if (GetSelectedOptionIndex(j) == index) { iPos = j; break; } } for (int i = 0; i < static_cast<int>(pArray->GetCount()); i++) if (pArray->GetDirectObjectAt(i)->GetUnicodeText() == opt_value && i == iPos) { return TRUE; } return FALSE; }
int CPDF_FormField::GetSelectedOptionIndex(int index) const { CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); if (!pArray) return -1; int iCount = pArray->GetCount(); if (iCount < 0 || index >= iCount) return -1; return pArray->GetIntegerAt(index); }
int CPDF_FormField::GetSelectedIndex(int index) { CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict, "V"); if (pValue == NULL) { pValue = FPDF_GetFieldAttr(m_pDict, "I"); if (pValue == NULL) { return -1; } } if (pValue->GetType() == PDFOBJ_NUMBER) { return pValue->GetInteger(); } CFX_WideString sel_value; if (pValue->GetType() == PDFOBJ_STRING) { if (index != 0) { return -1; } sel_value = pValue->GetUnicodeText(); } else { if (pValue->GetType() != PDFOBJ_ARRAY) { return -1; } if (index < 0) { return -1; } CPDF_Object* elementValue = ((CPDF_Array*)pValue)->GetElementValue(index); sel_value = elementValue ? elementValue->GetUnicodeText() : CFX_WideString(); } if (index < CountSelectedOptions()) { int iOptIndex = GetSelectedOptionIndex(index); CFX_WideString csOpt = GetOptionValue(iOptIndex); if (csOpt == sel_value) { return iOptIndex; } } int nOpts = CountOptions(); for (int i = 0; i < nOpts; i++) { if (sel_value == GetOptionValue(i)) { return i; } } return -1; }
FX_BOOL CPDF_FormControl::IsDefaultChecked() { ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton); CPDF_Object* pDV = FPDF_GetFieldAttr(m_pField->m_pDict, "DV"); if (pDV == NULL) { return FALSE; } CFX_ByteString csDV = pDV->GetString(); CFX_ByteString csOn = GetOnStateName(); return (csDV == csOn); }
int CPDF_FormControl::GetControlAlignment() { if (!m_pWidgetDict) return 0; if (m_pWidgetDict->KeyExist("Q")) return m_pWidgetDict->GetIntegerBy("Q", 0); CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "Q"); if (pObj) return pObj->GetInteger(); return m_pField->m_pForm->GetFormAlignment(); }
bool CPDF_FormField::IsOptionSelected(int iOptIndex) const { CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); if (!pArray) return false; for (const auto& pObj : *pArray) { if (pObj->GetInteger() == iOptIndex) return true; } return false; }
FX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex) const { CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); if (!pArray) return FALSE; for (CPDF_Object* pObj : *pArray) { if (pObj->GetInteger() == iOptIndex) return TRUE; } return FALSE; }