Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: fpdfsdk/src/fpdfview.cpp

Issue 1415803002: XFA: add CPDFDocumentToFPDFDocument() (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Address comments Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « fpdfsdk/src/fpdfeditpage.cpp ('k') | fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/fpdfapi/fpdf_module.h" 7 #include "../../core/include/fpdfapi/fpdf_module.h"
8 #include "../../core/include/fxcodec/fx_codec.h" 8 #include "../../core/include/fxcodec/fx_codec.h"
9 #include "../../core/include/fxcrt/fx_safe_types.h" 9 #include "../../core/include/fxcrt/fx_safe_types.h"
10 #include "../../public/fpdf_ext.h" 10 #include "../../public/fpdf_ext.h"
11 #include "../../public/fpdf_formfill.h" 11 #include "../../public/fpdf_formfill.h"
12 #include "../../public/fpdf_progressive.h" 12 #include "../../public/fpdf_progressive.h"
13 #include "../../public/fpdfview.h" 13 #include "../../public/fpdfview.h"
14 #include "../../third_party/base/nonstd_unique_ptr.h" 14 #include "../../third_party/base/nonstd_unique_ptr.h"
15 #include "../../third_party/base/numerics/safe_conversions_impl.h" 15 #include "../../third_party/base/numerics/safe_conversions_impl.h"
16 #include "../include/fsdk_define.h" 16 #include "../include/fsdk_define.h"
17 #include "../include/fsdk_mgr.h" 17 #include "../include/fsdk_mgr.h"
18 #include "../include/fsdk_rendercontext.h" 18 #include "../include/fsdk_rendercontext.h"
19 #include "../include/fpdfxfa/fpdfxfa_doc.h" 19 #include "../include/fpdfxfa/fpdfxfa_doc.h"
20 #include "../include/fpdfxfa/fpdfxfa_app.h" 20 #include "../include/fpdfxfa/fpdfxfa_app.h"
21 #include "../include/fpdfxfa/fpdfxfa_page.h" 21 #include "../include/fpdfxfa/fpdfxfa_page.h"
22 #include "../include/fpdfxfa/fpdfxfa_util.h" 22 #include "../include/fpdfxfa/fpdfxfa_util.h"
23 #include "../include/javascript/IJavaScript.h" 23 #include "../include/javascript/IJavaScript.h"
24 24
25 CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) { 25 CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) {
26 return doc ? static_cast<CPDFXFA_Document*>(doc)->GetPDFDoc() : nullptr; 26 return doc ? static_cast<CPDFXFA_Document*>(doc)->GetPDFDoc() : nullptr;
27 } 27 }
28 28
29 FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document* doc) {
30 return doc ? new CPDFXFA_Document(doc, CPDFXFA_App::GetInstance()) : nullptr;
31 }
32
29 CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page) { 33 CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page) {
30 return page ? static_cast<CPDFXFA_Page*>(page)->GetPDFPage() : nullptr; 34 return page ? static_cast<CPDFXFA_Page*>(page)->GetPDFPage() : nullptr;
31 } 35 }
32 36
33 CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) { 37 CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) {
34 m_pFS = pFS; 38 m_pFS = pFS;
35 m_nCurPos = 0; 39 m_nCurPos = 0;
36 } 40 }
37 41
38 IFX_FileStream* CFPDF_FileStream::Retain() { 42 IFX_FileStream* CFPDF_FileStream::Retain() {
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 CMemFile* pMemFile = new CMemFile((uint8_t*)data_buf, size); 348 CMemFile* pMemFile = new CMemFile((uint8_t*)data_buf, size);
345 FX_DWORD err_code = pParser->StartParse(pMemFile); 349 FX_DWORD err_code = pParser->StartParse(pMemFile);
346 if (err_code) { 350 if (err_code) {
347 delete pParser; 351 delete pParser;
348 ProcessParseError(err_code); 352 ProcessParseError(err_code);
349 return NULL; 353 return NULL;
350 } 354 }
351 CPDF_Document* pDoc = NULL; 355 CPDF_Document* pDoc = NULL;
352 pDoc = pParser ? pParser->GetDocument() : NULL; 356 pDoc = pParser ? pParser->GetDocument() : NULL;
353 CheckUnSupportError(pDoc, err_code); 357 CheckUnSupportError(pDoc, err_code);
354 CPDF_Document* pPDFDoc = pParser->GetDocument(); 358 return FPDFDocumentFromCPDFDocument(pParser->GetDocument());
355 if (!pPDFDoc)
356 return NULL;
357
358 CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance();
359 return new CPDFXFA_Document(pPDFDoc, pProvider);
360 } 359 }
361 360
362 DLLEXPORT FPDF_DOCUMENT STDCALL 361 DLLEXPORT FPDF_DOCUMENT STDCALL
363 FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, 362 FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess,
364 FPDF_BYTESTRING password) { 363 FPDF_BYTESTRING password) {
365 CPDF_Parser* pParser = new CPDF_Parser; 364 CPDF_Parser* pParser = new CPDF_Parser;
366 pParser->SetPassword(password); 365 pParser->SetPassword(password);
367 CPDF_CustomAccess* pFile = new CPDF_CustomAccess(pFileAccess); 366 CPDF_CustomAccess* pFile = new CPDF_CustomAccess(pFileAccess);
368 FX_DWORD err_code = pParser->StartParse(pFile); 367 FX_DWORD err_code = pParser->StartParse(pFile);
369 if (err_code) { 368 if (err_code) {
370 delete pParser; 369 delete pParser;
371 ProcessParseError(err_code); 370 ProcessParseError(err_code);
372 return NULL; 371 return NULL;
373 } 372 }
374 CPDF_Document* pDoc = NULL; 373 CPDF_Document* pDoc = NULL;
375 pDoc = pParser ? pParser->GetDocument() : NULL; 374 pDoc = pParser ? pParser->GetDocument() : NULL;
376 CheckUnSupportError(pDoc, err_code); 375 CheckUnSupportError(pDoc, err_code);
377 CPDF_Document* pPDFDoc = pParser->GetDocument(); 376 return FPDFDocumentFromCPDFDocument(pParser->GetDocument());
378 if (!pPDFDoc)
379 return NULL;
380
381 CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance();
382 return new CPDFXFA_Document(pPDFDoc, pProvider);
383 } 377 }
384 378
385 DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, 379 DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc,
386 int* fileVersion) { 380 int* fileVersion) {
387 if (!fileVersion) 381 if (!fileVersion)
388 return FALSE; 382 return FALSE;
389 383
390 *fileVersion = 0; 384 *fileVersion = 0;
391 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(doc); 385 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(doc);
392 if (!pDoc) 386 if (!pDoc)
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 if (!document) 424 if (!document)
431 return nullptr; 425 return nullptr;
432 CPDFXFA_Document* pDoc = static_cast<CPDFXFA_Document*>(document); 426 CPDFXFA_Document* pDoc = static_cast<CPDFXFA_Document*>(document);
433 if (page_index < 0 || page_index >= pDoc->GetPageCount()) 427 if (page_index < 0 || page_index >= pDoc->GetPageCount())
434 return nullptr; 428 return nullptr;
435 429
436 return pDoc->GetPage(page_index); 430 return pDoc->GetPage(page_index);
437 } 431 }
438 432
439 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) { 433 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) {
440 if (!page) 434 CPDFXFA_Page* pPage = static_cast<CPDFXFA_Page*>(page);
441 return 0.0; 435 return pPage ? pPage->GetPageWidth() : 0.0;
442 return ((CPDFXFA_Page*)page)->GetPageWidth();
443 } 436 }
444 437
445 DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) { 438 DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) {
446 if (!page) 439 CPDFXFA_Page* pPage = static_cast<CPDFXFA_Page*>(page);
447 return 0.0; 440 return pPage ? pPage->GetPageHeight() : 0.0;
448 return ((CPDFXFA_Page*)page)->GetPageHeight();
449 } 441 }
450 442
451 void DropContext(void* data) { 443 void DropContext(void* data) {
452 delete (CRenderContext*)data; 444 delete (CRenderContext*)data;
453 } 445 }
454 446
455 #if defined(_DEBUG) || defined(DEBUG) 447 #if defined(_DEBUG) || defined(DEBUG)
456 #define DEBUG_TRACE 448 #define DEBUG_TRACE
457 #endif 449 #endif
458 450
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
1011 } 1003 }
1012 1004
1013 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, 1005 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document,
1014 int index, 1006 int index,
1015 void* buffer, 1007 void* buffer,
1016 long* buflen) { 1008 long* buflen) {
1017 if (!buffer) 1009 if (!buffer)
1018 *buflen = 0; 1010 *buflen = 0;
1019 if (!document || index < 0) 1011 if (!document || index < 0)
1020 return NULL; 1012 return NULL;
1021 CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc();
1022 1013
1014 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
1023 CPDF_Dictionary* pRoot = pDoc->GetRoot(); 1015 CPDF_Dictionary* pRoot = pDoc->GetRoot();
1024 if (!pRoot) 1016 if (!pRoot)
1025 return NULL; 1017 return NULL;
1026 1018
1027 CPDF_Object* pDestObj = NULL; 1019 CPDF_Object* pDestObj = NULL;
1028 CFX_ByteString bsName; 1020 CFX_ByteString bsName;
1029 CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests")); 1021 CPDF_NameTree nameTree(pDoc, FX_BSTRC("Dests"));
1030 int count = nameTree.GetCount(); 1022 int count = nameTree.GetCount();
1031 if (index >= count) { 1023 if (index >= count) {
1032 CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests")); 1024 CPDF_Dictionary* pDest = pRoot->GetDict(FX_BSTRC("Dests"));
(...skipping 30 matching lines...) Expand all
1063 if (!buffer) { 1055 if (!buffer) {
1064 *buflen = len; 1056 *buflen = len;
1065 } else if (*buflen >= len) { 1057 } else if (*buflen >= len) {
1066 memcpy(buffer, utf16Name.c_str(), len); 1058 memcpy(buffer, utf16Name.c_str(), len);
1067 *buflen = len; 1059 *buflen = len;
1068 } else { 1060 } else {
1069 *buflen = -1; 1061 *buflen = -1;
1070 } 1062 }
1071 return (FPDF_DEST)pDestObj; 1063 return (FPDF_DEST)pDestObj;
1072 } 1064 }
OLDNEW
« no previous file with comments | « fpdfsdk/src/fpdfeditpage.cpp ('k') | fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698