void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument, const CPDF_Action& action) { ASSERT(action); CPDF_Document* pPDFDocument = pDocument->GetPDFDocument(); ASSERT(pPDFDocument); CPDF_Dest MyDest = action.GetDest(pPDFDocument); int nPageIndex = MyDest.GetPageIndex(pPDFDocument); int nFitType = MyDest.GetZoomMode(); const CPDF_Array* pMyArray = ToArray(MyDest.GetObject()); float* pPosAry = nullptr; int sizeOfAry = 0; if (pMyArray) { pPosAry = new float[pMyArray->GetCount()]; int j = 0; for (int i = 2; i < (int)pMyArray->GetCount(); i++) { pPosAry[j++] = pMyArray->GetFloat(i); } sizeOfAry = j; } CPDFDoc_Environment* pApp = pDocument->GetEnv(); pApp->FFI_DoGoToAction(nPageIndex, nFitType, pPosAry, sizeOfAry); delete[] pPosAry; }
void CPDFSDK_ActionHandler::DoAction_GoTo(CPDFSDK_Document* pDocument, /*CReader_DocView* pDocView,*/ const CPDF_Action& action) { ASSERT(pDocument != NULL); // ASSERT(pDocView != NULL); ASSERT(action != NULL); CPDF_Document* pPDFDocument = pDocument->GetDocument(); ASSERT(pPDFDocument != NULL); CPDFDoc_Environment* pApp = pDocument->GetEnv(); ASSERT(pApp != NULL); CPDF_Dest MyDest = action.GetDest(pPDFDocument); int nPageIndex = MyDest.GetPageIndex(pPDFDocument); int nFitType = MyDest.GetZoomMode(); const CPDF_Array * pMyArray = (CPDF_Array*)MyDest.m_pObj; float* pPosAry = NULL; int sizeOfAry = 0; if (pMyArray != NULL) { pPosAry = new float[pMyArray->GetCount()]; int j = 0; for (int i = 2; i < (int)pMyArray->GetCount(); i++) { pPosAry[j++] = pMyArray->GetFloat(i); } sizeOfAry = j; } pApp->FFI_DoGoToAction(nPageIndex, nFitType, pPosAry, sizeOfAry); if(pPosAry) delete[] pPosAry; }
DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST dest) { if (document == NULL) return 0; if (dest == NULL) return 0; CPDF_Document* pDoc = (CPDF_Document*)document; CPDF_Dest Dest = (CPDF_Array*)dest; return Dest.GetPageIndex(pDoc); }
DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) { if (!document) return NULL; if (!pDict) return NULL; CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); CPDF_Document* pDoc = (CPDF_Document*)document; CPDF_Dest dest = bookmark.GetDest(pDoc); if (dest) return dest.GetObject(); // If this bookmark is not directly associated with a dest, we try to get // action CPDF_Action action = bookmark.GetAction(); if (!action) return NULL; return action.GetDest(pDoc).GetObject(); }
DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) { if (!pDict) return nullptr; CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); if (!pDoc) return nullptr; CPDF_Bookmark bookmark(ToDictionary(static_cast<CPDF_Object*>(pDict))); CPDF_Dest dest = bookmark.GetDest(pDoc); if (dest.GetObject()) return dest.GetObject(); // If this bookmark is not directly associated with a dest, we try to get // action CPDF_Action action = bookmark.GetAction(); if (!action.GetDict()) return nullptr; return action.GetDest(pDoc).GetObject(); }
FPDF_EXPORT FPDF_DEST FPDF_CALLCONV FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) { CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); if (!pDoc) return nullptr; if (!pDict) return nullptr; CPDF_Bookmark bookmark(CPDFDictionaryFromFPDFBookmark(pDict)); CPDF_Dest dest = bookmark.GetDest(pDoc); if (dest.GetArray()) return FPDFDestFromCPDFArray(dest.GetArray()); // If this bookmark is not directly associated with a dest, we try to get // action CPDF_Action action = bookmark.GetAction(); if (!action.GetDict()) return nullptr; return FPDFDestFromCPDFArray(action.GetDest(pDoc).GetArray()); }