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; }
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; }
FX_BOOL CPDF_OCContext::LoadOCGState(const CPDF_Dictionary *pOCGDict) const { if (!FPDFDOC_OCG_HasIntent(pOCGDict, FX_BSTRC("View"), FX_BSTRC("View"))) { return TRUE; } CFX_ByteString csState = FPDFDOC_OCG_GetUsageTypeString(m_eUsageType); CPDF_Dictionary *pUsage = pOCGDict->GetDict(FX_BSTRC("Usage")); if (pUsage) { CPDF_Dictionary *pState = pUsage->GetDict(csState); if (pState) { CFX_ByteString csFind = csState + FX_BSTRC("State"); if (pState->KeyExist(csFind)) { return pState->GetString(csFind) != FX_BSTRC("OFF"); } } if (csState != FX_BSTRC("View")) { pState = pUsage->GetDict(FX_BSTRC("View")); if (pState && pState->KeyExist(FX_BSTRC("ViewState"))) { return pState->GetString(FX_BSTRC("ViewState")) != FX_BSTRC("OFF"); } } } FX_BOOL bDefValid = FALSE; return LoadOCGStateFromConfig(csState, pOCGDict, bDefValid); }
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); } }
DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page) { CPDF_Page* pPage = CPDFPageFromFPDFPage(page); if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect() || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare( "Page")) { return -1; } CPDF_Dictionary* pDict = pPage->m_pFormDict; if (!pDict) return -1; while (pDict) { if (pDict->KeyExist("Rotate")) { CPDF_Object* pRotateObj = pDict->GetElement("Rotate")->GetDirect(); return pRotateObj ? pRotateObj->GetInteger() / 90 : 0; } if (!pDict->KeyExist("Parent")) break; pDict = ToDictionary(pDict->GetElement("Parent")->GetDirect()); } return 0; }
FX_BOOL CPDF_FileSpec::GetFileName(CFX_WideString &csFileName) const { if (m_pObj == NULL) { return FALSE; } if (m_pObj->GetType() == PDFOBJ_DICTIONARY) { CPDF_Dictionary* pDict = (CPDF_Dictionary*)m_pObj; csFileName = pDict->GetUnicodeText(FX_BSTRC("UF")); if (csFileName.IsEmpty()) { csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("F"))); } if (pDict->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL")) { return TRUE; } if (csFileName.IsEmpty()) { if (pDict->KeyExist(FX_BSTRC("DOS"))) { csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("DOS"))); } else if (pDict->KeyExist(FX_BSTRC("Mac"))) { csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("Mac"))); } else if (pDict->KeyExist(FX_BSTRC("Unix"))) { csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("Unix"))); } else { return FALSE; } } } else { csFileName = CFX_WideString::FromLocal(m_pObj->GetString()); } csFileName = FILESPEC_DecodeFileName(csFileName); return TRUE; }
void CPDF_InterForm::LoadField(CPDF_Dictionary* pFieldDict, int nLevel) { if (nLevel > nMaxRecursion) return; if (!pFieldDict) return; uint32_t dwParentObjNum = pFieldDict->GetObjNum(); CPDF_Array* pKids = pFieldDict->GetArrayFor("Kids"); if (!pKids) { AddTerminalField(pFieldDict); return; } CPDF_Dictionary* pFirstKid = pKids->GetDictAt(0); if (!pFirstKid) return; if (pFirstKid->KeyExist("T") || pFirstKid->KeyExist("Kids")) { for (size_t i = 0; i < pKids->GetCount(); i++) { CPDF_Dictionary* pChildDict = pKids->GetDictAt(i); if (pChildDict) { if (pChildDict->GetObjNum() != dwParentObjNum) LoadField(pChildDict, nLevel + 1); } } } else { AddTerminalField(pFieldDict); } }
void CheckUnSupportError(CPDF_Document* pDoc, FX_DWORD err_code) { // Security if (err_code == FPDF_ERR_SECURITY) { FPDF_UnSupportError(FPDF_UNSP_DOC_SECURITY); return; } if (!pDoc) return; // Portfolios and Packages CPDF_Dictionary* pRootDict = pDoc->GetRoot(); if (pRootDict) { CFX_ByteString cbString; if (pRootDict->KeyExist("Collection")) { FPDF_UnSupportError(FPDF_UNSP_DOC_PORTABLECOLLECTION); return; } if (pRootDict->KeyExist("Names")) { CPDF_Dictionary* pNameDict = pRootDict->GetDict("Names"); if (pNameDict && pNameDict->KeyExist("EmbeddedFiles")) { FPDF_UnSupportError(FPDF_UNSP_DOC_ATTACHMENT); return; } if (pNameDict && pNameDict->KeyExist("JavaScript")) { CPDF_Dictionary* pJSDict = pNameDict->GetDict("JavaScript"); CPDF_Array* pArray = pJSDict ? pJSDict->GetArray("Names") : NULL; if (pArray) { int nCount = pArray->GetCount(); for (int i = 0; i < nCount; i++) { CFX_ByteString cbStr = pArray->GetString(i); if (cbStr.Compare("com.adobe.acrobat.SharedReview.Register") == 0) { FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDREVIEW); return; } } } } } } // SharedForm CPDF_Metadata metaData(pDoc); const CXML_Element* pElement = metaData.GetRoot(); if (pElement) CheckSharedForm(pElement, "workflowType"); // XFA Forms CPDF_InterForm* pInterForm = new CPDF_InterForm(pDoc, FALSE); if (pInterForm->HasXFAForm()) { FPDF_UnSupportError(FPDF_UNSP_DOC_XFAFORM); } delete pInterForm; }
void CheckUnSupportError(CPDF_Document* pDoc, uint32_t err_code) { // Security if (err_code == FPDF_ERR_SECURITY) { FPDF_UnSupportError(FPDF_UNSP_DOC_SECURITY); return; } if (!pDoc) return; // Portfolios and Packages CPDF_Dictionary* pRootDict = pDoc->GetRoot(); if (pRootDict) { CFX_ByteString cbString; if (pRootDict->KeyExist("Collection")) { FPDF_UnSupportError(FPDF_UNSP_DOC_PORTABLECOLLECTION); return; } if (pRootDict->KeyExist("Names")) { CPDF_Dictionary* pNameDict = pRootDict->GetDictFor("Names"); if (pNameDict && pNameDict->KeyExist("EmbeddedFiles")) { FPDF_UnSupportError(FPDF_UNSP_DOC_ATTACHMENT); return; } if (pNameDict && pNameDict->KeyExist("JavaScript")) { CPDF_Dictionary* pJSDict = pNameDict->GetDictFor("JavaScript"); CPDF_Array* pArray = pJSDict ? pJSDict->GetArrayFor("Names") : nullptr; if (pArray) { for (size_t i = 0; i < pArray->GetCount(); i++) { CFX_ByteString cbStr = pArray->GetStringAt(i); if (cbStr.Compare("com.adobe.acrobat.SharedReview.Register") == 0) { FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDREVIEW); return; } } } } } } // SharedForm CPDF_Metadata metaData(pDoc); const CXML_Element* pElement = metaData.GetRoot(); if (pElement) CheckSharedForm(pElement, "workflowType"); #ifndef PDF_ENABLE_XFA // XFA Forms CPDF_InterForm interform(pDoc); if (interform.HasXFAForm()) FPDF_UnSupportError(FPDF_UNSP_DOC_XFAFORM); #endif // PDF_ENABLE_XFA }
CFX_WideString FPDF_FileSpec_GetWin32Path(const CPDF_Object* pFileSpec) { CFX_WideString wsFileName; if (pFileSpec->GetType() == PDFOBJ_DICTIONARY) { CPDF_Dictionary* pDict = (CPDF_Dictionary*)pFileSpec; wsFileName = pDict->GetUnicodeText(FX_BSTRC("UF")); if (wsFileName.IsEmpty()) { wsFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("F"))); } if (pDict->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL")) { return wsFileName; } if (wsFileName.IsEmpty() && pDict->KeyExist(FX_BSTRC("DOS"))) { wsFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("DOS"))); } } else { wsFileName = CFX_WideString::FromLocal(pFileSpec->GetString()); } if (wsFileName[0] != '/') { return ChangeSlash(wsFileName); } if (wsFileName[2] == '/') { CFX_WideString result; result += wsFileName[1]; result += ':'; result += ChangeSlash(((FX_LPCWSTR)wsFileName) + 2); return result; } else { CFX_WideString result; result += '\\'; result += ChangeSlash(wsFileName); return result; } }
CPDF_Dictionary* CPDF_Document::FindPDFPage(CPDF_Dictionary* pPages, int iPage, int nPagesToGo, int level) { CPDF_Array* pKidList = pPages->GetArrayFor("Kids"); if (!pKidList) return nPagesToGo == 0 ? pPages : nullptr; if (level >= FX_MAX_PAGE_LEVEL) return nullptr; for (size_t i = 0; i < pKidList->GetCount(); i++) { CPDF_Dictionary* pKid = pKidList->GetDictAt(i); if (!pKid) { nPagesToGo--; continue; } if (pKid == pPages) continue; if (!pKid->KeyExist("Kids")) { if (nPagesToGo == 0) return pKid; m_PageList.SetAt(iPage - nPagesToGo, pKid->GetObjNum()); nPagesToGo--; } else { int nPages = pKid->GetIntegerFor("Count"); if (nPagesToGo < nPages) return FindPDFPage(pKid, iPage, nPagesToGo, level + 1); nPagesToGo -= nPages; } } return nullptr; }
CFX_ByteString CPDF_PageContentGenerate::RealizeResource( CPDF_Object* pResourceObj, const FX_CHAR* szType) { if (m_pPage->m_pResources == NULL) { m_pPage->m_pResources = new CPDF_Dictionary; int objnum = m_pDocument->AddIndirectObject(m_pPage->m_pResources); m_pPage->m_pFormDict->SetAtReference("Resources", m_pDocument, objnum); } CPDF_Dictionary* pResList = m_pPage->m_pResources->GetDict(szType); if (pResList == NULL) { pResList = new CPDF_Dictionary; m_pPage->m_pResources->SetAt(szType, pResList); } m_pDocument->AddIndirectObject(pResourceObj); CFX_ByteString name; int idnum = 1; while (1) { name.Format("FX%c%d", szType[0], idnum); if (!pResList->KeyExist(name)) { break; } idnum++; } pResList->AddReference(name, m_pDocument, pResourceObj->GetObjNum()); return name; }
CFX_ByteString CPDF_PageContentGenerator::RealizeResource( CPDF_Object* pResourceObj, const CFX_ByteString& bsType) { if (!m_pPage->m_pResources) { m_pPage->m_pResources = new CPDF_Dictionary(m_pDocument->GetByteStringPool()); m_pPage->m_pFormDict->SetReferenceFor( "Resources", m_pDocument, m_pDocument->AddIndirectObject(m_pPage->m_pResources)); } CPDF_Dictionary* pResList = m_pPage->m_pResources->GetDictFor(bsType); if (!pResList) { pResList = new CPDF_Dictionary(m_pDocument->GetByteStringPool()); m_pPage->m_pResources->SetFor(bsType, pResList); } CFX_ByteString name; int idnum = 1; while (1) { name.Format("FX%c%d", bsType[0], idnum); if (!pResList->KeyExist(name)) { break; } idnum++; } pResList->SetReferenceFor(name, m_pDocument, m_pDocument->AddIndirectObject(pResourceObj)); return name; }
std::unique_ptr<CPDF_Font> CPDF_Font::Create(CPDF_Document* pDoc, CPDF_Dictionary* pFontDict) { CFX_ByteString type = pFontDict->GetStringFor("Subtype"); std::unique_ptr<CPDF_Font> pFont; if (type == "TrueType") { CFX_ByteString tag = pFontDict->GetStringFor("BaseFont").Left(4); for (size_t i = 0; i < FX_ArraySize(kChineseFontNames); ++i) { if (tag == CFX_ByteString(kChineseFontNames[i], 4)) { CPDF_Dictionary* pFontDesc = pFontDict->GetDictFor("FontDescriptor"); if (!pFontDesc || !pFontDesc->KeyExist("FontFile2")) pFont.reset(new CPDF_CIDFont); break; } } if (!pFont) pFont.reset(new CPDF_TrueTypeFont); } else if (type == "Type3") { pFont.reset(new CPDF_Type3Font); } else if (type == "Type0") { pFont.reset(new CPDF_CIDFont); } else { pFont.reset(new CPDF_Type1Font); } pFont->m_pFontDict = pFontDict; pFont->m_pDocument = pDoc; pFont->m_BaseFont = pFontDict->GetStringFor("BaseFont"); return pFont->Load() ? std::move(pFont) : nullptr; }
static int _CountPages(CPDF_Dictionary* pPages, int level) { if (level > 128) { return 0; } int count = pPages->GetInteger("Count"); if (count > 0 && count < FPDF_PAGE_MAX_NUM) { return count; } CPDF_Array* pKidList = pPages->GetArray("Kids"); if (!pKidList) { return 0; } count = 0; for (FX_DWORD i = 0; i < pKidList->GetCount(); i++) { CPDF_Dictionary* pKid = pKidList->GetDict(i); if (!pKid) { continue; } if (!pKid->KeyExist("Kids")) { count++; } else { count += _CountPages(pKid, level + 1); } } pPages->SetAtInteger("Count", count); return count; }
FX_BOOL CPDFSDK_PageView::Annot_HasAppearance(CPDF_Annot* pAnnot) { CPDF_Dictionary* pAnnotDic = pAnnot->GetAnnotDict(); if(pAnnotDic) return pAnnotDic->KeyExist("AS"); return FALSE; }
void CheckUnSupportAnnot(CPDF_Document * pDoc, CPDF_Annot* pPDFAnnot) { CFX_ByteString cbSubType = pPDFAnnot->GetSubType(); if(cbSubType.Compare("3D") == 0) { FPDF_UnSupportError(FPDF_UNSP_ANNOT_3DANNOT); } else if(cbSubType.Compare("Screen") ==0) { CPDF_Dictionary* pAnnotDict = pPDFAnnot->m_pAnnotDict; CFX_ByteString cbString; if(pAnnotDict->KeyExist("IT")) cbString = pAnnotDict->GetString("IT"); if(cbString.Compare("Img") != 0) FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_MEDIA); } else if(cbSubType.Compare("Movie") ==0) { FPDF_UnSupportError(FPDF_UNSP_ANNOT_MOVIE); } else if(cbSubType.Compare("Sound") ==0) { FPDF_UnSupportError(FPDF_UNSP_ANNOT_SOUND); } else if(cbSubType.Compare("RichMedia") ==0) { FPDF_UnSupportError(FPDF_UNSP_ANNOT_SCREEN_RICHMEDIA); } else if(cbSubType.Compare("FileAttachment") ==0) { FPDF_UnSupportError(FPDF_UNSP_ANNOT_ATTACHMENT); } else if(cbSubType.Compare("Widget") ==0) { CPDF_Dictionary* pAnnotDict = pPDFAnnot->m_pAnnotDict; CFX_ByteString cbString; if(pAnnotDict->KeyExist("FT")) { cbString = pAnnotDict->GetString("FT"); } if(cbString.Compare("Sig") == 0) { FPDF_UnSupportError(FPDF_UNSP_ANNOT_SIG); } } }
void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, const CFX_ByteString& sAlias) { if (!pFont) return; ASSERT(m_pAnnotDict != NULL); ASSERT(m_pDocument != NULL); CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDict("AP"); if (pAPDict == NULL) { pAPDict = new CPDF_Dictionary; m_pAnnotDict->SetAt("AP", pAPDict); } //to avoid checkbox and radiobutton CPDF_Object* pObject = pAPDict->GetElement(m_sAPType); if (pObject && pObject->GetType() == PDFOBJ_DICTIONARY) return; CPDF_Stream* pStream = pAPDict->GetStream(m_sAPType); if (pStream == NULL) { pStream = new CPDF_Stream(NULL, 0, NULL); FX_INT32 objnum = m_pDocument->AddIndirectObject(pStream); pAPDict->SetAtReference(m_sAPType, m_pDocument, objnum); } CPDF_Dictionary * pStreamDict = pStream->GetDict(); if (!pStreamDict) { pStreamDict = new CPDF_Dictionary; pStream->InitStream(NULL, 0, pStreamDict); } if (pStreamDict) { CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources"); if (!pStreamResList) { pStreamResList = new CPDF_Dictionary(); pStreamDict->SetAt("Resources", pStreamResList); } if (pStreamResList) { CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDict("Font"); if (!pStreamResFontList) { pStreamResFontList = new CPDF_Dictionary; FX_INT32 objnum = m_pDocument->AddIndirectObject(pStreamResFontList); pStreamResList->SetAtReference("Font", m_pDocument, objnum); } if (!pStreamResFontList->KeyExist(sAlias)) pStreamResFontList->SetAtReference(sAlias, m_pDocument, pFont->GetFontDict()); } } }
DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page) { CPDF_Page* pPage = CPDFPageFromFPDFPage(page); if (!IsPageObject(pPage)) return -1; CPDF_Dictionary* pDict = pPage->m_pFormDict; while (pDict) { if (pDict->KeyExist("Rotate")) { CPDF_Object* pRotateObj = pDict->GetObjectBy("Rotate")->GetDirect(); return pRotateObj ? pRotateObj->GetInteger() / 90 : 0; } if (!pDict->KeyExist("Parent")) break; pDict = ToDictionary(pDict->GetObjectBy("Parent")->GetDirect()); } return 0; }
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++; } } 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; }
DLLEXPORT int STDCALL FPDFPage_GetRotation(FPDF_PAGE page) { CPDF_Page* pPage = (CPDF_Page*)page; if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect() || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare("Page")) { return -1; } CPDF_Dictionary* pDict = pPage->m_pFormDict; int rotate = 0; if(pDict != NULL) { if (pDict->KeyExist("Rotate")) rotate = pDict->GetElement("Rotate")->GetDirect()? pDict->GetElement("Rotate")->GetDirect()->GetInteger() / 90 : 0; else { if(pDict->KeyExist("Parent")) { CPDF_Dictionary* pPages = (CPDF_Dictionary*)pDict->GetElement("Parent")->GetDirect(); while(pPages) { if(pPages->KeyExist("Rotate")) { rotate = pPages->GetElement("Rotate")->GetDirect()? pPages->GetElement("Rotate")->GetDirect()->GetInteger() / 90 : 0; break; } else if(pPages->KeyExist("Parent")) pPages = (CPDF_Dictionary*)pPages->GetElement("Parent")->GetDirect(); else break; } } } } else { return -1; } return rotate; }
int CPDF_Document::RetrievePageCount() const { CPDF_Dictionary* pPages = GetPagesDict(); if (!pPages) return 0; if (!pPages->KeyExist("Kids")) return 1; std::set<CPDF_Dictionary*> visited_pages; visited_pages.insert(pPages); return CountPages(pPages, &visited_pages); }
void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont, const CFX_ByteString& sAlias) { if (!pFont) return; CPDF_Dictionary* pAPDict = m_pAnnotDict->GetDictBy("AP"); if (!pAPDict) { pAPDict = new CPDF_Dictionary; m_pAnnotDict->SetAt("AP", pAPDict); } // to avoid checkbox and radiobutton CPDF_Object* pObject = pAPDict->GetObjectBy(m_sAPType); if (ToDictionary(pObject)) return; CPDF_Stream* pStream = pAPDict->GetStreamBy(m_sAPType); if (!pStream) { pStream = new CPDF_Stream(nullptr, 0, nullptr); int32_t objnum = m_pDocument->AddIndirectObject(pStream); pAPDict->SetAtReference(m_sAPType, m_pDocument, objnum); } CPDF_Dictionary* pStreamDict = pStream->GetDict(); if (!pStreamDict) { pStreamDict = new CPDF_Dictionary; pStream->InitStream(nullptr, 0, pStreamDict); } if (pStreamDict) { CPDF_Dictionary* pStreamResList = pStreamDict->GetDictBy("Resources"); if (!pStreamResList) { pStreamResList = new CPDF_Dictionary(); pStreamDict->SetAt("Resources", pStreamResList); } if (pStreamResList) { CPDF_Dictionary* pStreamResFontList = pStreamResList->GetDictBy("Font"); if (!pStreamResFontList) { pStreamResFontList = new CPDF_Dictionary; int32_t objnum = m_pDocument->AddIndirectObject(pStreamResFontList); pStreamResList->SetAtReference("Font", m_pDocument, objnum); } if (!pStreamResFontList->KeyExist(sAlias)) pStreamResFontList->SetAtReference(sAlias, m_pDocument, pFont->GetFontDict()); } } }
int CPDF_Document::_GetPageCount() const { CPDF_Dictionary* pRoot = GetRoot(); if (!pRoot) { return 0; } CPDF_Dictionary* pPages = pRoot->GetDict("Pages"); if (!pPages) { return 0; } if (!pPages->KeyExist("Kids")) { return 1; } return _CountPages(pPages, 0); }
FX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) { ASSERT(action.GetDict()); CPDF_Dictionary* pActionDict = action.GetDict(); if (!pActionDict->KeyExist("Fields")) return m_pInterForm->ResetForm(true); CPDF_ActionFields af(&action); uint32_t dwFlags = action.GetFlags(); std::vector<CPDF_Object*> fieldObjects = af.GetAllFields(); std::vector<CPDF_FormField*> fields = GetFieldFromObjects(fieldObjects); return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), true); }
int CPDF_FormField::GetMaxLen() const { if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen")) return pObj->GetInteger(); for (int i = 0; i < m_ControlList.GetSize(); i++) { CPDF_FormControl* pControl = m_ControlList.GetAt(i); if (!pControl) continue; CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict; if (pWidgetDict->KeyExist("MaxLen")) return pWidgetDict->GetIntegerBy("MaxLen"); } return 0; }
FX_BOOL CPDFSDK_BAAnnot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode) { CPDF_Dictionary* pAP = m_pAnnot->GetAnnotDict()->GetDictBy("AP"); if (!pAP) return FALSE; // Choose the right sub-ap const FX_CHAR* ap_entry = "N"; if (mode == CPDF_Annot::Down) ap_entry = "D"; else if (mode == CPDF_Annot::Rollover) ap_entry = "R"; if (!pAP->KeyExist(ap_entry)) ap_entry = "N"; // Get the AP stream or subdirectory CPDF_Object* psub = pAP->GetElementValue(ap_entry); return !!psub; }
int CPDF_FormField::GetMaxLen() { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "MaxLen"); if (pObj == NULL) { int iCount = m_ControlList.GetSize(); for (int i = 0; i < iCount; i++) { CPDF_FormControl* pControl = (CPDF_FormControl*)m_ControlList.GetAt(i); if (pControl == NULL) { continue; } CPDF_Dictionary* pWidgetDict = pControl->m_pWidgetDict; if (pWidgetDict->KeyExist("MaxLen")) { return pWidgetDict->GetInteger("MaxLen"); } } return 0; } return pObj->GetInteger(); }
FX_BOOL CPDF_Image::LoadImageF(CPDF_Stream* pStream, FX_BOOL bInline) { m_pStream = pStream; if (m_bInline && m_pInlineDict) { m_pInlineDict->Release(); m_pInlineDict = NULL; } m_bInline = bInline; CPDF_Dictionary* pDict = pStream->GetDict(); if (m_bInline) { m_pInlineDict = ToDictionary(pDict->Clone()); } m_pOC = pDict->GetDict(FX_BSTRC("OC")); m_bIsMask = !pDict->KeyExist(FX_BSTRC("ColorSpace")) || pDict->GetInteger(FX_BSTRC("ImageMask")); m_bInterpolate = pDict->GetInteger(FX_BSTRC("Interpolate")); m_Height = pDict->GetInteger(FX_BSTRC("Height")); m_Width = pDict->GetInteger(FX_BSTRC("Width")); return TRUE; }
CPDF_Stream* FPDFDOC_GetAnnotAP(CPDF_Dictionary* pAnnotDict, CPDF_Annot::AppearanceMode mode) { CPDF_Dictionary* pAP = pAnnotDict->GetDict("AP"); if (pAP == NULL) { return NULL; } const FX_CHAR* ap_entry = "N"; if (mode == CPDF_Annot::Down) { ap_entry = "D"; } else if (mode == CPDF_Annot::Rollover) { ap_entry = "R"; } if (!pAP->KeyExist(ap_entry)) { ap_entry = "N"; } CPDF_Object* psub = pAP->GetElementValue(ap_entry); if (psub == NULL) { return NULL; } CPDF_Stream* pStream = NULL; if (psub->GetType() == PDFOBJ_STREAM) { pStream = (CPDF_Stream*)psub; } else if (psub->GetType() == PDFOBJ_DICTIONARY) { CFX_ByteString as = pAnnotDict->GetString("AS"); if (as.IsEmpty()) { CFX_ByteString value = pAnnotDict->GetString(FX_BSTRC("V")); if (value.IsEmpty()) { CPDF_Dictionary* pDict = pAnnotDict->GetDict(FX_BSTRC("Parent")); value = pDict ? pDict->GetString(FX_BSTRC("V")) : CFX_ByteString(); } if (value.IsEmpty() || !((CPDF_Dictionary*)psub)->KeyExist(value)) { as = FX_BSTRC("Off"); } else { as = value; } } pStream = ((CPDF_Dictionary*)psub)->GetStream(as); } return pStream; }