diff options
Diffstat (limited to 'fpdfsdk')
-rw-r--r-- | fpdfsdk/src/fpdfdoc.cpp | 238 |
1 files changed, 121 insertions, 117 deletions
diff --git a/fpdfsdk/src/fpdfdoc.cpp b/fpdfsdk/src/fpdfdoc.cpp index 79d335da53..26c3946de6 100644 --- a/fpdfsdk/src/fpdfdoc.cpp +++ b/fpdfsdk/src/fpdfdoc.cpp @@ -9,118 +9,122 @@ #include "../include/fpdfxfa/fpdfxfa_doc.h" #include "../include/fpdfxfa/fpdfxfa_page.h" -static int this_module = 0; +static int THISMODULE = 0; -static CPDF_Bookmark FindBookmark(CPDF_BookmarkTree& tree, CPDF_Bookmark This, const CFX_WideString& title) +static CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree, CPDF_Bookmark bookmark, const CFX_WideString& title) { - if (This != NULL) { + if (bookmark && bookmark.GetTitle().CompareNoCase(title) == 0) { // First check this item - CFX_WideString this_title = This.GetTitle(); - if (this_title.CompareNoCase(title) == 0) - return This; + return bookmark; } // go into children items - CPDF_Bookmark Child = tree.GetFirstChild(This); - while (Child != NULL) { + CPDF_Bookmark child = tree.GetFirstChild(bookmark); + while (child) { // check if this item - CPDF_Bookmark Found = FindBookmark(tree, Child, title); - if (Found) return Found; - Child = tree.GetNextSibling(Child); + CPDF_Bookmark found = FindBookmark(tree, child, title); + if (found) + return found; + child = tree.GetNextSibling(child); } - return NULL; + return CPDF_Bookmark(); } DLLEXPORT FPDF_BOOKMARK STDCALL FPDFBookmark_Find(FPDF_DOCUMENT document, FPDF_WIDESTRING title) { - if (document == NULL) return NULL; - if (title == NULL || title[0] == 0) return NULL; - + if (!document) + return NULL; + if (!title || title[0] == 0) + return NULL; CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); CPDF_BookmarkTree tree(pDoc); - FX_STRSIZE len = CFX_WideString::WStringLength(title); - CFX_WideString wstr = CFX_WideString::FromUTF16LE(title, len); - return FindBookmark(tree, NULL, wstr); + CFX_WideString encodedTitle = CFX_WideString::FromUTF16LE(title, len); + return FindBookmark(tree, CPDF_Bookmark(), encodedTitle).GetDict(); } -DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK bookmark) +DLLEXPORT FPDF_DEST STDCALL FPDFBookmark_GetDest(FPDF_DOCUMENT document, FPDF_BOOKMARK pDict) { - if (document == NULL) return NULL; - if (bookmark == NULL) return NULL; - - CPDF_Bookmark Bookmark = (CPDF_Dictionary*)bookmark; + if (!document) + return NULL; + if (!pDict) + return NULL; + CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_Dest dest = Bookmark.GetDest(pDoc); - if (dest != NULL) return dest; - + CPDF_Dest dest = bookmark.GetDest(pDoc); + if (dest) + return dest; // If this bookmark is not directly associated with a dest, we try to get action - CPDF_Action Action = Bookmark.GetAction(); - if (Action == NULL) return NULL; - return Action.GetDest(pDoc); + CPDF_Action action = bookmark.GetAction(); + if (!action) + return NULL; + return action.GetDest(pDoc); } -DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK bookmark) +DLLEXPORT FPDF_ACTION STDCALL FPDFBookmark_GetAction(FPDF_BOOKMARK pDict) { - if (bookmark == NULL) return NULL; - - CPDF_Bookmark Bookmark = (CPDF_Dictionary*)bookmark; - return Bookmark.GetAction(); + if (!pDict) + return NULL; + CPDF_Bookmark bookmark((CPDF_Dictionary*)pDict); + return bookmark.GetAction(); } -DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION action) +DLLEXPORT unsigned long STDCALL FPDFAction_GetType(FPDF_ACTION pDict) { - if (action == NULL) return 0; - - CPDF_Action Action = (CPDF_Dictionary*)action; - CPDF_Action::ActionType type = Action.GetType(); + if (!pDict) + return 0; + CPDF_Action action = (CPDF_Dictionary*)pDict; + CPDF_Action::ActionType type = action.GetType(); switch (type) { - case CPDF_Action::GoTo: - return PDFACTION_GOTO; - case CPDF_Action::GoToR: - return PDFACTION_REMOTEGOTO; - case CPDF_Action::URI: - return PDFACTION_URI; - case CPDF_Action::Launch: - return PDFACTION_LAUNCH; - default: - return PDFACTION_UNSUPPORTED; + case CPDF_Action::GoTo: + return PDFACTION_GOTO; + case CPDF_Action::GoToR: + return PDFACTION_REMOTEGOTO; + case CPDF_Action::URI: + return PDFACTION_URI; + case CPDF_Action::Launch: + return PDFACTION_LAUNCH; + default: + return PDFACTION_UNSUPPORTED; } return PDFACTION_UNSUPPORTED; } -DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTION action) +DLLEXPORT FPDF_DEST STDCALL FPDFAction_GetDest(FPDF_DOCUMENT document, FPDF_ACTION pDict) { - if (document == NULL) return NULL; - if (action == NULL) return NULL; + if (!document) + return NULL; + if (!pDict) + return NULL; CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_Action Action = (CPDF_Dictionary*)action; - - return Action.GetDest(pDoc); + CPDF_Action action = (CPDF_Dictionary*)pDict; + return action.GetDest(pDoc); } -DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FPDF_ACTION action, +DLLEXPORT unsigned long STDCALL FPDFAction_GetURIPath(FPDF_DOCUMENT document, FPDF_ACTION pDict, void* buffer, unsigned long buflen) { - if (document == NULL) return 0; - if (action == NULL) return 0; + if (!document) + return 0; + if (!pDict) + return 0; CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_Action Action = (CPDF_Dictionary*)action; - - CFX_ByteString path = Action.GetURI(pDoc); + CPDF_Action action = (CPDF_Dictionary*)pDict; + CFX_ByteString path = action.GetURI(pDoc); unsigned long len = path.GetLength() + 1; if (buffer != NULL && buflen >= len) FXSYS_memcpy(buffer, path.c_str(), len); return len; } -DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST dest) +DLLEXPORT unsigned long STDCALL FPDFDest_GetPageIndex(FPDF_DOCUMENT document, FPDF_DEST pDict) { - if (document == NULL) return 0; - if (dest == NULL) return 0; + if (!document) + return 0; + if (!pDict) + return 0; CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - CPDF_Dest Dest = (CPDF_Array*)dest; - - return Dest.GetPageIndex(pDoc); + CPDF_Dest dest = (CPDF_Array*)pDict; + return dest.GetPageIndex(pDoc); } static void ReleaseLinkList(FX_LPVOID data) @@ -130,60 +134,62 @@ static void ReleaseLinkList(FX_LPVOID data) DLLEXPORT FPDF_LINK STDCALL FPDFLink_GetLinkAtPoint(FPDF_PAGE page, double x, double y) { - if (page == NULL) return NULL; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return NULL; - + if (!page) + return NULL; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); // Link list is stored with the document CPDF_Document* pDoc = pPage->m_pDocument; - CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&this_module); - if (pLinkList == NULL) { + CPDF_LinkList* pLinkList = (CPDF_LinkList*)pDoc->GetPrivateData(&THISMODULE); + if (!pLinkList) { pLinkList = FX_NEW CPDF_LinkList(pDoc); - pDoc->SetPrivateData(&this_module, pLinkList, ReleaseLinkList); + pDoc->SetPrivateData(&THISMODULE, pLinkList, ReleaseLinkList); } - return pLinkList->GetLinkAtPoint(pPage, (FX_FLOAT)x, (FX_FLOAT)y); } -DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK link) +DLLEXPORT FPDF_DEST STDCALL FPDFLink_GetDest(FPDF_DOCUMENT document, FPDF_LINK pDict) { - if (document == NULL) return NULL; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); - if (link == NULL) return NULL; - CPDF_Link Link = (CPDF_Dictionary*)link; - - FPDF_DEST dest = Link.GetDest(pDoc); - if (dest) return dest; - + if (!document) + return NULL; + CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + if (!pDict) + return NULL; + CPDF_Link link = (CPDF_Dictionary*)pDict; + + FPDF_DEST dest = link.GetDest(pDoc); + if (dest) + return dest; // If this link is not directly associated with a dest, we try to get action - CPDF_Action Action = Link.GetAction(); - if (Action == NULL) return NULL; - return Action.GetDest(pDoc); + CPDF_Action action = link.GetAction(); + if (!action) + return NULL; + return action.GetDest(pDoc); } -DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK link) +DLLEXPORT FPDF_ACTION STDCALL FPDFLink_GetAction(FPDF_LINK pDict) { - if (link == NULL) return NULL; - CPDF_Link Link = (CPDF_Dictionary*)link; - - return Link.GetAction(); + if (!pDict) + return NULL; + CPDF_Link link = (CPDF_Dictionary*)pDict; + return link.GetAction(); } DLLEXPORT FPDF_BOOL STDCALL FPDFLink_Enumerate(FPDF_PAGE page, int* startPos, FPDF_LINK* linkAnnot) { if(!page || !startPos || !linkAnnot) return FALSE; - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); - if (!pPage) return FALSE; - if(!pPage->m_pFormDict) return FALSE; + CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + if(!pPage->m_pFormDict) + return FALSE; CPDF_Array* pAnnots = pPage->m_pFormDict->GetArray("Annots"); - if(!pAnnots) return FALSE; - for (int i = *startPos; i < (int)pAnnots->GetCount(); i ++) { + if(!pAnnots) + return FALSE; + for (int i = *startPos; i < (int)pAnnots->GetCount(); i++) { CPDF_Dictionary* pDict = (CPDF_Dictionary*)pAnnots->GetElementValue(i); - if (pDict == NULL || pDict->GetType() != PDFOBJ_DICTIONARY) continue; - if(pDict->GetString(FX_BSTRC("Subtype")).Equal(FX_BSTRC("Link"))) - { - *startPos = i+1; + if (!pDict || pDict->GetType() != PDFOBJ_DICTIONARY) + continue; + if(pDict->GetString(FX_BSTRC("Subtype")).Equal(FX_BSTRC("Link"))) { + *startPos = i + 1; *linkAnnot = (FPDF_LINK)pDict; return TRUE; } @@ -210,7 +216,7 @@ DLLEXPORT int STDCALL FPDFLink_CountQuadPoints(FPDF_LINK linkAnnot) return 0; CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot; CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints")); - if (pArray == NULL) + if (!pArray) return 0; else return pArray->GetCount() / 8; @@ -223,8 +229,8 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, int quad CPDF_Dictionary* pAnnotDict = (CPDF_Dictionary*)linkAnnot; CPDF_Array* pArray = pAnnotDict->GetArray(FX_BSTRC("QuadPoints")); if (pArray) { - if (0 > quadIndex || quadIndex >= (int)pArray->GetCount()/8 || - ((quadIndex*8+7) >= (int)pArray->GetCount())) return FALSE; + if (quadIndex < 0 || quadIndex >= (int)pArray->GetCount()/8 || ((quadIndex*8+7) >= (int)pArray->GetCount())) + return FALSE; quadPoints->x1 = pArray->GetNumber(quadIndex*8); quadPoints->y1 = pArray->GetNumber(quadIndex*8+1); quadPoints->x2 = pArray->GetNumber(quadIndex*8+2); @@ -238,27 +244,25 @@ DLLEXPORT FPDF_BOOL STDCALL FPDFLink_GetQuadPoints(FPDF_LINK linkAnnot, int quad return FALSE; } - DLLEXPORT unsigned long STDCALL FPDF_GetMetaText(FPDF_DOCUMENT doc, FPDF_BYTESTRING tag, void* buffer, unsigned long buflen) { - if (doc == NULL || tag == NULL) return 0; - - CPDF_Document* pDoc = ((CPDFXFA_Document*)doc)->GetPDFDoc(); + if (!doc || !tag) + return 0; + CPDF_Document* pDoc = ((CPDFXFA_Document*)doc)->GetPDFDoc(); // Get info dictionary CPDF_Dictionary* pInfo = pDoc->GetInfo(); - if (pInfo == NULL) return 0; - + if (!pInfo) + return 0; CFX_WideString text = pInfo->GetUnicodeText(tag); - // Use UTF-16LE encoding - CFX_ByteString bstr = text.UTF16LE_Encode(); - unsigned long len = bstr.GetLength(); - if (buffer != NULL && buflen >= len+2) { - FXSYS_memcpy(buffer, bstr.c_str(), len); + CFX_ByteString encodedText = text.UTF16LE_Encode(); + unsigned long len = encodedText.GetLength(); + if (buffer && buflen >= len + 2) { + FXSYS_memcpy(buffer, encodedText.c_str(), len); // use double zero as trailer - ((FX_BYTE*)buffer)[len] = ((FX_BYTE*)buffer)[len+1] = 0; + ((FX_BYTE*)buffer)[len] = 0; + ((FX_BYTE*)buffer)[len + 1] = 0; } return len+2; } - |