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(); }
bool CPDF_DIBSource::LoadColorInfo(const CPDF_Dictionary* pFormResources, const CPDF_Dictionary* pPageResources) { m_bpc_orig = m_pDict->GetIntegerFor("BitsPerComponent"); if (m_pDict->GetIntegerFor("ImageMask")) m_bImageMask = true; if (m_bImageMask || !m_pDict->KeyExist("ColorSpace")) { if (!m_bImageMask) { CPDF_Object* pFilter = m_pDict->GetDirectObjectFor("Filter"); if (pFilter) { CFX_ByteString filter; if (pFilter->IsName()) { filter = pFilter->GetString(); } else if (CPDF_Array* pArray = pFilter->AsArray()) { filter = pArray->GetStringAt(pArray->GetCount() - 1); } if (filter == "JPXDecode") { m_bDoBpcCheck = false; return true; } } } m_bImageMask = true; m_bpc = m_nComponents = 1; CPDF_Array* pDecode = m_pDict->GetArrayFor("Decode"); m_bDefaultDecode = !pDecode || !pDecode->GetIntegerAt(0); return true; } CPDF_Object* pCSObj = m_pDict->GetDirectObjectFor("ColorSpace"); if (!pCSObj) return false; CPDF_DocPageData* pDocPageData = m_pDocument->GetPageData(); if (pFormResources) m_pColorSpace = pDocPageData->GetColorSpace(pCSObj, pFormResources); if (!m_pColorSpace) m_pColorSpace = pDocPageData->GetColorSpace(pCSObj, pPageResources); if (!m_pColorSpace) return false; m_Family = m_pColorSpace->GetFamily(); m_nComponents = m_pColorSpace->CountComponents(); if (m_Family == PDFCS_ICCBASED && pCSObj->IsName()) { CFX_ByteString cs = pCSObj->GetString(); if (cs == "DeviceGray") { m_nComponents = 1; } else if (cs == "DeviceRGB") { m_nComponents = 3; } else if (cs == "DeviceCMYK") { m_nComponents = 4; } } ValidateDictParam(); m_pCompData = GetDecodeAndMaskArray(m_bDefaultDecode, m_bColorKey); return !!m_pCompData; }
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; }
DLLEXPORT int STDCALL FPDFDoc_GetPageMode(FPDF_DOCUMENT document) { CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); if (!pDoc) return PAGEMODE_UNKNOWN; CPDF_Dictionary* pRoot = pDoc->GetRoot(); if (!pRoot) return PAGEMODE_UNKNOWN; CPDF_Object* pName = pRoot->GetObjectFor("PageMode"); if (!pName) return PAGEMODE_USENONE; CFX_ByteString strPageMode = pName->GetString(); if (strPageMode.IsEmpty() || strPageMode.EqualNoCase("UseNone")) return PAGEMODE_USENONE; if (strPageMode.EqualNoCase("UseOutlines")) return PAGEMODE_USEOUTLINES; if (strPageMode.EqualNoCase("UseThumbs")) return PAGEMODE_USETHUMBS; if (strPageMode.EqualNoCase("FullScreen")) return PAGEMODE_FULLSCREEN; if (strPageMode.EqualNoCase("UseOC")) return PAGEMODE_USEOC; if (strPageMode.EqualNoCase("UseAttachments")) return PAGEMODE_USEATTACHMENTS; return PAGEMODE_UNKNOWN; }
CFX_ByteString CPDF_Object::GetString() const { switch (m_Type) { case PDFOBJ_BOOLEAN: return ((CPDF_Boolean*)this)->m_bValue ? "true" : "false"; case PDFOBJ_NUMBER: return ((CPDF_Number*)this)->GetString(); case PDFOBJ_STRING: return ((CPDF_String*)this)->m_String; case PDFOBJ_NAME: return ((CPDF_Name*)this)->m_Name; case PDFOBJ_REFERENCE: { CPDF_Reference* pRef = (CPDF_Reference*)(FX_LPVOID)this; if (pRef->m_pObjList == NULL) { break; } CPDF_Object* pObj = pRef->m_pObjList->GetIndirectObject(pRef->m_RefObjNum); if (pObj == NULL) { return CFX_ByteString(); } return pObj->GetString(); } } return CFX_ByteString(); }
CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag( CPDF_Dictionary* pDict, CFX_ByteString nSrctag) { if (!pDict || nSrctag.IsEmpty()) return nullptr; if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type")) return nullptr; CPDF_Object* pType = pDict->GetElement("Type")->GetDirect(); if (!ToName(pType)) return nullptr; if (pType->GetString().Compare("Page")) return nullptr; CPDF_Dictionary* pp = ToDictionary(pDict->GetElement("Parent")->GetDirect()); if (!pp) return nullptr; if (pDict->KeyExist((const char*)nSrctag)) return pDict->GetElement((const char*)nSrctag); while (pp) { if (pp->KeyExist((const char*)nSrctag)) { return pp->GetElement((const char*)nSrctag); } if (!pp->KeyExist("Parent")) { break; } pp = ToDictionary(pp->GetElement("Parent")->GetDirect()); } return nullptr; }
CFX_ByteString CPDF_FormField::GetDefaultStyle() const { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "DS"); if (!pObj) { return ""; } return pObj->GetString(); }
CPDF_Object* CPDF_PageOrganizer::PageDictGetInheritableTag( CPDF_Dictionary* pDict, const CFX_ByteString& bsSrcTag) { if (!pDict || bsSrcTag.IsEmpty()) return nullptr; if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type")) return nullptr; CPDF_Object* pType = pDict->GetObjectFor("Type")->GetDirect(); if (!ToName(pType)) return nullptr; if (pType->GetString().Compare("Page")) return nullptr; CPDF_Dictionary* pp = ToDictionary(pDict->GetObjectFor("Parent")->GetDirect()); if (!pp) return nullptr; if (pDict->KeyExist(bsSrcTag)) return pDict->GetObjectFor(bsSrcTag); while (pp) { if (pp->KeyExist(bsSrcTag)) return pp->GetObjectFor(bsSrcTag); if (!pp->KeyExist("Parent")) break; pp = ToDictionary(pp->GetObjectFor("Parent")->GetDirect()); } return nullptr; }
DLLEXPORT int FPDFDoc_GetPageMode(FPDF_DOCUMENT document) { if (!document) return PAGEMODE_UNKNOWN; CPDF_Dictionary *pRoot = ((CPDF_Document*)document)->GetRoot(); if (!pRoot) return PAGEMODE_UNKNOWN; CPDF_Object* pName = pRoot->GetElement("PageMode"); if (!pName) return PAGEMODE_USENONE; CFX_ByteString strPageMode = pName->GetString(); if (strPageMode.IsEmpty()||strPageMode.EqualNoCase(FX_BSTR("UseNone"))) return PAGEMODE_USENONE; else if (strPageMode.EqualNoCase(FX_BSTR("UseOutlines"))) return PAGEMODE_USEOUTLINES; else if (strPageMode.EqualNoCase(FX_BSTR("UseThumbs"))) return PAGEMODE_USETHUMBS; else if (strPageMode.EqualNoCase(FX_BSTR("FullScreen"))) return PAGEMODE_FULLSCREEN; else if (strPageMode.EqualNoCase(FX_BSTR("UseOC"))) return PAGEMODE_USEOC; else if (strPageMode.EqualNoCase(FX_BSTR("UseAttachments"))) return PAGEMODE_USEATTACHMENTS; return PAGEMODE_UNKNOWN; }
CFX_ByteString CPDF_Dictionary::GetString(const CFX_ByteStringC& key) const { CPDF_Object* p = GetElement(key); if (p) { return p->GetString(); } return CFX_ByteString(); }
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; }
CFX_ByteString CPDF_Array::GetString(FX_DWORD i) const { if (this && i < (FX_DWORD)m_Objects.GetSize()) { CPDF_Object* p = (CPDF_Object*)m_Objects.GetAt(i); return p->GetString(); } return CFX_ByteString(); }
CFX_ByteString CPDF_StructElementImpl::GetName(FX_BSTR owner, FX_BSTR name, FX_BSTR default_value, FX_BOOL bInheritable, int subindex) { CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex); if (pAttr == NULL || pAttr->GetType() != PDFOBJ_NAME) { return default_value; } return pAttr->GetString(); }
void PDF_ReplaceAbbr(CPDF_Object* pObj) { switch (pObj->GetType()) { case PDFOBJ_DICTIONARY: { CPDF_Dictionary* pDict = pObj->AsDictionary(); for (const auto& it : *pDict) { CFX_ByteString key = it.first; CPDF_Object* value = it.second; CFX_ByteStringC fullname = PDF_FindFullName( PDF_InlineKeyAbbr, FX_ArraySize(PDF_InlineKeyAbbr), key); if (!fullname.IsEmpty()) { pDict->ReplaceKey(key, fullname); key = fullname; } if (value->IsName()) { CFX_ByteString name = value->GetString(); fullname = PDF_FindFullName(PDF_InlineValueAbbr, FX_ArraySize(PDF_InlineValueAbbr), name); if (!fullname.IsEmpty()) { pDict->SetAtName(key, fullname); } } else { PDF_ReplaceAbbr(value); } } break; } case PDFOBJ_ARRAY: { CPDF_Array* pArray = pObj->AsArray(); for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { CPDF_Object* pElement = pArray->GetElement(i); if (pElement->IsName()) { CFX_ByteString name = pElement->GetString(); CFX_ByteStringC fullname = PDF_FindFullName( PDF_InlineValueAbbr, FX_ArraySize(PDF_InlineValueAbbr), name); if (!fullname.IsEmpty()) { pArray->SetAt(i, new CPDF_Name(fullname)); } } else { PDF_ReplaceAbbr(pElement); } } break; } } }
CFX_ByteString CPDF_Dictionary::GetString(FX_BSTR key, FX_BSTR def) const { CPDF_Object* p = NULL; m_Map.Lookup(key, (void*&)p); if (p) { return p->GetString(); } return CFX_ByteString(def); }
bool CPDF_FormControl::IsDefaultChecked() const { ASSERT(GetType() == CPDF_FormField::CheckBox || GetType() == CPDF_FormField::RadioButton); CPDF_Object* pDV = FPDF_GetFieldAttr(m_pField->m_pDict, "DV"); if (!pDV) return false; CFX_ByteString csDV = pDV->GetString(); CFX_ByteString csOn = GetOnStateName(); return (csDV == csOn); }
CFX_ByteString CPDF_StructElementImpl::GetName( const CFX_ByteStringC& owner, const CFX_ByteStringC& name, const CFX_ByteStringC& default_value, FX_BOOL bInheritable, int subindex) { CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex); if (ToName(pAttr)) return pAttr->GetString(); return CFX_ByteString(default_value); }
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); }
CPDF_DefaultAppearance CPDF_FormControl::GetDefaultAppearance() { if (!m_pWidgetDict) return CPDF_DefaultAppearance(); if (m_pWidgetDict->KeyExist("DA")) return CPDF_DefaultAppearance(m_pWidgetDict->GetStringBy("DA")); CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "DA"); if (pObj) return CPDF_DefaultAppearance(pObj->GetString()); return m_pField->m_pForm->GetDefaultAppearance(); }
CPDF_DefaultAppearance CPDF_FormControl::GetDefaultAppearance() { if (!m_pWidgetDict) { return CFX_ByteString(); } if (m_pWidgetDict->KeyExist("DA")) { return m_pWidgetDict->GetString("DA"); } CPDF_Object* pObj = FPDF_GetFieldAttr(m_pField->m_pDict, "DA"); if (!pObj) { return m_pField->m_pForm->GetDefaultAppearance(); } return pObj->GetString(); }
CPDF_Object* CPDF_StructElementImpl::GetAttr(FX_BSTR owner, FX_BSTR name, FX_BOOL bInheritable, FX_FLOAT fLevel) { if (fLevel > nMaxRecursion) { return NULL; } if (bInheritable) { CPDF_Object* pAttr = GetAttr(owner, name, FALSE); if (pAttr) { return pAttr; } if (m_pParent == NULL) { return NULL; } return m_pParent->GetAttr(owner, name, TRUE, fLevel + 1); } CPDF_Object* pA = m_pDict->GetElementValue(FX_BSTRC("A")); if (pA) { CPDF_Dictionary* pAttrDict = FindAttrDict(pA, owner); if (pAttrDict) { CPDF_Object* pAttr = pAttrDict->GetElementValue(name); if (pAttr) { return pAttr; } } } CPDF_Object* pC = m_pDict->GetElementValue(FX_BSTRC("C")); if (pC == NULL) { return NULL; } CPDF_Dictionary* pClassMap = m_pTree->m_pTreeRoot->GetDict(FX_BSTRC("ClassMap")); if (pClassMap == NULL) { return NULL; } if (pC->GetType() == PDFOBJ_ARRAY) { CPDF_Array* pArray = (CPDF_Array*)pC; for (FX_DWORD i = 0; i < pArray->GetCount(); i ++) { CFX_ByteString class_name = pArray->GetString(i); CPDF_Dictionary* pClassDict = pClassMap->GetDict(class_name); if (pClassDict && pClassDict->GetString(FX_BSTRC("O")) == owner) { return pClassDict->GetElementValue(name); } } return NULL; } CFX_ByteString class_name = pC->GetString(); CPDF_Dictionary* pClassDict = pClassMap->GetDict(class_name); if (pClassDict && pClassDict->GetString(FX_BSTRC("O")) == owner) { return pClassDict->GetElementValue(name); } return NULL; }
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; }
CPDF_Object* CPDF_StructElementImpl::GetAttr(const CFX_ByteStringC& owner, const CFX_ByteStringC& name, FX_BOOL bInheritable, FX_FLOAT fLevel) { if (fLevel > nMaxRecursion) { return nullptr; } if (bInheritable) { CPDF_Object* pAttr = GetAttr(owner, name, FALSE); if (pAttr) { return pAttr; } if (!m_pParent) { return nullptr; } return m_pParent->GetAttr(owner, name, TRUE, fLevel + 1); } CPDF_Object* pA = m_pDict->GetDirectObjectBy("A"); if (pA) { CPDF_Dictionary* pAttrDict = FindAttrDict(pA, owner); if (pAttrDict) { CPDF_Object* pAttr = pAttrDict->GetDirectObjectBy(CFX_ByteString(name)); if (pAttr) { return pAttr; } } } CPDF_Object* pC = m_pDict->GetDirectObjectBy("C"); if (!pC) return nullptr; CPDF_Dictionary* pClassMap = m_pTree->m_pTreeRoot->GetDictBy("ClassMap"); if (!pClassMap) return nullptr; if (CPDF_Array* pArray = pC->AsArray()) { for (uint32_t i = 0; i < pArray->GetCount(); i++) { CFX_ByteString class_name = pArray->GetStringAt(i); CPDF_Dictionary* pClassDict = pClassMap->GetDictBy(class_name); if (pClassDict && pClassDict->GetStringBy("O") == owner) return pClassDict->GetDirectObjectBy(CFX_ByteString(name)); } return nullptr; } CFX_ByteString class_name = pC->GetString(); CPDF_Dictionary* pClassDict = pClassMap->GetDictBy(class_name); if (pClassDict && pClassDict->GetStringBy("O") == owner) return pClassDict->GetDirectObjectBy(CFX_ByteString(name)); return nullptr; }
CPDF_Dest CPDF_Link::GetDest(CPDF_Document* pDoc) { CPDF_Object* pDest = m_pDict->GetElementValue("Dest"); if (!pDest) return CPDF_Dest(); if (pDest->IsString() || pDest->IsName()) { CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests")); CFX_ByteStringC name = pDest->GetString(); return CPDF_Dest(name_tree.LookupNamedDest(pDoc, name)); } if (CPDF_Array* pArray = pDest->AsArray()) return CPDF_Dest(pArray); return CPDF_Dest(); }
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; }
CPDF_Dest CPDF_Link::GetDest(CPDF_Document* pDoc) { CPDF_Object* pDest = m_pDict->GetElementValue("Dest"); if (pDest == NULL) { return NULL; } if (pDest->GetType() == PDFOBJ_STRING || pDest->GetType() == PDFOBJ_NAME) { CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests")); CFX_ByteStringC name = pDest->GetString(); return name_tree.LookupNamedDest(pDoc, name); } else if (pDest->GetType() == PDFOBJ_ARRAY) { return (CPDF_Array*)pDest; } return NULL; }
int CPDF_Dest::GetZoomMode() { CPDF_Array* pArray = ToArray(m_pObj); if (!pArray) return 0; CFX_ByteString mode; CPDF_Object* pObj = pArray->GetElementValue(1); mode = pObj ? pObj->GetString() : CFX_ByteString(); int i = 0; while (g_sZoomModes[i][0] != '\0') { if (mode == g_sZoomModes[i]) { return i + 1; } i++; } return 0; }
void CPDF_StreamContentParser::Handle_ShowText_Positioning() { CPDF_Array* pArray = GetObject(0) ? GetObject(0)->GetArray() : NULL; if (!pArray) { return; } int n = pArray->GetCount(); int nsegs = 0; for (int i = 0; i < n; i++) { if (pArray->GetElementValue(i)->IsString()) nsegs++; } if (nsegs == 0) { for (int i = 0; i < n; i++) { m_pCurStates->m_TextX -= FXSYS_Mul(pArray->GetNumber(i), m_pCurStates->m_TextState.GetFontSize()) / 1000; } return; } CFX_ByteString* pStrs = new CFX_ByteString[nsegs]; FX_FLOAT* pKerning = FX_Alloc(FX_FLOAT, nsegs); int iSegment = 0; FX_FLOAT fInitKerning = 0; for (int i = 0; i < n; i++) { CPDF_Object* pObj = pArray->GetElementValue(i); if (pObj->IsString()) { CFX_ByteString str = pObj->GetString(); if (str.IsEmpty()) { continue; } pStrs[iSegment] = str; pKerning[iSegment++] = 0; } else { FX_FLOAT num = pObj ? pObj->GetNumber() : 0; if (iSegment == 0) { fInitKerning += num; } else { pKerning[iSegment - 1] += num; } } } AddTextObject(pStrs, fInitKerning, pKerning, iSegment); delete[] pStrs; FX_Free(pKerning); }
int CPDF_Dest::GetZoomMode() { CPDF_Array* pArray = ToArray(m_pObj); if (!pArray) return 0; CPDF_Object* pObj = pArray->GetDirectObjectAt(1); if (!pObj) return 0; CFX_ByteString mode = pObj->GetString(); for (int i = 0; g_sZoomModes[i]; ++i) { if (mode == g_sZoomModes[i]) return i + 1; } return 0; }
int CPDF_Dest::GetZoomMode() { if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) { return 0; } CFX_ByteString mode; CPDF_Object* pObj = ((CPDF_Array*)m_pObj)->GetElementValue(1); mode = pObj ? pObj->GetString() : CFX_ByteString(); int i = 0; while (g_sZoomModes[i][0] != '\0') { if (mode == g_sZoomModes[i]) { return i + 1; } i ++; } return 0; }