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

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

Issue 1477583002: Inflict PDF_ENABLE_XFA ifdefs on XFA fpdfsdk/ (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Remove fsdk_actionhandler.cpp Created 5 years 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/fpdftext.cpp ('k') | fpdfsdk/src/fpdfview_c_api_test.c » ('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 "public/fpdfview.h" 7 #include "public/fpdfview.h"
8 8
9 #ifdef PDF_ENABLE_XFA
9 #include "../include/fpdfxfa/fpdfxfa_app.h" 10 #include "../include/fpdfxfa/fpdfxfa_app.h"
10 #include "../include/fpdfxfa/fpdfxfa_doc.h" 11 #include "../include/fpdfxfa/fpdfxfa_doc.h"
11 #include "../include/fpdfxfa/fpdfxfa_page.h" 12 #include "../include/fpdfxfa/fpdfxfa_page.h"
12 #include "../include/fpdfxfa/fpdfxfa_util.h" 13 #include "../include/fpdfxfa/fpdfxfa_util.h"
13 #include "core/include/fpdfapi/fpdf_module.h" 14 #include "core/include/fpdfapi/fpdf_module.h"
15 #endif
14 #include "core/include/fxcodec/fx_codec.h" 16 #include "core/include/fxcodec/fx_codec.h"
15 #include "core/include/fxcrt/fx_safe_types.h" 17 #include "core/include/fxcrt/fx_safe_types.h"
16 #include "fpdfsdk/include/fsdk_define.h" 18 #include "fpdfsdk/include/fsdk_define.h"
17 #include "fpdfsdk/include/fsdk_mgr.h" 19 #include "fpdfsdk/include/fsdk_mgr.h"
18 #include "fpdfsdk/include/fsdk_rendercontext.h" 20 #include "fpdfsdk/include/fsdk_rendercontext.h"
19 #include "fpdfsdk/include/javascript/IJavaScript.h" 21 #include "fpdfsdk/include/javascript/IJavaScript.h"
20 #include "public/fpdf_ext.h" 22 #include "public/fpdf_ext.h"
23 #ifdef PDF_ENABLE_XFA
21 #include "public/fpdf_formfill.h" 24 #include "public/fpdf_formfill.h"
25 #endif
22 #include "public/fpdf_progressive.h" 26 #include "public/fpdf_progressive.h"
23 #include "third_party/base/nonstd_unique_ptr.h" 27 #include "third_party/base/nonstd_unique_ptr.h"
24 #include "third_party/base/numerics/safe_conversions_impl.h" 28 #include "third_party/base/numerics/safe_conversions_impl.h"
25 29
26 UnderlyingDocumentType* UnderlyingFromFPDFDocument(FPDF_DOCUMENT doc) { 30 UnderlyingDocumentType* UnderlyingFromFPDFDocument(FPDF_DOCUMENT doc) {
27 return static_cast<UnderlyingDocumentType*>(doc); 31 return static_cast<UnderlyingDocumentType*>(doc);
28 } 32 }
29 33
30 FPDF_DOCUMENT FPDFDocumentFromUnderlying(UnderlyingDocumentType* doc) { 34 FPDF_DOCUMENT FPDFDocumentFromUnderlying(UnderlyingDocumentType* doc) {
31 return static_cast<FPDF_DOCUMENT>(doc); 35 return static_cast<FPDF_DOCUMENT>(doc);
32 } 36 }
33 37
34 UnderlyingPageType* UnderlyingFromFPDFPage(FPDF_PAGE page) { 38 UnderlyingPageType* UnderlyingFromFPDFPage(FPDF_PAGE page) {
35 return static_cast<UnderlyingPageType*>(page); 39 return static_cast<UnderlyingPageType*>(page);
36 } 40 }
37 41
38 CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) { 42 CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) {
43 #ifndef PDF_ENABLE_XFA
44 return UnderlyingFromFPDFDocument(doc);
45 #else
39 return doc ? UnderlyingFromFPDFDocument(doc)->GetPDFDoc() : nullptr; 46 return doc ? UnderlyingFromFPDFDocument(doc)->GetPDFDoc() : nullptr;
47 #endif
40 } 48 }
41 49
42 FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document* doc) { 50 FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document* doc) {
51 #ifndef PDF_ENABLE_XFA
52 return FPDFDocumentFromUnderlying(doc);
53 #else
43 return doc ? FPDFDocumentFromUnderlying( 54 return doc ? FPDFDocumentFromUnderlying(
44 new CPDFXFA_Document(doc, CPDFXFA_App::GetInstance())) 55 new CPDFXFA_Document(doc, CPDFXFA_App::GetInstance()))
45 : nullptr; 56 : nullptr;
57 #endif
46 } 58 }
47 59
48 CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page) { 60 CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page) {
61 #ifndef PDF_ENABLE_XFA
62 return UnderlyingFromFPDFPage(page);
63 #else
49 return page ? UnderlyingFromFPDFPage(page)->GetPDFPage() : nullptr; 64 return page ? UnderlyingFromFPDFPage(page)->GetPDFPage() : nullptr;
50 } 65 }
51 66
52 CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) { 67 CFPDF_FileStream::CFPDF_FileStream(FPDF_FILEHANDLER* pFS) {
53 m_pFS = pFS; 68 m_pFS = pFS;
54 m_nCurPos = 0; 69 m_nCurPos = 0;
55 } 70 }
56 71
57 IFX_FileStream* CFPDF_FileStream::Retain() { 72 IFX_FileStream* CFPDF_FileStream::Retain() {
58 return this; 73 return this;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 return TRUE; 134 return TRUE;
120 } 135 }
121 return FALSE; 136 return FALSE;
122 } 137 }
123 138
124 FX_BOOL CFPDF_FileStream::Flush() { 139 FX_BOOL CFPDF_FileStream::Flush() {
125 if (!m_pFS || !m_pFS->Flush) 140 if (!m_pFS || !m_pFS->Flush)
126 return TRUE; 141 return TRUE;
127 142
128 return m_pFS->Flush(m_pFS->clientData) == 0; 143 return m_pFS->Flush(m_pFS->clientData) == 0;
144 #endif
129 } 145 }
130 146
131 CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) { 147 CPDF_CustomAccess::CPDF_CustomAccess(FPDF_FILEACCESS* pFileAccess) {
132 m_FileAccess = *pFileAccess; 148 m_FileAccess = *pFileAccess;
149 #ifdef PDF_ENABLE_XFA
133 m_BufferOffset = (FX_DWORD)-1; 150 m_BufferOffset = (FX_DWORD)-1;
134 } 151 }
135 152
136 FX_BOOL CPDF_CustomAccess::GetByte(FX_DWORD pos, uint8_t& ch) { 153 FX_BOOL CPDF_CustomAccess::GetByte(FX_DWORD pos, uint8_t& ch) {
137 if (pos >= m_FileAccess.m_FileLen) 154 if (pos >= m_FileAccess.m_FileLen)
138 return FALSE; 155 return FALSE;
139 if (m_BufferOffset == (FX_DWORD)-1 || pos < m_BufferOffset || 156 if (m_BufferOffset == (FX_DWORD)-1 || pos < m_BufferOffset ||
140 pos >= m_BufferOffset + 512) { 157 pos >= m_BufferOffset + 512) {
141 // Need to read from file access 158 // Need to read from file access
142 m_BufferOffset = pos; 159 m_BufferOffset = pos;
143 int size = 512; 160 int size = 512;
144 if (pos + 512 > m_FileAccess.m_FileLen) 161 if (pos + 512 > m_FileAccess.m_FileLen)
145 size = m_FileAccess.m_FileLen - pos; 162 size = m_FileAccess.m_FileLen - pos;
146 if (!m_FileAccess.m_GetBlock(m_FileAccess.m_Param, m_BufferOffset, m_Buffer, 163 if (!m_FileAccess.m_GetBlock(m_FileAccess.m_Param, m_BufferOffset, m_Buffer,
147 size)) 164 size))
148 return FALSE; 165 return FALSE;
149 } 166 }
150 ch = m_Buffer[pos - m_BufferOffset]; 167 ch = m_Buffer[pos - m_BufferOffset];
151 return TRUE; 168 return TRUE;
152 } 169 }
153 170
154 FX_BOOL CPDF_CustomAccess::GetBlock(FX_DWORD pos, 171 FX_BOOL CPDF_CustomAccess::GetBlock(FX_DWORD pos,
155 uint8_t* pBuf, 172 uint8_t* pBuf,
156 FX_DWORD size) { 173 FX_DWORD size) {
157 if (pos + size > m_FileAccess.m_FileLen) 174 if (pos + size > m_FileAccess.m_FileLen)
158 return FALSE; 175 return FALSE;
159 return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, pos, pBuf, size); 176 return m_FileAccess.m_GetBlock(m_FileAccess.m_Param, pos, pBuf, size);
177 #endif
160 } 178 }
161 179
162 FX_BOOL CPDF_CustomAccess::ReadBlock(void* buffer, 180 FX_BOOL CPDF_CustomAccess::ReadBlock(void* buffer,
163 FX_FILESIZE offset, 181 FX_FILESIZE offset,
164 size_t size) { 182 size_t size) {
165 if (offset < 0) { 183 if (offset < 0) {
166 return FALSE; 184 return FALSE;
167 } 185 }
168 FX_SAFE_FILESIZE newPos = 186 FX_SAFE_FILESIZE newPos =
169 pdfium::base::checked_cast<FX_FILESIZE, size_t>(size); 187 pdfium::base::checked_cast<FX_FILESIZE, size_t>(size);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
211 g_pCodecModule = new CCodec_ModuleMgr(); 229 g_pCodecModule = new CCodec_ModuleMgr();
212 230
213 CFX_GEModule::Create(cfg ? cfg->m_pUserFontPaths : nullptr); 231 CFX_GEModule::Create(cfg ? cfg->m_pUserFontPaths : nullptr);
214 CFX_GEModule::Get()->SetCodecModule(g_pCodecModule); 232 CFX_GEModule::Get()->SetCodecModule(g_pCodecModule);
215 233
216 CPDF_ModuleMgr::Create(); 234 CPDF_ModuleMgr::Create();
217 CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get(); 235 CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get();
218 pModuleMgr->SetCodecModule(g_pCodecModule); 236 pModuleMgr->SetCodecModule(g_pCodecModule);
219 pModuleMgr->InitPageModule(); 237 pModuleMgr->InitPageModule();
220 pModuleMgr->InitRenderModule(); 238 pModuleMgr->InitRenderModule();
239 #ifndef PDF_ENABLE_XFA
240 pModuleMgr->LoadEmbeddedGB1CMaps();
241 pModuleMgr->LoadEmbeddedJapan1CMaps();
242 pModuleMgr->LoadEmbeddedCNS1CMaps();
243 pModuleMgr->LoadEmbeddedKorea1CMaps();
244 #else
221 CPDFXFA_App::GetInstance()->Initialize(); 245 CPDFXFA_App::GetInstance()->Initialize();
246 #endif
222 if (cfg && cfg->version >= 2) 247 if (cfg && cfg->version >= 2)
223 IJS_Runtime::Initialize(cfg->m_v8EmbedderSlot, cfg->m_pIsolate); 248 IJS_Runtime::Initialize(cfg->m_v8EmbedderSlot, cfg->m_pIsolate);
224 } 249 }
225 250
226 DLLEXPORT void STDCALL FPDF_DestroyLibrary() { 251 DLLEXPORT void STDCALL FPDF_DestroyLibrary() {
252 #ifdef PDF_ENABLE_XFA
227 CPDFXFA_App::ReleaseInstance(); 253 CPDFXFA_App::ReleaseInstance();
254 #endif
228 CPDF_ModuleMgr::Destroy(); 255 CPDF_ModuleMgr::Destroy();
229 CFX_GEModule::Destroy(); 256 CFX_GEModule::Destroy();
230 257
231 delete g_pCodecModule; 258 delete g_pCodecModule;
232 g_pCodecModule = nullptr; 259 g_pCodecModule = nullptr;
233 } 260 }
234 261
235 #ifndef _WIN32 262 #ifndef _WIN32
236 int g_LastError; 263 int g_LastError;
237 void SetLastError(int err) { 264 void SetLastError(int err) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 305
279 CPDF_Parser* pParser = new CPDF_Parser; 306 CPDF_Parser* pParser = new CPDF_Parser;
280 pParser->SetPassword(password); 307 pParser->SetPassword(password);
281 308
282 FX_DWORD err_code = pParser->StartParse(pFileAccess); 309 FX_DWORD err_code = pParser->StartParse(pFileAccess);
283 if (err_code) { 310 if (err_code) {
284 delete pParser; 311 delete pParser;
285 ProcessParseError(err_code); 312 ProcessParseError(err_code);
286 return NULL; 313 return NULL;
287 } 314 }
315 #ifndef PDF_ENABLE_XFA
316 return pParser->GetDocument();
317 #else
288 CPDF_Document* pPDFDoc = pParser->GetDocument(); 318 CPDF_Document* pPDFDoc = pParser->GetDocument();
289 if (!pPDFDoc) 319 if (!pPDFDoc)
290 return NULL; 320 return NULL;
291 321
292 CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); 322 CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance();
293 return new CPDFXFA_Document(pPDFDoc, pProvider); 323 return new CPDFXFA_Document(pPDFDoc, pProvider);
294 } 324 }
295 325
296 DLLEXPORT FPDF_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document, 326 DLLEXPORT FPDF_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document,
297 int* docType) { 327 int* docType) {
(...skipping 22 matching lines...) Expand all
320 if (bDynamicXFA) 350 if (bDynamicXFA)
321 *docType = DOCTYPE_DYNAMIC_XFA; 351 *docType = DOCTYPE_DYNAMIC_XFA;
322 else 352 else
323 *docType = DOCTYPE_STATIC_XFA; 353 *docType = DOCTYPE_STATIC_XFA;
324 354
325 return TRUE; 355 return TRUE;
326 } 356 }
327 357
328 DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) { 358 DLLEXPORT FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document) {
329 return document && (static_cast<CPDFXFA_Document*>(document))->LoadXFADoc(); 359 return document && (static_cast<CPDFXFA_Document*>(document))->LoadXFADoc();
360 #endif
330 } 361 }
331 362
332 class CMemFile final : public IFX_FileRead { 363 class CMemFile final : public IFX_FileRead {
333 public: 364 public:
334 CMemFile(uint8_t* pBuf, FX_FILESIZE size) : m_pBuf(pBuf), m_size(size) {} 365 CMemFile(uint8_t* pBuf, FX_FILESIZE size) : m_pBuf(pBuf), m_size(size) {}
335 366
336 void Release() override { delete this; } 367 void Release() override { delete this; }
337 FX_FILESIZE GetSize() override { return m_size; } 368 FX_FILESIZE GetSize() override { return m_size; }
338 FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override { 369 FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
339 if (offset < 0) { 370 if (offset < 0) {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 439
409 *fileVersion = pParser->GetFileVersion(); 440 *fileVersion = pParser->GetFileVersion();
410 return TRUE; 441 return TRUE;
411 } 442 }
412 443
413 // jabdelmalek: changed return type from FX_DWORD to build on Linux (and match 444 // jabdelmalek: changed return type from FX_DWORD to build on Linux (and match
414 // header). 445 // header).
415 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) { 446 DLLEXPORT unsigned long STDCALL FPDF_GetDocPermissions(FPDF_DOCUMENT document) {
416 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); 447 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
417 if (!pDoc) 448 if (!pDoc)
449 #ifndef PDF_ENABLE_XFA
450 return 0;
451 #else
418 return (FX_DWORD)-1; 452 return (FX_DWORD)-1;
453 #endif
419 454
420 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); 455 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict();
421 return pDict ? pDict->GetInteger("P") : (FX_DWORD)-1; 456 return pDict ? pDict->GetInteger("P") : (FX_DWORD)-1;
422 } 457 }
423 458
424 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) { 459 DLLEXPORT int STDCALL FPDF_GetSecurityHandlerRevision(FPDF_DOCUMENT document) {
425 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); 460 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
426 if (!pDoc) 461 if (!pDoc)
427 return -1; 462 return -1;
428 463
429 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict(); 464 CPDF_Dictionary* pDict = pDoc->GetParser()->GetEncryptDict();
430 return pDict ? pDict->GetInteger("R") : -1; 465 return pDict ? pDict->GetInteger("R") : -1;
431 } 466 }
432 467
433 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) { 468 DLLEXPORT int STDCALL FPDF_GetPageCount(FPDF_DOCUMENT document) {
434 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); 469 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document);
435 return pDoc ? pDoc->GetPageCount() : 0; 470 return pDoc ? pDoc->GetPageCount() : 0;
436 } 471 }
437 472
438 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, 473 DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document,
439 int page_index) { 474 int page_index) {
440 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); 475 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document);
441 if (!pDoc) 476 if (!pDoc)
442 return nullptr; 477 return nullptr;
443 478
444 if (page_index < 0 || page_index >= pDoc->GetPageCount()) 479 if (page_index < 0 || page_index >= pDoc->GetPageCount())
445 return nullptr; 480 return nullptr;
446 481
482 #ifndef PDF_ENABLE_XFA
483 CPDF_Dictionary* pDict = pDoc->GetPage(page_index);
484 if (pDict == NULL)
485 return NULL;
486 CPDF_Page* pPage = new CPDF_Page;
487 pPage->Load(pDoc, pDict);
488 pPage->ParseContent();
489 return pPage;
490 #else
447 return pDoc->GetPage(page_index); 491 return pDoc->GetPage(page_index);
492 #endif
448 } 493 }
449 494
450 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) { 495 DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) {
451 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page); 496 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
452 return pPage ? pPage->GetPageWidth() : 0.0; 497 return pPage ? pPage->GetPageWidth() : 0.0;
453 } 498 }
454 499
455 DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) { 500 DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) {
456 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page); 501 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
457 return pPage ? pPage->GetPageHeight() : 0.0; 502 return pPage ? pPage->GetPageHeight() : 0.0;
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
662 FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y, 707 FPDF_RenderPage_Retail(pContext, page, start_x, start_y, size_x, size_y,
663 rotate, flags, TRUE, NULL); 708 rotate, flags, TRUE, NULL);
664 709
665 delete pContext; 710 delete pContext;
666 pPage->RemovePrivateData((void*)1); 711 pPage->RemovePrivateData((void*)1);
667 } 712 }
668 713
669 DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) { 714 DLLEXPORT void STDCALL FPDF_ClosePage(FPDF_PAGE page) {
670 if (!page) 715 if (!page)
671 return; 716 return;
717 #ifndef PDF_ENABLE_XFA
718 CPDFSDK_PageView* pPageView =
719 (CPDFSDK_PageView*)(((CPDF_Page*)page))->GetPrivateData((void*)page);
720 if (pPageView && pPageView->IsLocked()) {
721 pPageView->TakeOverPage();
722 return;
723 }
724 delete (CPDF_Page*)page;
725 #else
672 726
673 CPDFXFA_Page* pPage = (CPDFXFA_Page*)page; 727 CPDFXFA_Page* pPage = (CPDFXFA_Page*)page;
674 pPage->Release(); 728 pPage->Release();
729 #endif
675 } 730 }
676 731
677 DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) { 732 DLLEXPORT void STDCALL FPDF_CloseDocument(FPDF_DOCUMENT document) {
733 #ifndef PDF_ENABLE_XFA
734 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
735 if (!pDoc)
736 return;
737
738 CPDF_Parser* pParser = (CPDF_Parser*)pDoc->GetParser();
739 if (!pParser) {
740 delete pDoc;
741 return;
742 }
743 delete pParser;
744 #else
678 delete CPDFDocumentFromFPDFDocument(document); 745 delete CPDFDocumentFromFPDFDocument(document);
746 #endif
679 } 747 }
680 748
681 DLLEXPORT unsigned long STDCALL FPDF_GetLastError() { 749 DLLEXPORT unsigned long STDCALL FPDF_GetLastError() {
682 return GetLastError(); 750 return GetLastError();
683 } 751 }
684 752
685 DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page, 753 DLLEXPORT void STDCALL FPDF_DeviceToPage(FPDF_PAGE page,
686 int start_x, 754 int start_x,
687 int start_y, 755 int start_y,
688 int size_x, 756 int size_x,
689 int size_y, 757 int size_y,
690 int rotate, 758 int rotate,
691 int device_x, 759 int device_x,
692 int device_y, 760 int device_y,
693 double* page_x, 761 double* page_x,
694 double* page_y) { 762 double* page_y) {
695 if (page == NULL || page_x == NULL || page_y == NULL) 763 if (page == NULL || page_x == NULL || page_y == NULL)
696 return; 764 return;
697 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page); 765 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
766 #ifndef PDF_ENABLE_XFA
767
768 CPDF_Matrix page2device;
769 pPage->GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y,
770 rotate);
771 CPDF_Matrix device2page;
772 device2page.SetReverse(page2device);
773
774 FX_FLOAT page_x_f, page_y_f;
775 device2page.Transform((FX_FLOAT)(device_x), (FX_FLOAT)(device_y), page_x_f,
776 page_y_f);
777
778 *page_x = (page_x_f);
779 *page_y = (page_y_f);
780 #else
698 pPage->DeviceToPage(start_x, start_y, size_x, size_y, rotate, device_x, 781 pPage->DeviceToPage(start_x, start_y, size_x, size_y, rotate, device_x,
699 device_y, page_x, page_y); 782 device_y, page_x, page_y);
783 #endif
700 } 784 }
701 785
702 DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page, 786 DLLEXPORT void STDCALL FPDF_PageToDevice(FPDF_PAGE page,
703 int start_x, 787 int start_x,
704 int start_y, 788 int start_y,
705 int size_x, 789 int size_x,
706 int size_y, 790 int size_y,
707 int rotate, 791 int rotate,
708 double page_x, 792 double page_x,
709 double page_y, 793 double page_y,
710 int* device_x, 794 int* device_x,
711 int* device_y) { 795 int* device_y) {
712 if (!device_x || !device_y) 796 if (!device_x || !device_y)
713 return; 797 return;
714 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page); 798 UnderlyingPageType* pPage = UnderlyingFromFPDFPage(page);
715 if (!pPage) 799 if (!pPage)
716 return; 800 return;
801 #ifndef PDF_ENABLE_XFA
802 CPDF_Matrix page2device;
803 pPage->GetDisplayMatrix(page2device, start_x, start_y, size_x, size_y,
804 rotate);
805
806 FX_FLOAT device_x_f, device_y_f;
807 page2device.Transform(((FX_FLOAT)page_x), ((FX_FLOAT)page_y), device_x_f,
808 device_y_f);
809
810 *device_x = FXSYS_round(device_x_f);
811 *device_y = FXSYS_round(device_y_f);
812 #else
717 pPage->PageToDevice(start_x, start_y, size_x, size_y, rotate, page_x, page_y, 813 pPage->PageToDevice(start_x, start_y, size_x, size_y, rotate, page_x, page_y,
718 device_x, device_y); 814 device_x, device_y);
815 #endif
719 } 816 }
720 817
721 DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width, 818 DLLEXPORT FPDF_BITMAP STDCALL FPDFBitmap_Create(int width,
722 int height, 819 int height,
723 int alpha) { 820 int alpha) {
724 nonstd::unique_ptr<CFX_DIBitmap> pBitmap(new CFX_DIBitmap); 821 nonstd::unique_ptr<CFX_DIBitmap> pBitmap(new CFX_DIBitmap);
725 if (!pBitmap->Create(width, height, alpha ? FXDIB_Argb : FXDIB_Rgb32)) { 822 if (!pBitmap->Create(width, height, alpha ? FXDIB_Argb : FXDIB_Rgb32)) {
726 return NULL; 823 return NULL;
727 } 824 }
728 return pBitmap.release(); 825 return pBitmap.release();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 if (flags & FPDF_LCD_TEXT) 920 if (flags & FPDF_LCD_TEXT)
824 pContext->m_pOptions->m_Flags |= RENDER_CLEARTYPE; 921 pContext->m_pOptions->m_Flags |= RENDER_CLEARTYPE;
825 else 922 else
826 pContext->m_pOptions->m_Flags &= ~RENDER_CLEARTYPE; 923 pContext->m_pOptions->m_Flags &= ~RENDER_CLEARTYPE;
827 if (flags & FPDF_NO_NATIVETEXT) 924 if (flags & FPDF_NO_NATIVETEXT)
828 pContext->m_pOptions->m_Flags |= RENDER_NO_NATIVETEXT; 925 pContext->m_pOptions->m_Flags |= RENDER_NO_NATIVETEXT;
829 if (flags & FPDF_RENDER_LIMITEDIMAGECACHE) 926 if (flags & FPDF_RENDER_LIMITEDIMAGECACHE)
830 pContext->m_pOptions->m_Flags |= RENDER_LIMITEDIMAGECACHE; 927 pContext->m_pOptions->m_Flags |= RENDER_LIMITEDIMAGECACHE;
831 if (flags & FPDF_RENDER_FORCEHALFTONE) 928 if (flags & FPDF_RENDER_FORCEHALFTONE)
832 pContext->m_pOptions->m_Flags |= RENDER_FORCE_HALFTONE; 929 pContext->m_pOptions->m_Flags |= RENDER_FORCE_HALFTONE;
930 #ifndef PDF_ENABLE_XFA
931 if (flags & FPDF_RENDER_NO_SMOOTHTEXT)
932 pContext->m_pOptions->m_Flags |= RENDER_NOTEXTSMOOTH;
933 if (flags & FPDF_RENDER_NO_SMOOTHIMAGE)
934 pContext->m_pOptions->m_Flags |= RENDER_NOIMAGESMOOTH;
935 if (flags & FPDF_RENDER_NO_SMOOTHPATH)
936 pContext->m_pOptions->m_Flags |= RENDER_NOPATHSMOOTH;
937 #endif
833 // Grayscale output 938 // Grayscale output
834 if (flags & FPDF_GRAYSCALE) { 939 if (flags & FPDF_GRAYSCALE) {
835 pContext->m_pOptions->m_ColorMode = RENDER_COLOR_GRAY; 940 pContext->m_pOptions->m_ColorMode = RENDER_COLOR_GRAY;
836 pContext->m_pOptions->m_ForeColor = 0; 941 pContext->m_pOptions->m_ForeColor = 0;
837 pContext->m_pOptions->m_BackColor = 0xffffff; 942 pContext->m_pOptions->m_BackColor = 0xffffff;
838 } 943 }
839 const CPDF_OCContext::UsageType usage = 944 const CPDF_OCContext::UsageType usage =
840 (flags & FPDF_PRINTING) ? CPDF_OCContext::Print : CPDF_OCContext::View; 945 (flags & FPDF_PRINTING) ? CPDF_OCContext::Print : CPDF_OCContext::View;
841 pContext->m_pOptions->m_AddFlags = flags >> 8; 946 pContext->m_pOptions->m_AddFlags = flags >> 8;
842 pContext->m_pOptions->m_pOCContext = 947 pContext->m_pOptions->m_pOCContext =
(...skipping 29 matching lines...) Expand all
872 } 977 }
873 978
874 DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, 979 DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document,
875 int page_index, 980 int page_index,
876 double* width, 981 double* width,
877 double* height) { 982 double* height) {
878 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document); 983 UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document);
879 if (!pDoc) 984 if (!pDoc)
880 return FALSE; 985 return FALSE;
881 986
987 #ifndef PDF_ENABLE_XFA
988 CPDF_Dictionary* pDict = pDoc->GetPage(page_index);
989 if (!pDict)
990 #else
882 int count = pDoc->GetPageCount(); 991 int count = pDoc->GetPageCount();
883 if (page_index < 0 || page_index >= count) 992 if (page_index < 0 || page_index >= count)
884 return FALSE; 993 return FALSE;
885 994
886 CPDFXFA_Page* pPage = pDoc->GetPage(page_index); 995 CPDFXFA_Page* pPage = pDoc->GetPage(page_index);
887 if (!pPage) 996 if (!pPage)
997 #endif
888 return FALSE; 998 return FALSE;
889 999
1000 #ifndef PDF_ENABLE_XFA
1001 CPDF_Page page;
1002 page.Load(pDoc, pDict);
1003 *width = page.GetPageWidth();
1004 *height = page.GetPageHeight();
1005 #else
890 *width = pPage->GetPageWidth(); 1006 *width = pPage->GetPageWidth();
891 *height = pPage->GetPageHeight(); 1007 *height = pPage->GetPageHeight();
1008 #endif
892 1009
893 return TRUE; 1010 return TRUE;
894 } 1011 }
895 1012
896 DLLEXPORT FPDF_BOOL STDCALL 1013 DLLEXPORT FPDF_BOOL STDCALL
897 FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) { 1014 FPDF_VIEWERREF_GetPrintScaling(FPDF_DOCUMENT document) {
898 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); 1015 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
899 if (!pDoc) 1016 if (!pDoc)
900 return TRUE; 1017 return TRUE;
901 CPDF_ViewerPreferences viewRef(pDoc); 1018 CPDF_ViewerPreferences viewRef(pDoc);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
958 return nullptr; 1075 return nullptr;
959 1076
960 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); 1077 CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
961 if (!pDoc) 1078 if (!pDoc)
962 return nullptr; 1079 return nullptr;
963 1080
964 CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests")); 1081 CPDF_NameTree name_tree(pDoc, FX_BSTRC("Dests"));
965 return name_tree.LookupNamedDest(pDoc, name); 1082 return name_tree.LookupNamedDest(pDoc, name);
966 } 1083 }
967 1084
1085 #ifdef PDF_ENABLE_XFA
968 FPDF_RESULT FPDF_BStr_Init(FPDF_BSTR* str) { 1086 FPDF_RESULT FPDF_BStr_Init(FPDF_BSTR* str) {
969 if (!str) 1087 if (!str)
970 return -1; 1088 return -1;
971 1089
972 FXSYS_memset(str, 0, sizeof(FPDF_BSTR)); 1090 FXSYS_memset(str, 0, sizeof(FPDF_BSTR));
973 return 0; 1091 return 0;
974 } 1092 }
975 1093
976 FPDF_RESULT FPDF_BStr_Set(FPDF_BSTR* str, FPDF_LPCSTR bstr, int length) { 1094 FPDF_RESULT FPDF_BStr_Set(FPDF_BSTR* str, FPDF_LPCSTR bstr, int length) {
977 if (!str) 1095 if (!str)
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 return -1; 1128 return -1;
1011 1129
1012 if (str->str) { 1130 if (str->str) {
1013 FX_Free(str->str); 1131 FX_Free(str->str);
1014 str->str = NULL; 1132 str->str = NULL;
1015 } 1133 }
1016 str->len = 0; 1134 str->len = 0;
1017 return 0; 1135 return 0;
1018 } 1136 }
1019 1137
1138 #endif
1020 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, 1139 DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document,
1021 int index, 1140 int index,
1022 void* buffer, 1141 void* buffer,
1023 long* buflen) { 1142 long* buflen) {
1024 if (!buffer) 1143 if (!buffer)
1025 *buflen = 0; 1144 *buflen = 0;
1026 1145
1027 if (index < 0) 1146 if (index < 0)
1028 return nullptr; 1147 return nullptr;
1029 1148
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1075 if (!buffer) { 1194 if (!buffer) {
1076 *buflen = len; 1195 *buflen = len;
1077 } else if (*buflen >= len) { 1196 } else if (*buflen >= len) {
1078 memcpy(buffer, utf16Name.c_str(), len); 1197 memcpy(buffer, utf16Name.c_str(), len);
1079 *buflen = len; 1198 *buflen = len;
1080 } else { 1199 } else {
1081 *buflen = -1; 1200 *buflen = -1;
1082 } 1201 }
1083 return (FPDF_DEST)pDestObj; 1202 return (FPDF_DEST)pDestObj;
1084 } 1203 }
OLDNEW
« no previous file with comments | « fpdfsdk/src/fpdftext.cpp ('k') | fpdfsdk/src/fpdfview_c_api_test.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698