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" |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
211 return NULL; | 211 return NULL; |
212 } | 212 } |
213 CPDF_Document* pDoc = NULL; | 213 CPDF_Document* pDoc = NULL; |
214 pDoc = pParser ? pParser->GetDocument() : NULL; | 214 pDoc = pParser ? pParser->GetDocument() : NULL; |
215 CheckUnSupportError(pDoc, err_code); | 215 CheckUnSupportError(pDoc, err_code); |
216 return pParser->GetDocument(); | 216 return pParser->GetDocument(); |
217 } | 217 } |
218 | 218 |
219 DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, | 219 DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, |
220 int* fileVersion) { | 220 int* fileVersion) { |
221 if (!doc || !fileVersion) | 221 if (!fileVersion) |
222 return FALSE; | 222 return FALSE; |
| 223 |
223 *fileVersion = 0; | 224 *fileVersion = 0; |
224 CPDF_Document* pDoc = (CPDF_Document*)doc; | 225 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(doc); |
| 226 if (!pDoc) |
| 227 return FALSE; |
| 228 |
225 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); | 229 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); |
226 if (!pParser) | 230 if (!pParser) |
227 return FALSE; | 231 return FALSE; |
| 232 |
228 *fileVersion = pParser->GetFileVersion(); | 233 *fileVersion = pParser->GetFileVersion(); |
229 return TRUE; | 234 return TRUE; |
230 } | 235 } |
231 | 236 |
232 // jabdelmalek: changed return type from FX_DWORD to build on Linux (and match | 237 // jabdelmalek: changed return type from FX_DWORD to build on Linux (and match |
233 // header). | 238 // header). |
234 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { | 239 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { |
235 if (document == NULL) | 240 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
| 241 if (!pDoc) |
236 return 0; | 242 return 0; |
237 CPDF_Document* pDoc = (CPDF_Document*)document; | 243 |
238 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); | 244 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); |
239 CPDF_Dictionary* pDict = pParser->GetEncryptDict(); | 245 CPDF_Dictionary* pDict = pParser->GetEncryptDict(); |
240 if (pDict == NULL) | 246 return pDict ? pDict->GetInteger("P") : (FX_DWORD)-1; |
241 return (FX_DWORD)-1; | |
242 | |
243 return pDict->GetInteger("P"); | |
244 } | 247 } |
245 | 248 |
246 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { | 249 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { |
247 if (document == NULL) | 250 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
| 251 if (!pDoc) |
248 return -1; | 252 return -1; |
249 CPDF_Document* pDoc = (CPDF_Document*)document; | 253 |
250 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); | 254 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); |
251 CPDF_Dictionary* pDict = pParser->GetEncryptDict(); | 255 CPDF_Dictionary* pDict = pParser->GetEncryptDict(); |
252 if (pDict == NULL) | 256 return pDict ? pDict->GetInteger("R") : -1; |
253 return -1; | |
254 | |
255 return pDict->GetInteger("R"); | |
256 } | 257 } |
257 | 258 |
258 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { | 259 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { |
259 if (document == NULL) | 260 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
260 return 0; | 261 return pDoc ? pDoc->GetPageCount() : 0; |
261 return ((CPDF_Document*)document)->GetPageCount(); | |
262 } | 262 } |
263 | 263 |
264 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, | 264 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, |
265 int page_index) { | 265 int page_index) { |
266 if (document == NULL) | 266 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
267 return NULL; | 267 if (!pDoc) |
| 268 return nullptr; |
| 269 |
268 if (page_index < 0 || page_index >= FPDF_GetPageCount(document)) | 270 if (page_index < 0 || page_index >= FPDF_GetPageCount(document)) |
269 return NULL; | 271 return nullptr; |
270 | 272 |
271 CPDF_Document* pDoc = (CPDF_Document*)document; | |
272 if (pDoc == NULL) | |
273 return NULL; | |
274 CPDF_Dictionary* pDict = pDoc->GetPage(page_index); | 273 CPDF_Dictionary* pDict = pDoc->GetPage(page_index); |
275 if (pDict == NULL) | 274 if (pDict == NULL) |
276 return NULL; | 275 return NULL; |
277 CPDF_Page* pPage = new CPDF_Page; | 276 CPDF_Page* pPage = new CPDF_Page; |
278 pPage->Load(pDoc, pDict); | 277 pPage->Load(pDoc, pDict); |
279 pPage->ParseContent(); | 278 pPage->ParseContent(); |
280 return pPage; | 279 return pPage; |
281 } | 280 } |
282 | 281 |
283 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) { | 282 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) { |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
506 CPDFSDK_PageView* pPageView = | 505 CPDFSDK_PageView* pPageView = |
507 (CPDFSDK_PageView*)(((CPDF_Page*)page))->GetPrivateData((void*)page); | 506 (CPDFSDK_PageView*)(((CPDF_Page*)page))->GetPrivateData((void*)page); |
508 if (pPageView && pPageView->IsLocked()) { | 507 if (pPageView && pPageView->IsLocked()) { |
509 pPageView->TakeOverPage(); | 508 pPageView->TakeOverPage(); |
510 return; | 509 return; |
511 } | 510 } |
512 delete (CPDF_Page*)page; | 511 delete (CPDF_Page*)page; |
513 } | 512 } |
514 | 513 |
515 DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) { | 514 DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) { |
516 if (!document) | 515 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
| 516 if (!pDoc) |
517 return; | 517 return; |
518 CPDF_Document* pDoc = (CPDF_Document*)document; | 518 |
519 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); | 519 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser(); |
520 if (pParser == NULL) { | 520 if (!pParser) { |
521 delete pDoc; | 521 delete pDoc; |
522 return; | 522 return; |
523 } | 523 } |
524 delete pParser; | 524 delete pParser; |
525 } | 525 } |
526 | 526 |
527 DLLEXPORT unsigned long STDCALL FPDF_GetLastError() { | 527 DLLEXPORT unsigned long STDCALL FPDF_GetLastError() { |
528 return GetLastError(); | 528 return GetLastError(); |
529 } | 529 } |
530 | 530 |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
738 pContext->m_pContext, pContext->m_pDevice, pContext->m_pOptions); | 738 pContext->m_pContext, pContext->m_pDevice, pContext->m_pOptions); |
739 pContext->m_pRenderer->Start(pause); | 739 pContext->m_pRenderer->Start(pause); |
740 if (bNeedToRestore) | 740 if (bNeedToRestore) |
741 pContext->m_pDevice->RestoreState(); | 741 pContext->m_pDevice->RestoreState(); |
742 } | 742 } |
743 | 743 |
744 DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, | 744 DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, |
745 int page_index, | 745 int page_index, |
746 double* width, | 746 double* width, |
747 double* height) { | 747 double* height) { |
748 CPDF_Document* pDoc = (CPDF_Document*)document; | 748 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
749 if (pDoc == NULL) | 749 if (!pDoc) |
750 return FALSE; | 750 return FALSE; |
751 | 751 |
752 CPDF_Dictionary* pDict = pDoc->GetPage(page_index); | 752 CPDF_Dictionary* pDict = pDoc->GetPage(page_index); |
753 if (pDict == NULL) | 753 if (!pDict) |
754 return FALSE; | 754 return FALSE; |
755 | 755 |
756 CPDF_Page page; | 756 CPDF_Page page; |
757 page.Load(pDoc, pDict); | 757 page.Load(pDoc, pDict); |
758 *width = page.GetPageWidth(); | 758 *width = page.GetPageWidth(); |
759 *height = page.GetPageHeight(); | 759 *height = page.GetPageHeight(); |
760 | 760 |
761 return TRUE; | 761 return TRUE; |
762 } | 762 } |
763 | 763 |
764 DLLEXPORT FPDF_BOOL STDCALL | 764 DLLEXPORT FPDF_BOOL STDCALL |
765 FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) { | 765 FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) { |
766 CPDF_Document* pDoc = (CPDF_Document*)document; | 766 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
767 if (!pDoc) | 767 if (!pDoc) |
768 return TRUE; | 768 return TRUE; |
769 CPDF_ViewerPreferences viewRef(pDoc); | 769 CPDF_ViewerPreferences viewRef(pDoc); |
770 return viewRef.PrintScaling(); | 770 return viewRef.PrintScaling(); |
771 } | 771 } |
772 | 772 |
773 DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) { | 773 DLLEXPORT int STDCALL FPDF_VIEWERREF_GetNumCopies(FPDF_DOCUMENT document) { |
774 CPDF_Document* pDoc = (CPDF_Document*)document; | 774 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
775 if (!pDoc) | 775 if (!pDoc) |
776 return 1; | 776 return 1; |
777 CPDF_ViewerPreferences viewRef(pDoc); | 777 CPDF_ViewerPreferences viewRef(pDoc); |
778 return viewRef.NumCopies(); | 778 return viewRef.NumCopies(); |
779 } | 779 } |
780 | 780 |
781 DLLEXPORT FPDF_PAGERANGE STDCALL | 781 DLLEXPORT FPDF_PAGERANGE STDCALL |
782 FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) { | 782 FPDF_VIEWERREF_GetPrintPageRange(FPDF_DOCUMENT document) { |
783 CPDF_Document* pDoc = (CPDF_Document*)document; | 783 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
784 if (!pDoc) | 784 if (!pDoc) |
785 return NULL; | 785 return NULL; |
786 CPDF_ViewerPreferences viewRef(pDoc); | 786 CPDF_ViewerPreferences viewRef(pDoc); |
787 return viewRef.PrintPageRange(); | 787 return viewRef.PrintPageRange(); |
788 } | 788 } |
789 | 789 |
790 DLLEXPORT FPDF_DUPLEXTYPE STDCALL | 790 DLLEXPORT FPDF_DUPLEXTYPE STDCALL |
791 FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) { | 791 FPDF_VIEWERREF_GetDuplex(FPDF_DOCUMENT document) { |
792 CPDF_Document* pDoc = (CPDF_Document*)document; | 792 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
793 if (!pDoc) | 793 if (!pDoc) |
794 return DuplexUndefined; | 794 return DuplexUndefined; |
795 CPDF_ViewerPreferences viewRef(pDoc); | 795 CPDF_ViewerPreferences viewRef(pDoc); |
796 CFX_ByteString duplex = viewRef.Duplex(); | 796 CFX_ByteString duplex = viewRef.Duplex(); |
797 if (FX_BSTRC("Simplex") == duplex) | 797 if (FX_BSTRC("Simplex") == duplex) |
798 return Simplex; | 798 return Simplex; |
799 if (FX_BSTRC("DuplexFlipShortEdge") == duplex) | 799 if (FX_BSTRC("DuplexFlipShortEdge") == duplex) |
800 return DuplexFlipShortEdge; | 800 return DuplexFlipShortEdge; |
801 if (FX_BSTRC("DuplexFlipLongEdge") == duplex) | 801 if (FX_BSTRC("DuplexFlipLongEdge") == duplex) |
802 return DuplexFlipLongEdge; | 802 return DuplexFlipLongEdge; |
803 return DuplexUndefined; | 803 return DuplexUndefined; |
804 } | 804 } |
805 | 805 |
806 DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) { | 806 DLLEXPORT FPDF_DWORD STDCALL FPDF_CountNamedDests(FPDF_DOCUMENT document) { |
807 if (!document) | 807 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
| 808 if (!pDoc) |
808 return 0; | 809 return 0; |
809 CPDF_Document* pDoc = (CPDF_Document*)document; | |
810 | 810 |
811 CPDF_Dictionary* pRoot = pDoc->GetRoot(); | 811 CPDF_Dictionary* pRoot = pDoc->GetRoot(); |
812 if (!pRoot) | 812 if (!pRoot) |
813 return 0; | 813 return 0; |
814 | 814 |
815 CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); | 815 CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); |
816 int count = nameTree.GetCount(); | 816 int count = nameTree.GetCount(); |
817 CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); | 817 CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); |
818 if (pDest) | 818 if (pDest) |
819 count += pDest->GetCount(); | 819 count += pDest->GetCount(); |
820 return count; | 820 return count; |
821 } | 821 } |
822 | 822 |
823 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, | 823 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDestByName(FPDF_DOCUMENT document, |
824 FPDF_BYTESTRING name) { | 824 FPDF_BYTESTRING name) { |
825 if (!document) | |
826 return NULL; | |
827 if (!name || name[0] == 0) | 825 if (!name || name[0] == 0) |
828 return NULL; | 826 return nullptr; |
829 | 827 |
830 CPDF_Document* pDoc = (CPDF_Document*)document; | 828 CPDF_Document* pDoc = CPDF_Document::FromFPDFDocument(document); |
| 829 if (!pDoc) |
| 830 return nullptr; |
| 831 |
831 CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests")); | 832 CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests")); |
832 return name_tree.LookupNamedDest(pDoc, name); | 833 return name_tree.LookupNamedDest(pDoc, name); |
833 } | 834 } |
834 | 835 |
835 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, | 836 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, |
836 int index, | 837 int index, |
837 void* buffer, | 838 void* buffer, |
838 long* buflen) { | 839 long* buflen) { |
839 if (!buffer) | 840 if (!buffer) |
840 *buflen = 0; | 841 *buflen = 0; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
885 if (!buffer) { | 886 if (!buffer) { |
886 *buflen = len; | 887 *buflen = len; |
887 } else if (*buflen >= len) { | 888 } else if (*buflen >= len) { |
888 memcpy(buffer, utf16Name.c_str(), len); | 889 memcpy(buffer, utf16Name.c_str(), len); |
889 *buflen = len; | 890 *buflen = len; |
890 } else { | 891 } else { |
891 *buflen = -1; | 892 *buflen = -1; |
892 } | 893 } |
893 return (FPDF_DEST)pDestObj; | 894 return (FPDF_DEST)pDestObj; |
894 } | 895 } |
OLD | NEW |