| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "../../core/include/fxcodec/fx_codec.h" | 7 #include "../../core/include/fxcodec/fx_codec.h" |
| 8 #include "../../core/include/fxcrt/fx_safe_types.h" | 8 #include "../../core/include/fxcrt/fx_safe_types.h" |
| 9 #include "../../public/fpdf_ext.h" | 9 #include "../../public/fpdf_ext.h" |
| 10 #include "../../public/fpdf_progressive.h" | 10 #include "../../public/fpdf_progressive.h" |
| 11 #include "../../public/fpdfview.h" | 11 #include "../../public/fpdfview.h" |
| 12 #include "../../third_party/base/nonstd_unique_ptr.h" | 12 #include "../../third_party/base/nonstd_unique_ptr.h" |
| 13 #include "../../third_party/base/numerics/safe_conversions_impl.h" | 13 #include "../../third_party/base/numerics/safe_conversions_impl.h" |
| 14 #include "../include/fsdk_define.h" | 14 #include "../include/fsdk_define.h" |
| 15 #include "../include/fsdk_mgr.h" | 15 #include "../include/fsdk_mgr.h" |
| 16 #include "../include/fsdk_rendercontext.h" | 16 #include "../include/fsdk_rendercontext.h" |
| 17 #include "../include/javascript/IJavaScript.h" | 17 #include "../include/javascript/IJavaScript.h" |
| 18 | 18 |
| 19 CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) { |
| 20 return static_cast<CPDF_Document*>(doc); |
| 21 } |
| 22 |
| 19 CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) { | 23 CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) { |
| 20 if (pFileAccess) | 24 if (pFileAccess) |
| 21 m_FileAccess = *pFileAccess; | 25 m_FileAccess = *pFileAccess; |
| 22 } | 26 } |
| 23 | 27 |
| 24 FX_BOOL CPDF_CustomAccess::ReadBlock(void* buffer, | 28 FX_BOOL CPDF_CustomAccess::ReadBlock(void* buffer, |
| 25 FX_FILESIZE offset, | 29 FX_FILESIZE offset, |
| 26 size_t size) { | 30 size_t size) { |
| 27 if (offset < 0) { | 31 if (offset < 0) { |
| 28 return FALSE; | 32 return FALSE; |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 CheckUnSupportError(pDoc, err_code); | 219 CheckUnSupportError(pDoc, err_code); |
| 216 return pParser->GetDocument(); | 220 return pParser->GetDocument(); |
| 217 } | 221 } |
| 218 | 222 |
| 219 DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, | 223 DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, |
| 220 int* fileVersion) { | 224 int* fileVersion) { |
| 221 if (!fileVersion) | 225 if (!fileVersion) |
| 222 return FALSE; | 226 return FALSE; |
| 223 | 227 |
| 224 *fileVersion = 0; | 228 *fileVersion = 0; |
| 225 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(doc); | 229 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(doc); |
| 226 if (!pDoc) | 230 if (!pDoc) |
| 227 return FALSE; | 231 return FALSE; |
| 228 | 232 |
| 229 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); | 233 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); |
| 230 if (!pParser) | 234 if (!pParser) |
| 231 return FALSE; | 235 return FALSE; |
| 232 | 236 |
| 233 *fileVersion = pParser->GetFileVersion(); | 237 *fileVersion = pParser->GetFileVersion(); |
| 234 return TRUE; | 238 return TRUE; |
| 235 } | 239 } |
| 236 | 240 |
| 237 // jabdelmalek: changed return type from FX_DWORD to build on Linux (and match | 241 // jabdelmalek: changed return type from FX_DWORD to build on Linux (and match |
| 238 // header). | 242 // header). |
| 239 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { | 243 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { |
| 240 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 244 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 241 if (!pDoc) | 245 if (!pDoc) |
| 242 return 0; | 246 return 0; |
| 243 | 247 |
| 244 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); | 248 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); |
| 245 CPDF_Dictionary* pDict = pParser->GetEncryptDict(); | 249 CPDF_Dictionary* pDict = pParser->GetEncryptDict(); |
| 246 return pDict ? pDict->GetInteger("P") : (FX_DWORD)-1; | 250 return pDict ? pDict->GetInteger("P") : (FX_DWORD)-1; |
| 247 } | 251 } |
| 248 | 252 |
| 249 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { | 253 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { |
| 250 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 254 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 251 if (!pDoc) | 255 if (!pDoc) |
| 252 return -1; | 256 return -1; |
| 253 | 257 |
| 254 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); | 258 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); |
| 255 CPDF_Dictionary* pDict = pParser->GetEncryptDict(); | 259 CPDF_Dictionary* pDict = pParser->GetEncryptDict(); |
| 256 return pDict ? pDict->GetInteger("R") : -1; | 260 return pDict ? pDict->GetInteger("R") : -1; |
| 257 } | 261 } |
| 258 | 262 |
| 259 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { | 263 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { |
| 260 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 264 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 261 return pDoc ? pDoc->GetPageCount() : 0; | 265 return pDoc ? pDoc->GetPageCount() : 0; |
| 262 } | 266 } |
| 263 | 267 |
| 264 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, | 268 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, |
| 265 int page_index) { | 269 int page_index) { |
| 266 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 270 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 267 if (!pDoc) | 271 if (!pDoc) |
| 268 return nullptr; | 272 return nullptr; |
| 269 | 273 |
| 270 if (page_index < 0 || page_index >= FPDF_GetPageCount(document)) | 274 if (page_index < 0 || page_index >= FPDF_GetPageCount(document)) |
| 271 return nullptr; | 275 return nullptr; |
| 272 | 276 |
| 273 CPDF_Dictionary* pDict = pDoc->GetPage(page_index); | 277 CPDF_Dictionary* pDict = pDoc->GetPage(page_index); |
| 274 if (pDict == NULL) | 278 if (pDict == NULL) |
| 275 return NULL; | 279 return NULL; |
| 276 CPDF_Page* pPage = new CPDF_Page; | 280 CPDF_Page* pPage = new CPDF_Page; |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 CPDFSDK_PageView* pPageView = | 509 CPDFSDK_PageView* pPageView = |
| 506 (CPDFSDK_PageView*)(((CPDF_Page*)page))->GetPrivateData((void*)page); | 510 (CPDFSDK_PageView*)(((CPDF_Page*)page))->GetPrivateData((void*)page); |
| 507 if (pPageView && pPageView->IsLocked()) { | 511 if (pPageView && pPageView->IsLocked()) { |
| 508 pPageView->TakeOverPage(); | 512 pPageView->TakeOverPage(); |
| 509 return; | 513 return; |
| 510 } | 514 } |
| 511 delete (CPDF_Page*)page; | 515 delete (CPDF_Page*)page; |
| 512 } | 516 } |
| 513 | 517 |
| 514 DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) { | 518 DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) { |
| 515 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 519 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 516 if (!pDoc) | 520 if (!pDoc) |
| 517 return; | 521 return; |
| 518 | 522 |
| 519 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); | 523 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); |
| 520 if (!pParser) { | 524 if (!pParser) { |
| 521 delete pDoc; | 525 delete pDoc; |
| 522 return; | 526 return; |
| 523 } | 527 } |
| 524 delete pParser; | 528 delete pParser; |
| 525 } | 529 } |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 738 pContext->m_pContext, pContext->m_pDevice, pContext->m_pOptions); | 742 pContext->m_pContext, pContext->m_pDevice, pContext->m_pOptions); |
| 739 pContext->m_pRenderer->Start(pause); | 743 pContext->m_pRenderer->Start(pause); |
| 740 if (bNeedToRestore) | 744 if (bNeedToRestore) |
| 741 pContext->m_pDevice->RestoreState(); | 745 pContext->m_pDevice->RestoreState(); |
| 742 } | 746 } |
| 743 | 747 |
| 744 DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, | 748 DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, |
| 745 int page_index, | 749 int page_index, |
| 746 double* width, | 750 double* width, |
| 747 double* height) { | 751 double* height) { |
| 748 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 752 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 749 if (!pDoc) | 753 if (!pDoc) |
| 750 return FALSE; | 754 return FALSE; |
| 751 | 755 |
| 752 CPDF_Dictionary* pDict = pDoc->GetPage(page_index); | 756 CPDF_Dictionary* pDict = pDoc->GetPage(page_index); |
| 753 if (!pDict) | 757 if (!pDict) |
| 754 return FALSE; | 758 return FALSE; |
| 755 | 759 |
| 756 CPDF_Page page; | 760 CPDF_Page page; |
| 757 page.Load(pDoc, pDict); | 761 page.Load(pDoc, pDict); |
| 758 *width = page.GetPageWidth(); | 762 *width = page.GetPageWidth(); |
| 759 *height = page.GetPageHeight(); | 763 *height = page.GetPageHeight(); |
| 760 | 764 |
| 761 return TRUE; | 765 return TRUE; |
| 762 } | 766 } |
| 763 | 767 |
| 764 DLLEXPORT FPDF_BOOL STDCALL | 768 DLLEXPORT FPDF_BOOL STDCALL |
| 765 FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) { | 769 FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) { |
| 766 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 770 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 767 if (!pDoc) | 771 if (!pDoc) |
| 768 return TRUE; | 772 return TRUE; |
| 769 CPDF_ViewerPreferences viewRef(pDoc); | 773 CPDF_ViewerPreferences viewRef(pDoc); |
| 770 return viewRef.PrintScaling(); | 774 return viewRef.PrintScaling(); |
| 771 } | 775 } |
| 772 | 776 |
| 773 DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) { | 777 DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) { |
| 774 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 778 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 775 if (!pDoc) | 779 if (!pDoc) |
| 776 return 1; | 780 return 1; |
| 777 CPDF_ViewerPreferences viewRef(pDoc); | 781 CPDF_ViewerPreferences viewRef(pDoc); |
| 778 return viewRef.NumCopies(); | 782 return viewRef.NumCopies(); |
| 779 } | 783 } |
| 780 | 784 |
| 781 DLLEXPORT FPDF_PAGERANGE STDCALL | 785 DLLEXPORT FPDF_PAGERANGE STDCALL |
| 782 FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) { | 786 FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) { |
| 783 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 787 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 784 if (!pDoc) | 788 if (!pDoc) |
| 785 return NULL; | 789 return NULL; |
| 786 CPDF_ViewerPreferences viewRef(pDoc); | 790 CPDF_ViewerPreferences viewRef(pDoc); |
| 787 return viewRef.PrintPageRange(); | 791 return viewRef.PrintPageRange(); |
| 788 } | 792 } |
| 789 | 793 |
| 790 DLLEXPORT FPDF_DUPLEXTYPE STDCALL | 794 DLLEXPORT FPDF_DUPLEXTYPE STDCALL |
| 791 FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) { | 795 FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) { |
| 792 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 796 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 793 if (!pDoc) | 797 if (!pDoc) |
| 794 return DuplexUndefined; | 798 return DuplexUndefined; |
| 795 CPDF_ViewerPreferences viewRef(pDoc); | 799 CPDF_ViewerPreferences viewRef(pDoc); |
| 796 CFX_ByteString duplex = viewRef.Duplex(); | 800 CFX_ByteString duplex = viewRef.Duplex(); |
| 797 if (FX_BSTRC("Simplex") == duplex) | 801 if (FX_BSTRC("Simplex") == duplex) |
| 798 return Simplex; | 802 return Simplex; |
| 799 if (FX_BSTRC("DuplexFlipShortEdge") == duplex) | 803 if (FX_BSTRC("DuplexFlipShortEdge") == duplex) |
| 800 return DuplexFlipShortEdge; | 804 return DuplexFlipShortEdge; |
| 801 if (FX_BSTRC("DuplexFlipLongEdge") == duplex) | 805 if (FX_BSTRC("DuplexFlipLongEdge") == duplex) |
| 802 return DuplexFlipLongEdge; | 806 return DuplexFlipLongEdge; |
| 803 return DuplexUndefined; | 807 return DuplexUndefined; |
| 804 } | 808 } |
| 805 | 809 |
| 806 DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) { | 810 DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) { |
| 807 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 811 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 808 if (!pDoc) | 812 if (!pDoc) |
| 809 return 0; | 813 return 0; |
| 810 | 814 |
| 811 CPDF_Dictionary* pRoot = pDoc->GetRoot(); | 815 CPDF_Dictionary* pRoot = pDoc->GetRoot(); |
| 812 if (!pRoot) | 816 if (!pRoot) |
| 813 return 0; | 817 return 0; |
| 814 | 818 |
| 815 CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); | 819 CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); |
| 816 int count = nameTree.GetCount(); | 820 int count = nameTree.GetCount(); |
| 817 CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); | 821 CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); |
| 818 if (pDest) | 822 if (pDest) |
| 819 count += pDest->GetCount(); | 823 count += pDest->GetCount(); |
| 820 return count; | 824 return count; |
| 821 } | 825 } |
| 822 | 826 |
| 823 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, | 827 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, |
| 824 FPDF_BYTESTRING name) { | 828 FPDF_BYTESTRING name) { |
| 825 if (!name || name[0] == 0) | 829 if (!name || name[0] == 0) |
| 826 return nullptr; | 830 return nullptr; |
| 827 | 831 |
| 828 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); | 832 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); |
| 829 if (!pDoc) | 833 if (!pDoc) |
| 830 return nullptr; | 834 return nullptr; |
| 831 | 835 |
| 832 CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests")); | 836 CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests")); |
| 833 return name_tree.LookupNamedDest(pDoc, name); | 837 return name_tree.LookupNamedDest(pDoc, name); |
| 834 } | 838 } |
| 835 | 839 |
| 836 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, | 840 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, |
| 837 int index, | 841 int index, |
| 838 void* buffer, | 842 void* buffer, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 if (!buffer) { | 890 if (!buffer) { |
| 887 *buflen = len; | 891 *buflen = len; |
| 888 } else if (*buflen >= len) { | 892 } else if (*buflen >= len) { |
| 889 memcpy(buffer, utf16Name.c_str(), len); | 893 memcpy(buffer, utf16Name.c_str(), len); |
| 890 *buflen = len; | 894 *buflen = len; |
| 891 } else { | 895 } else { |
| 892 *buflen = -1; | 896 *buflen = -1; |
| 893 } | 897 } |
| 894 return (FPDF_DEST)pDestObj; | 898 return (FPDF_DEST)pDestObj; |
| 895 } | 899 } |
| OLD | NEW |