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

Side by Side Diff: fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp

Issue 1799773002: Move fpdfsdk/src up to fpdfsdk/. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Rebase to master Created 4 years, 9 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/fpdfxfa/fpdfxfa_app.cpp ('k') | fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7 #include "core/include/fpdfapi/cpdf_array.h"
8 #include "core/include/fpdfapi/cpdf_document.h"
9 #include "core/include/fpdfapi/cpdf_string.h"
10 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h"
11 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h"
12 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_page.h"
13 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h"
14 #include "fpdfsdk/include/fsdk_define.h"
15 #include "fpdfsdk/include/fsdk_mgr.h"
16 #include "fpdfsdk/include/javascript/IJavaScript.h"
17 #include "public/fpdf_formfill.h"
18
19 #define IDS_XFA_Validate_Input \
20 "At least one required field was empty. Please fill in the required " \
21 "fields\r\n(highlighted) before continuing."
22
23 // submit
24 #define FXFA_CONFIG 0x00000001
25 #define FXFA_TEMPLATE 0x00000010
26 #define FXFA_LOCALESET 0x00000100
27 #define FXFA_DATASETS 0x00001000
28 #define FXFA_XMPMETA 0x00010000
29 #define FXFA_XFDF 0x00100000
30 #define FXFA_FORM 0x01000000
31 #define FXFA_PDF 0x10000000
32
33 #ifndef _WIN32
34 extern void SetLastError(int err);
35
36 extern int GetLastError();
37 #endif
38
39 CPDFXFA_Document::CPDFXFA_Document(CPDF_Document* pPDFDoc,
40 CPDFXFA_App* pProvider)
41 : m_iDocType(DOCTYPE_PDF),
42 m_pPDFDoc(pPDFDoc),
43 m_pSDKDoc(nullptr),
44 m_pXFADoc(nullptr),
45 m_pXFADocView(nullptr),
46 m_pApp(pProvider),
47 m_pJSContext(nullptr) {
48 }
49
50 CPDFXFA_Document::~CPDFXFA_Document() {
51 if (m_pXFADoc) {
52 IXFA_App* pApp = m_pApp->GetXFAApp();
53 if (pApp) {
54 IXFA_DocHandler* pDocHandler = pApp->GetDocHandler();
55 if (pDocHandler) {
56 CloseXFADoc(pDocHandler);
57 }
58 }
59 delete m_pXFADoc;
60 }
61 if (m_pJSContext && m_pSDKDoc && m_pSDKDoc->GetEnv())
62 m_pSDKDoc->GetEnv()->GetJSRuntime()->ReleaseContext(m_pJSContext);
63 delete m_pSDKDoc;
64 if (m_pPDFDoc) {
65 CPDF_Parser* pParser = m_pPDFDoc->GetParser();
66 if (pParser)
67 delete pParser;
68 else
69 delete m_pPDFDoc;
70 }
71 }
72
73 FX_BOOL CPDFXFA_Document::LoadXFADoc() {
74 if (!m_pPDFDoc)
75 return FALSE;
76
77 m_XFAPageList.RemoveAll();
78
79 IXFA_App* pApp = m_pApp->GetXFAApp();
80 if (!pApp)
81 return FALSE;
82
83 m_pXFADoc = pApp->CreateDoc(this, m_pPDFDoc);
84 if (!m_pXFADoc) {
85 SetLastError(FPDF_ERR_XFALOAD);
86 return FALSE;
87 }
88
89 IXFA_DocHandler* pDocHandler = pApp->GetDocHandler();
90 if (!pDocHandler) {
91 SetLastError(FPDF_ERR_XFALOAD);
92 return FALSE;
93 }
94
95 pDocHandler->StartLoad(m_pXFADoc);
96 int iStatus = pDocHandler->DoLoad(m_pXFADoc, NULL);
97 if (iStatus != XFA_PARSESTATUS_Done) {
98 CloseXFADoc(pDocHandler);
99 SetLastError(FPDF_ERR_XFALOAD);
100 return FALSE;
101 }
102 pDocHandler->StopLoad(m_pXFADoc);
103 pDocHandler->SetJSERuntime(m_pXFADoc, m_pApp->GetJSERuntime());
104
105 if (pDocHandler->GetDocType(m_pXFADoc) == XFA_DOCTYPE_Dynamic)
106 m_iDocType = DOCTYPE_DYNAMIC_XFA;
107 else
108 m_iDocType = DOCTYPE_STATIC_XFA;
109
110 m_pXFADocView = pDocHandler->CreateDocView(m_pXFADoc, XFA_DOCVIEW_View);
111 if (m_pXFADocView->StartLayout() < 0) {
112 CloseXFADoc(pDocHandler);
113 SetLastError(FPDF_ERR_XFALAYOUT);
114 return FALSE;
115 }
116
117 m_pXFADocView->DoLayout(NULL);
118 m_pXFADocView->StopLayout();
119 return TRUE;
120 }
121
122 int CPDFXFA_Document::GetPageCount() {
123 if (!m_pPDFDoc && !m_pXFADoc)
124 return 0;
125
126 switch (m_iDocType) {
127 case DOCTYPE_PDF:
128 case DOCTYPE_STATIC_XFA:
129 if (m_pPDFDoc)
130 return m_pPDFDoc->GetPageCount();
131 case DOCTYPE_DYNAMIC_XFA:
132 if (m_pXFADoc)
133 return m_pXFADocView->CountPageViews();
134 default:
135 return 0;
136 }
137
138 return 0;
139 }
140
141 CPDFXFA_Page* CPDFXFA_Document::GetPage(int page_index) {
142 if (page_index < 0)
143 return nullptr;
144 CPDFXFA_Page* pPage = nullptr;
145 int nCount = m_XFAPageList.GetSize();
146 if (nCount > 0 && page_index < nCount) {
147 pPage = m_XFAPageList.GetAt(page_index);
148 if (pPage)
149 pPage->AddRef();
150 } else {
151 m_XFAPageList.SetSize(GetPageCount());
152 }
153 if (pPage)
154 return pPage;
155 pPage = new CPDFXFA_Page(this, page_index);
156 if (!pPage->LoadPage()) {
157 delete pPage;
158 return nullptr;
159 }
160 m_XFAPageList.SetAt(page_index, pPage);
161 return pPage;
162 }
163
164 CPDFXFA_Page* CPDFXFA_Document::GetPage(IXFA_PageView* pPage) {
165 if (!pPage)
166 return NULL;
167
168 if (!m_pXFADoc)
169 return NULL;
170
171 if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
172 return NULL;
173
174 int nSize = m_XFAPageList.GetSize();
175 for (int i = 0; i < nSize; i++) {
176 CPDFXFA_Page* pTempPage = m_XFAPageList.GetAt(i);
177 if (!pTempPage)
178 continue;
179 if (pTempPage->GetXFAPageView() && pTempPage->GetXFAPageView() == pPage)
180 return pTempPage;
181 }
182
183 return NULL;
184 }
185
186 void CPDFXFA_Document::RemovePage(CPDFXFA_Page* page) {
187 m_XFAPageList.SetAt(page->GetPageIndex(), NULL);
188 }
189
190 CPDFSDK_Document* CPDFXFA_Document::GetSDKDocument(
191 CPDFDoc_Environment* pFormFillEnv) {
192 if (!m_pSDKDoc && pFormFillEnv)
193 m_pSDKDoc = new CPDFSDK_Document(this, pFormFillEnv);
194 return m_pSDKDoc;
195 }
196
197 void CPDFXFA_Document::FXRect2PDFRect(const CFX_RectF& fxRectF,
198 CFX_FloatRect& pdfRect) {
199 pdfRect.left = fxRectF.left;
200 pdfRect.top = fxRectF.bottom();
201 pdfRect.right = fxRectF.right();
202 pdfRect.bottom = fxRectF.top;
203 }
204
205 void CPDFXFA_Document::SetChangeMark(IXFA_Doc* hDoc) {
206 if (hDoc == m_pXFADoc && m_pSDKDoc) {
207 m_pSDKDoc->SetChangeMark();
208 }
209 }
210
211 FX_BOOL CPDFXFA_Document::GetChangeMark(IXFA_Doc* hDoc) {
212 if (hDoc == m_pXFADoc && m_pSDKDoc)
213 return m_pSDKDoc->GetChangeMark();
214 return FALSE;
215 }
216
217 void CPDFXFA_Document::InvalidateRect(IXFA_PageView* pPageView,
218 const CFX_RectF& rt,
219 FX_DWORD dwFlags /* = 0 */) {
220 if (!m_pXFADoc || !m_pSDKDoc)
221 return;
222
223 if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
224 return;
225
226 CFX_FloatRect rcPage;
227 FXRect2PDFRect(rt, rcPage);
228
229 CPDFXFA_Page* pPage = GetPage(pPageView);
230
231 if (pPage == NULL)
232 return;
233
234 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
235 if (!pEnv)
236 return;
237
238 pEnv->FFI_Invalidate((FPDF_PAGE)pPage, rcPage.left, rcPage.bottom,
239 rcPage.right, rcPage.top);
240 }
241
242 void CPDFXFA_Document::InvalidateRect(IXFA_Widget* hWidget,
243 FX_DWORD dwFlags /* = 0 */) {
244 if (!hWidget)
245 return;
246
247 if (!m_pXFADoc || !m_pSDKDoc || !m_pXFADocView)
248 return;
249
250 if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
251 return;
252
253 IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler();
254 if (!pWidgetHandler)
255 return;
256
257 IXFA_PageView* pPageView = pWidgetHandler->GetPageView(hWidget);
258 if (!pPageView)
259 return;
260
261 CFX_RectF rect;
262 pWidgetHandler->GetRect(hWidget, rect);
263 InvalidateRect(pPageView, rect, dwFlags);
264 }
265
266 void CPDFXFA_Document::DisplayCaret(IXFA_Widget* hWidget,
267 FX_BOOL bVisible,
268 const CFX_RectF* pRtAnchor) {
269 if (!hWidget || pRtAnchor == NULL)
270 return;
271
272 if (!m_pXFADoc || !m_pSDKDoc || !m_pXFADocView)
273 return;
274
275 if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
276 return;
277
278 IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler();
279 if (!pWidgetHandler)
280 return;
281
282 IXFA_PageView* pPageView = pWidgetHandler->GetPageView(hWidget);
283 if (!pPageView)
284 return;
285
286 CPDFXFA_Page* pPage = GetPage(pPageView);
287
288 if (pPage == NULL)
289 return;
290
291 CFX_FloatRect rcCaret;
292 FXRect2PDFRect(*pRtAnchor, rcCaret);
293
294 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
295 if (!pEnv)
296 return;
297
298 pEnv->FFI_DisplayCaret((FPDF_PAGE)pPage, bVisible, rcCaret.left, rcCaret.top,
299 rcCaret.right, rcCaret.bottom);
300 }
301
302 FX_BOOL CPDFXFA_Document::GetPopupPos(IXFA_Widget* hWidget,
303 FX_FLOAT fMinPopup,
304 FX_FLOAT fMaxPopup,
305 const CFX_RectF& rtAnchor,
306 CFX_RectF& rtPopup) {
307 if (NULL == hWidget) {
308 return FALSE;
309 }
310 IXFA_PageView* pXFAPageView =
311 m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget);
312 if (NULL == pXFAPageView) {
313 return FALSE;
314 }
315 CPDFXFA_Page* pPage = GetPage(pXFAPageView);
316 if (pPage == NULL)
317 return FALSE;
318
319 CXFA_WidgetAcc* pWidgetAcc =
320 m_pXFADocView->GetWidgetHandler()->GetDataAcc(hWidget);
321
322 int nRotate = 0;
323 #ifdef PDF_ENABLE_XFA
324 nRotate = pWidgetAcc->GetRotate();
325 #endif
326
327 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
328 if (pEnv == NULL)
329 return FALSE;
330 FS_RECTF pageViewRect;
331 pEnv->FFI_GetPageViewRect(pPage, pageViewRect);
332
333 CFX_FloatRect rcAnchor;
334
335 rcAnchor.left = rtAnchor.left;
336 rcAnchor.top = rtAnchor.bottom();
337 rcAnchor.right = rtAnchor.right();
338 rcAnchor.bottom = rtAnchor.top;
339
340 int t1, t2, t;
341 FX_DWORD dwPos;
342 FX_FLOAT fPoupHeight;
343 switch (nRotate) {
344 case 90: {
345 t1 = (int)(pageViewRect.right - rcAnchor.right);
346 t2 = (int)(rcAnchor.left - pageViewRect.left);
347 if (rcAnchor.bottom < pageViewRect.bottom) {
348 rtPopup.left += rcAnchor.bottom - pageViewRect.bottom;
349 }
350
351 break;
352 }
353
354 case 180: {
355 t2 = (int)(pageViewRect.top - rcAnchor.top);
356 t1 = (int)(rcAnchor.bottom - pageViewRect.bottom);
357 if (rcAnchor.left < pageViewRect.left) {
358 rtPopup.left += rcAnchor.left - pageViewRect.left;
359 }
360 break;
361 }
362 case 270: {
363 t1 = (int)(rcAnchor.left - pageViewRect.left);
364 t2 = (int)(pageViewRect.right - rcAnchor.right);
365
366 if (rcAnchor.top > pageViewRect.top) {
367 rtPopup.left -= rcAnchor.top - pageViewRect.top;
368 }
369 break;
370 }
371 case 0:
372 default: {
373 t1 = (int)(pageViewRect.top - rcAnchor.top);
374 t2 = (int)(rcAnchor.bottom - pageViewRect.bottom);
375 if (rcAnchor.right > pageViewRect.right) {
376 rtPopup.left -= rcAnchor.right - pageViewRect.right;
377 }
378 break;
379 }
380 }
381
382 if (t1 <= 0 && t2 <= 0) {
383 return FALSE;
384 }
385 if (t1 <= 0) {
386 t = t2;
387 dwPos = 1;
388 } else if (t2 <= 0) {
389 t = t1;
390 dwPos = 0;
391 } else if (t1 > t2) {
392 t = t1;
393 dwPos = 0;
394 } else {
395 t = t2;
396 dwPos = 1;
397 }
398 if (t < fMinPopup) {
399 fPoupHeight = fMinPopup;
400 } else if (t > fMaxPopup) {
401 fPoupHeight = fMaxPopup;
402 } else {
403 fPoupHeight = (FX_FLOAT)t;
404 }
405
406 switch (nRotate) {
407 case 0:
408 case 180: {
409 if (dwPos == 0) {
410 rtPopup.top = rtAnchor.height;
411 rtPopup.height = fPoupHeight;
412 } else {
413 rtPopup.top = -fPoupHeight;
414 rtPopup.height = fPoupHeight;
415 }
416 break;
417 }
418 case 90:
419 case 270: {
420 if (dwPos == 0) {
421 rtPopup.top = rtAnchor.width;
422 rtPopup.height = fPoupHeight;
423 } else {
424 rtPopup.top = -fPoupHeight;
425 rtPopup.height = fPoupHeight;
426 }
427 break;
428 }
429 default:
430 break;
431 }
432
433 return TRUE;
434 }
435
436 FX_BOOL CPDFXFA_Document::PopupMenu(IXFA_Widget* hWidget,
437 CFX_PointF ptPopup,
438 const CFX_RectF* pRectExclude) {
439 if (NULL == hWidget) {
440 return FALSE;
441 }
442 IXFA_PageView* pXFAPageView =
443 m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget);
444 if (pXFAPageView == NULL)
445 return FALSE;
446 CPDFXFA_Page* pPage = GetPage(pXFAPageView);
447
448 if (pPage == NULL)
449 return FALSE;
450
451 int menuFlag = 0;
452
453 IXFA_MenuHandler* pXFAMenuHander = m_pApp->GetXFAApp()->GetMenuHandler();
454 if (pXFAMenuHander->CanUndo(hWidget))
455 menuFlag |= FXFA_MEMU_UNDO;
456 if (pXFAMenuHander->CanRedo(hWidget))
457 menuFlag |= FXFA_MEMU_REDO;
458 if (pXFAMenuHander->CanPaste(hWidget))
459 menuFlag |= FXFA_MEMU_PASTE;
460 if (pXFAMenuHander->CanCopy(hWidget))
461 menuFlag |= FXFA_MEMU_COPY;
462 if (pXFAMenuHander->CanCut(hWidget))
463 menuFlag |= FXFA_MEMU_CUT;
464 if (pXFAMenuHander->CanSelectAll(hWidget))
465 menuFlag |= FXFA_MEMU_SELECTALL;
466
467 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
468 if (pEnv == NULL)
469 return FALSE;
470
471 return pEnv->FFI_PopupMenu(pPage, hWidget, menuFlag, ptPopup, NULL);
472 }
473
474 void CPDFXFA_Document::PageViewEvent(IXFA_PageView* pPageView,
475 FX_DWORD dwFlags) {
476 if (!pPageView || (dwFlags != XFA_PAGEVIEWEVENT_PostAdded &&
477 dwFlags != XFA_PAGEVIEWEVENT_PostRemoved)) {
478 return;
479 }
480 CPDFXFA_Page* pPage = nullptr;
481 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
482 if (dwFlags == XFA_PAGEVIEWEVENT_PostAdded) {
483 int nPageIndex = pPageView->GetPageViewIndex();
484 pPage = GetPage(nPageIndex);
485 if (pPage)
486 pPage->SetXFAPageView(pPageView);
487 pEnv->FFI_PageEvent(nPageIndex, dwFlags);
488 return;
489 }
490 pPage = GetPage(pPageView);
491 if (!pPage)
492 return;
493 pEnv->FFI_PageEvent(pPage->GetPageIndex(), dwFlags);
494 pPage->Release();
495 }
496
497 void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget,
498 CXFA_WidgetAcc* pWidgetData,
499 FX_DWORD dwEvent,
500 void* pParam,
501 void* pAdditional) {
502 if (m_iDocType != DOCTYPE_DYNAMIC_XFA || !hWidget)
503 return;
504
505 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
506 if (!pEnv)
507 return;
508
509 IXFA_PageView* pPageView =
510 m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget);
511 if (pPageView == NULL)
512 return;
513
514 CPDFXFA_Page* pXFAPage = GetPage(pPageView);
515 if (pXFAPage == NULL)
516 return;
517
518 CPDFSDK_PageView* pSdkPageView = m_pSDKDoc->GetPageView(pXFAPage);
519 if (dwEvent == XFA_WIDGETEVENT_PostAdded) {
520 pSdkPageView->AddAnnot(hWidget);
521
522 } else if (dwEvent == XFA_WIDGETEVENT_PreRemoved) {
523 CPDFSDK_Annot* pAnnot = pSdkPageView->GetAnnotByXFAWidget(hWidget);
524 if (pAnnot) {
525 pSdkPageView->DeleteAnnot(pAnnot);
526 }
527 }
528 }
529
530 int32_t CPDFXFA_Document::CountPages(IXFA_Doc* hDoc) {
531 if (hDoc == m_pXFADoc && m_pSDKDoc) {
532 return GetPageCount();
533 }
534 return 0;
535 }
536 int32_t CPDFXFA_Document::GetCurrentPage(IXFA_Doc* hDoc) {
537 if (hDoc != m_pXFADoc || !m_pSDKDoc)
538 return -1;
539 if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
540 return -1;
541
542 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
543 if (pEnv == NULL)
544 return -1;
545
546 return pEnv->FFI_GetCurrentPageIndex(this);
547 }
548 void CPDFXFA_Document::SetCurrentPage(IXFA_Doc* hDoc, int32_t iCurPage) {
549 if (hDoc != m_pXFADoc || !m_pSDKDoc || m_iDocType != DOCTYPE_DYNAMIC_XFA ||
550 iCurPage < 0 || iCurPage >= m_pSDKDoc->GetPageCount()) {
551 return;
552 }
553 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
554 if (!pEnv)
555 return;
556 pEnv->FFI_SetCurrentPage(this, iCurPage);
557 }
558 FX_BOOL CPDFXFA_Document::IsCalculationsEnabled(IXFA_Doc* hDoc) {
559 if (hDoc != m_pXFADoc || !m_pSDKDoc)
560 return FALSE;
561 if (m_pSDKDoc->GetInterForm())
562 return m_pSDKDoc->GetInterForm()->IsXfaCalculateEnabled();
563
564 return FALSE;
565 }
566 void CPDFXFA_Document::SetCalculationsEnabled(IXFA_Doc* hDoc,
567 FX_BOOL bEnabled) {
568 if (hDoc != m_pXFADoc || !m_pSDKDoc)
569 return;
570 if (m_pSDKDoc->GetInterForm())
571 m_pSDKDoc->GetInterForm()->XfaEnableCalculate(bEnabled);
572 }
573
574 void CPDFXFA_Document::GetTitle(IXFA_Doc* hDoc, CFX_WideString& wsTitle) {
575 if (hDoc != m_pXFADoc)
576 return;
577 if (m_pPDFDoc == NULL)
578 return;
579 CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo();
580
581 if (pInfoDict == NULL)
582 return;
583
584 CFX_ByteString csTitle = pInfoDict->GetStringBy("Title");
585 wsTitle = wsTitle.FromLocal(csTitle.GetBuffer(csTitle.GetLength()));
586 csTitle.ReleaseBuffer(csTitle.GetLength());
587 }
588 void CPDFXFA_Document::SetTitle(IXFA_Doc* hDoc,
589 const CFX_WideStringC& wsTitle) {
590 if (hDoc != m_pXFADoc)
591 return;
592 if (m_pPDFDoc == NULL)
593 return;
594 CPDF_Dictionary* pInfoDict = m_pPDFDoc->GetInfo();
595
596 if (pInfoDict == NULL)
597 return;
598 pInfoDict->SetAt("Title", new CPDF_String(wsTitle));
599 }
600 void CPDFXFA_Document::ExportData(IXFA_Doc* hDoc,
601 const CFX_WideStringC& wsFilePath,
602 FX_BOOL bXDP) {
603 if (hDoc != m_pXFADoc)
604 return;
605 if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA)
606 return;
607 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
608 if (pEnv == NULL)
609 return;
610 int fileType = bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML;
611 CFX_ByteString bs = CFX_WideString(wsFilePath).UTF16LE_Encode();
612
613 if (wsFilePath.IsEmpty()) {
614 if (!pEnv->GetFormFillInfo() ||
615 pEnv->GetFormFillInfo()->m_pJsPlatform == NULL)
616 return;
617 CFX_WideString filepath = pEnv->JS_fieldBrowse();
618 bs = filepath.UTF16LE_Encode();
619 }
620 int len = bs.GetLength() / sizeof(unsigned short);
621 FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile(
622 bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML,
623 (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), "wb");
624 bs.ReleaseBuffer(len * sizeof(unsigned short));
625
626 if (pFileHandler == NULL)
627 return;
628
629 CFPDF_FileStream fileWrite(pFileHandler);
630
631 IXFA_DocHandler* pXFADocHander = m_pApp->GetXFAApp()->GetDocHandler();
632 CFX_ByteString content;
633 if (fileType == FXFA_SAVEAS_XML) {
634 content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
635 fileWrite.WriteBlock((const FX_CHAR*)content, fileWrite.GetSize(),
636 content.GetLength());
637 CFX_WideStringC data(L"data");
638 if (pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), data, &fileWrite)) {
639 // Ignoring error.
640 }
641 } else if (fileType == FXFA_SAVEAS_XDP) {
642 if (m_pPDFDoc == NULL)
643 return;
644 CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot();
645 if (pRoot == NULL)
646 return;
647 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm");
648 if (NULL == pAcroForm)
649 return;
650 CPDF_Object* pXFA = pAcroForm->GetElement("XFA");
651 if (pXFA == NULL)
652 return;
653 if (!pXFA->IsArray())
654 return;
655 CPDF_Array* pArray = pXFA->GetArray();
656 if (NULL == pArray)
657 return;
658 int size = pArray->GetCount();
659 for (int i = 1; i < size; i += 2) {
660 CPDF_Object* pPDFObj = pArray->GetElement(i);
661 CPDF_Object* pPrePDFObj = pArray->GetElement(i - 1);
662 if (!pPrePDFObj->IsString())
663 continue;
664 if (!pPDFObj->IsReference())
665 continue;
666 CPDF_Object* pDirectObj = pPDFObj->GetDirect();
667 if (!pDirectObj->IsStream())
668 continue;
669 if (pPrePDFObj->GetString() == "form") {
670 CFX_WideStringC form(L"form");
671 pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), form, &fileWrite);
672 } else if (pPrePDFObj->GetString() == "datasets") {
673 CFX_WideStringC datasets(L"datasets");
674 pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), datasets,
675 &fileWrite);
676 } else {
677 if (i == size - 1) {
678 CFX_WideString wPath = CFX_WideString::FromUTF16LE(
679 (unsigned short*)(const FX_CHAR*)bs,
680 bs.GetLength() / sizeof(unsigned short));
681 CFX_ByteString bPath = wPath.UTF8Encode();
682 CFX_ByteString szFormat =
683 "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>";
684 content.Format(szFormat, (char*)(const FX_CHAR*)bPath);
685 fileWrite.WriteBlock((const FX_CHAR*)content, fileWrite.GetSize(),
686 content.GetLength());
687 }
688
689 CPDF_Stream* pStream = (CPDF_Stream*)pDirectObj;
690 CPDF_StreamAcc* pAcc = new CPDF_StreamAcc;
691 pAcc->LoadAllData(pStream);
692 fileWrite.WriteBlock(pAcc->GetData(), fileWrite.GetSize(),
693 pAcc->GetSize());
694 delete pAcc;
695 }
696 }
697 }
698 if (!fileWrite.Flush()) {
699 // Ignoring flush error.
700 }
701 }
702 void CPDFXFA_Document::ImportData(IXFA_Doc* hDoc,
703 const CFX_WideStringC& wsFilePath) {
704 }
705
706 void CPDFXFA_Document::GotoURL(IXFA_Doc* hDoc,
707 const CFX_WideStringC& bsURL,
708 FX_BOOL bAppend) {
709 if (hDoc != m_pXFADoc)
710 return;
711
712 if (m_iDocType != DOCTYPE_DYNAMIC_XFA)
713 return;
714
715 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
716 if (pEnv == NULL)
717 return;
718
719 CFX_WideStringC str(bsURL.GetPtr());
720
721 pEnv->FFI_GotoURL(this, str, bAppend);
722 }
723
724 FX_BOOL CPDFXFA_Document::IsValidationsEnabled(IXFA_Doc* hDoc) {
725 if (hDoc != m_pXFADoc || !m_pSDKDoc)
726 return FALSE;
727 if (m_pSDKDoc->GetInterForm())
728 return m_pSDKDoc->GetInterForm()->IsXfaValidationsEnabled();
729
730 return TRUE;
731 }
732 void CPDFXFA_Document::SetValidationsEnabled(IXFA_Doc* hDoc, FX_BOOL bEnabled) {
733 if (hDoc != m_pXFADoc || !m_pSDKDoc)
734 return;
735 if (m_pSDKDoc->GetInterForm())
736 m_pSDKDoc->GetInterForm()->XfaSetValidationsEnabled(bEnabled);
737 }
738 void CPDFXFA_Document::SetFocusWidget(IXFA_Doc* hDoc, IXFA_Widget* hWidget) {
739 if (hDoc != m_pXFADoc)
740 return;
741
742 if (NULL == hWidget) {
743 m_pSDKDoc->SetFocusAnnot(NULL);
744 return;
745 }
746
747 int pageViewCount = m_pSDKDoc->GetPageViewCount();
748 for (int i = 0; i < pageViewCount; i++) {
749 CPDFSDK_PageView* pPageView = m_pSDKDoc->GetPageView(i);
750 if (pPageView == NULL)
751 continue;
752 CPDFSDK_Annot* pAnnot = pPageView->GetAnnotByXFAWidget(hWidget);
753 if (pAnnot) {
754 m_pSDKDoc->SetFocusAnnot(pAnnot);
755 break;
756 }
757 }
758 }
759 void CPDFXFA_Document::Print(IXFA_Doc* hDoc,
760 int32_t nStartPage,
761 int32_t nEndPage,
762 FX_DWORD dwOptions) {
763 if (hDoc != m_pXFADoc)
764 return;
765
766 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
767 if (pEnv == NULL)
768 return;
769
770 if (!pEnv->GetFormFillInfo() ||
771 pEnv->GetFormFillInfo()->m_pJsPlatform == NULL)
772 return;
773 if (pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print == NULL)
774 return;
775 pEnv->GetFormFillInfo()->m_pJsPlatform->Doc_print(
776 pEnv->GetFormFillInfo()->m_pJsPlatform,
777 dwOptions & XFA_PRINTOPT_ShowDialog, nStartPage, nEndPage,
778 dwOptions & XFA_PRINTOPT_CanCancel, dwOptions & XFA_PRINTOPT_ShrinkPage,
779 dwOptions & XFA_PRINTOPT_AsImage, dwOptions & XFA_PRINTOPT_ReverseOrder,
780 dwOptions & XFA_PRINTOPT_PrintAnnot);
781 }
782
783 void CPDFXFA_Document::GetURL(IXFA_Doc* hDoc, CFX_WideString& wsDocURL) {
784 if (hDoc != m_pXFADoc)
785 return;
786
787 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
788 if (pEnv == NULL)
789 return;
790
791 pEnv->FFI_GetURL(this, wsDocURL);
792 }
793
794 FX_ARGB CPDFXFA_Document::GetHighlightColor(IXFA_Doc* hDoc) {
795 if (hDoc != m_pXFADoc)
796 return 0;
797 if (m_pSDKDoc) {
798 if (CPDFSDK_InterForm* pInterForm = m_pSDKDoc->GetInterForm()) {
799 FX_COLORREF color = pInterForm->GetHighlightColor(FPDF_FORMFIELD_XFA);
800 uint8_t alpha = pInterForm->GetHighlightAlpha();
801 FX_ARGB argb = ArgbEncode((int)alpha, color);
802 return argb;
803 }
804 }
805 return 0;
806 }
807
808 FX_BOOL CPDFXFA_Document::_NotifySubmit(FX_BOOL bPrevOrPost) {
809 if (bPrevOrPost)
810 return _OnBeforeNotifySumbit();
811
812 _OnAfterNotifySumbit();
813 return TRUE;
814 }
815
816 FX_BOOL CPDFXFA_Document::_OnBeforeNotifySumbit() {
817 #ifdef PDF_ENABLE_XFA
818 if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA)
819 return TRUE;
820 if (m_pXFADocView == NULL)
821 return TRUE;
822 IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler();
823 if (pWidgetHandler == NULL)
824 return TRUE;
825 IXFA_WidgetAccIterator* pWidgetAccIterator =
826 m_pXFADocView->CreateWidgetAccIterator();
827 if (pWidgetAccIterator) {
828 CXFA_EventParam Param;
829 Param.m_eType = XFA_EVENT_PreSubmit;
830 CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext();
831 while (pWidgetAcc) {
832 pWidgetHandler->ProcessEvent(pWidgetAcc, &Param);
833 pWidgetAcc = pWidgetAccIterator->MoveToNext();
834 }
835 pWidgetAccIterator->Release();
836 }
837 pWidgetAccIterator = m_pXFADocView->CreateWidgetAccIterator();
838 if (pWidgetAccIterator) {
839 CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext();
840 pWidgetAcc = pWidgetAccIterator->MoveToNext();
841 while (pWidgetAcc) {
842 int fRet = pWidgetAcc->ProcessValidate(-1);
843 if (fRet == XFA_EVENTERROR_Error) {
844 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
845 if (pEnv == NULL)
846 return FALSE;
847 CFX_WideString ws;
848 ws.FromLocal(IDS_XFA_Validate_Input);
849 CFX_ByteString bs = ws.UTF16LE_Encode();
850 int len = bs.GetLength() / sizeof(unsigned short);
851 pEnv->FFI_Alert(
852 (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)),
853 (FPDF_WIDESTRING)L"", 0, 1);
854 bs.ReleaseBuffer(len * sizeof(unsigned short));
855 pWidgetAccIterator->Release();
856 return FALSE;
857 }
858 pWidgetAcc = pWidgetAccIterator->MoveToNext();
859 }
860 pWidgetAccIterator->Release();
861 m_pXFADocView->UpdateDocView();
862 }
863 #endif
864 return TRUE;
865 }
866 void CPDFXFA_Document::_OnAfterNotifySumbit() {
867 if (m_iDocType != DOCTYPE_DYNAMIC_XFA && m_iDocType != DOCTYPE_STATIC_XFA)
868 return;
869 if (m_pXFADocView == NULL)
870 return;
871 IXFA_WidgetHandler* pWidgetHandler = m_pXFADocView->GetWidgetHandler();
872 if (pWidgetHandler == NULL)
873 return;
874 IXFA_WidgetAccIterator* pWidgetAccIterator =
875 m_pXFADocView->CreateWidgetAccIterator();
876 if (pWidgetAccIterator == NULL)
877 return;
878 CXFA_EventParam Param;
879 Param.m_eType = XFA_EVENT_PostSubmit;
880
881 CXFA_WidgetAcc* pWidgetAcc = pWidgetAccIterator->MoveToNext();
882 while (pWidgetAcc) {
883 pWidgetHandler->ProcessEvent(pWidgetAcc, &Param);
884 pWidgetAcc = pWidgetAccIterator->MoveToNext();
885 }
886 pWidgetAccIterator->Release();
887 m_pXFADocView->UpdateDocView();
888 }
889
890 FX_BOOL CPDFXFA_Document::SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit) {
891 if (!_NotifySubmit(TRUE))
892 return FALSE;
893 if (NULL == m_pXFADocView)
894 return FALSE;
895 m_pXFADocView->UpdateDocView();
896
897 FX_BOOL ret = _SubmitData(hDoc, submit);
898 _NotifySubmit(FALSE);
899 return ret;
900 }
901
902 IFX_FileRead* CPDFXFA_Document::OpenLinkedFile(IXFA_Doc* hDoc,
903 const CFX_WideString& wsLink) {
904 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
905 if (pEnv == NULL)
906 return FALSE;
907 CFX_ByteString bs = wsLink.UTF16LE_Encode();
908 int len = bs.GetLength() / sizeof(unsigned short);
909 FPDF_FILEHANDLER* pFileHandler = pEnv->FFI_OpenFile(
910 0, (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)), "rb");
911 bs.ReleaseBuffer(len * sizeof(unsigned short));
912
913 if (pFileHandler == NULL)
914 return NULL;
915 return new CFPDF_FileStream(pFileHandler);
916 }
917 FX_BOOL CPDFXFA_Document::_ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler,
918 int fileType,
919 FPDF_DWORD encodeType,
920 FPDF_DWORD flag) {
921 if (NULL == m_pXFADocView)
922 return FALSE;
923 IXFA_DocHandler* pDocHandler = m_pApp->GetXFAApp()->GetDocHandler();
924 CFX_ByteString content;
925
926 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
927 if (pEnv == NULL)
928 return FALSE;
929
930 CFPDF_FileStream fileStream(pFileHandler);
931
932 if (fileType == FXFA_SAVEAS_XML) {
933 CFX_WideString ws;
934 ws.FromLocal("data");
935 CFX_ByteString content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
936 fileStream.WriteBlock((const FX_CHAR*)content, 0, content.GetLength());
937 pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream);
938 } else if (fileType == FXFA_SAVEAS_XDP) {
939 if (flag == 0)
940 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS |
941 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM;
942 if (m_pPDFDoc == NULL) {
943 fileStream.Flush();
944 return FALSE;
945 }
946 CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot();
947 if (pRoot == NULL) {
948 fileStream.Flush();
949 return FALSE;
950 }
951 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm");
952 if (NULL == pAcroForm) {
953 fileStream.Flush();
954 return FALSE;
955 }
956 CPDF_Object* pXFA = pAcroForm->GetElement("XFA");
957 if (pXFA == NULL) {
958 fileStream.Flush();
959 return FALSE;
960 }
961 if (!pXFA->IsArray()) {
962 fileStream.Flush();
963 return FALSE;
964 }
965 CPDF_Array* pArray = pXFA->GetArray();
966 if (NULL == pArray) {
967 fileStream.Flush();
968 return FALSE;
969 }
970 int size = pArray->GetCount();
971 for (int i = 1; i < size; i += 2) {
972 CPDF_Object* pPDFObj = pArray->GetElement(i);
973 CPDF_Object* pPrePDFObj = pArray->GetElement(i - 1);
974 if (!pPrePDFObj->IsString())
975 continue;
976 if (!pPDFObj->IsReference())
977 continue;
978 CPDF_Object* pDirectObj = pPDFObj->GetDirect();
979 if (!pDirectObj->IsStream())
980 continue;
981 if (pPrePDFObj->GetString() == "config" && !(flag & FXFA_CONFIG))
982 continue;
983 if (pPrePDFObj->GetString() == "template" && !(flag & FXFA_TEMPLATE))
984 continue;
985 if (pPrePDFObj->GetString() == "localeSet" && !(flag & FXFA_LOCALESET))
986 continue;
987 if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS))
988 continue;
989 if (pPrePDFObj->GetString() == "xmpmeta" && !(flag & FXFA_XMPMETA))
990 continue;
991 if (pPrePDFObj->GetString() == "xfdf" && !(flag & FXFA_XFDF))
992 continue;
993 if (pPrePDFObj->GetString() == "form" && !(flag & FXFA_FORM))
994 continue;
995 if (pPrePDFObj->GetString() == "form") {
996 CFX_WideString ws;
997 ws.FromLocal("form");
998 pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream);
999 } else if (pPrePDFObj->GetString() == "datasets") {
1000 CFX_WideString ws;
1001 ws.FromLocal("datasets");
1002 pDocHandler->SavePackage(m_pXFADoc, ws, &fileStream);
1003 } else {
1004 // PDF,creator.
1005 }
1006 }
1007 }
1008 return TRUE;
1009 }
1010
1011 void CPDFXFA_Document::_ClearChangeMark() {
1012 if (m_pSDKDoc)
1013 m_pSDKDoc->ClearChangeMark();
1014 }
1015
1016 void CPDFXFA_Document::_ToXFAContentFlags(CFX_WideString csSrcContent,
1017 FPDF_DWORD& flag) {
1018 if (csSrcContent.Find(L" config ", 0) != -1)
1019 flag |= FXFA_CONFIG;
1020 if (csSrcContent.Find(L" template ", 0) != -1)
1021 flag |= FXFA_TEMPLATE;
1022 if (csSrcContent.Find(L" localeSet ", 0) != -1)
1023 flag |= FXFA_LOCALESET;
1024 if (csSrcContent.Find(L" datasets ", 0) != -1)
1025 flag |= FXFA_DATASETS;
1026 if (csSrcContent.Find(L" xmpmeta ", 0) != -1)
1027 flag |= FXFA_XMPMETA;
1028 if (csSrcContent.Find(L" xfdf ", 0) != -1)
1029 flag |= FXFA_XFDF;
1030 if (csSrcContent.Find(L" form ", 0) != -1)
1031 flag |= FXFA_FORM;
1032 if (flag == 0)
1033 flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS |
1034 FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM;
1035 }
1036 FX_BOOL CPDFXFA_Document::_MailToInfo(CFX_WideString& csURL,
1037 CFX_WideString& csToAddress,
1038 CFX_WideString& csCCAddress,
1039 CFX_WideString& csBCCAddress,
1040 CFX_WideString& csSubject,
1041 CFX_WideString& csMsg) {
1042 CFX_WideString srcURL = csURL;
1043 srcURL.TrimLeft();
1044 if (0 != srcURL.Left(7).CompareNoCase(L"mailto:"))
1045 return FALSE;
1046 int pos = srcURL.Find(L'?', 0);
1047 CFX_WideString tmp;
1048 if (pos == -1) {
1049 pos = srcURL.Find(L'@', 0);
1050 if (pos == -1)
1051 return FALSE;
1052
1053 tmp = srcURL.Right(csURL.GetLength() - 7);
1054 tmp.TrimLeft();
1055 tmp.TrimRight();
1056 } else {
1057 tmp = srcURL.Left(pos);
1058 tmp = tmp.Right(tmp.GetLength() - 7);
1059 tmp.TrimLeft();
1060 tmp.TrimRight();
1061 }
1062
1063 csToAddress = tmp;
1064
1065 srcURL = srcURL.Right(srcURL.GetLength() - (pos + 1));
1066 while (!srcURL.IsEmpty()) {
1067 srcURL.TrimLeft();
1068 srcURL.TrimRight();
1069 pos = srcURL.Find(L'&', 0);
1070 if (pos == -1)
1071 tmp = srcURL;
1072 else
1073 tmp = srcURL.Left(pos);
1074
1075 tmp.TrimLeft();
1076 tmp.TrimRight();
1077 if (tmp.GetLength() >= 3 && 0 == tmp.Left(3).CompareNoCase(L"cc=")) {
1078 tmp = tmp.Right(tmp.GetLength() - 3);
1079 if (!csCCAddress.IsEmpty())
1080 csCCAddress += L';';
1081 csCCAddress += tmp;
1082
1083 } else if (tmp.GetLength() >= 4 &&
1084 0 == tmp.Left(4).CompareNoCase(L"bcc=")) {
1085 tmp = tmp.Right(tmp.GetLength() - 4);
1086 if (!csBCCAddress.IsEmpty())
1087 csBCCAddress += L';';
1088 csBCCAddress += tmp;
1089 } else if (tmp.GetLength() >= 8 &&
1090 0 == tmp.Left(8).CompareNoCase(L"subject=")) {
1091 tmp = tmp.Right(tmp.GetLength() - 8);
1092 csSubject += tmp;
1093 } else if (tmp.GetLength() >= 5 &&
1094 0 == tmp.Left(5).CompareNoCase(L"body=")) {
1095 tmp = tmp.Right(tmp.GetLength() - 5);
1096 csMsg += tmp;
1097 }
1098 if (pos == -1)
1099 srcURL = L"";
1100 else
1101 srcURL = srcURL.Right(csURL.GetLength() - (pos + 1));
1102 }
1103 csToAddress.Replace(L",", L";");
1104 csCCAddress.Replace(L",", L";");
1105 csBCCAddress.Replace(L",", L";");
1106 return TRUE;
1107 }
1108
1109 FX_BOOL CPDFXFA_Document::_SubmitData(IXFA_Doc* hDoc, CXFA_Submit submit) {
1110 #ifdef PDF_ENABLE_XFA
1111 CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
1112 if (!pEnv)
1113 return FALSE;
1114 CFX_WideStringC csURLC;
1115 submit.GetSubmitTarget(csURLC);
1116 CFX_WideString csURL = csURLC;
1117 if (csURL.IsEmpty()) {
1118 CFX_WideString ws;
1119 ws.FromLocal("Submit cancelled.");
1120 CFX_ByteString bs = ws.UTF16LE_Encode();
1121 int len = bs.GetLength() / sizeof(unsigned short);
1122 pEnv->FFI_Alert((FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)),
1123 (FPDF_WIDESTRING)L"", 0, 4);
1124 bs.ReleaseBuffer(len * sizeof(unsigned short));
1125 return FALSE;
1126 }
1127 FPDF_BOOL bRet = TRUE;
1128 FPDF_FILEHANDLER* pFileHandler = nullptr;
1129 int fileFlag = -1;
1130 switch (submit.GetSubmitFormat()) {
1131 case XFA_ATTRIBUTEENUM_Xdp: {
1132 CFX_WideStringC csContentC;
1133 submit.GetSubmitXDPContent(csContentC);
1134 CFX_WideString csContent;
1135 csContent = csContentC;
1136 csContent.TrimLeft();
1137 csContent.TrimRight();
1138 CFX_WideString space;
1139 space.FromLocal(" ");
1140 csContent = space + csContent + space;
1141 FPDF_DWORD flag = 0;
1142 if (submit.IsSubmitEmbedPDF())
1143 flag |= FXFA_PDF;
1144 _ToXFAContentFlags(csContent, flag);
1145 pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XDP, nullptr, "wb");
1146 fileFlag = FXFA_SAVEAS_XDP;
1147 _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XDP, 0, flag);
1148 break;
1149 }
1150 case XFA_ATTRIBUTEENUM_Xml:
1151 pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, nullptr, "wb");
1152 fileFlag = FXFA_SAVEAS_XML;
1153 _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0);
1154 break;
1155 case XFA_ATTRIBUTEENUM_Pdf:
1156 break;
1157 case XFA_ATTRIBUTEENUM_Urlencoded:
1158 pFileHandler = pEnv->FFI_OpenFile(FXFA_SAVEAS_XML, nullptr, "wb");
1159 fileFlag = FXFA_SAVEAS_XML;
1160 _ExportSubmitFile(pFileHandler, FXFA_SAVEAS_XML, 0);
1161 break;
1162 default:
1163 return false;
1164 }
1165 if (!pFileHandler)
1166 return FALSE;
1167 if (0 == csURL.Left(7).CompareNoCase(L"mailto:")) {
1168 CFX_WideString csToAddress;
1169 CFX_WideString csCCAddress;
1170 CFX_WideString csBCCAddress;
1171 CFX_WideString csSubject;
1172 CFX_WideString csMsg;
1173 bRet = _MailToInfo(csURL, csToAddress, csCCAddress, csBCCAddress, csSubject,
1174 csMsg);
1175 if (!bRet)
1176 return FALSE;
1177 CFX_ByteString bsTo = CFX_WideString(csToAddress).UTF16LE_Encode();
1178 CFX_ByteString bsCC = CFX_WideString(csCCAddress).UTF16LE_Encode();
1179 CFX_ByteString bsBcc = CFX_WideString(csBCCAddress).UTF16LE_Encode();
1180 CFX_ByteString bsSubject = CFX_WideString(csSubject).UTF16LE_Encode();
1181 CFX_ByteString bsMsg = CFX_WideString(csMsg).UTF16LE_Encode();
1182 FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength());
1183 FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength());
1184 FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength());
1185 FPDF_WIDESTRING pSubject =
1186 (FPDF_WIDESTRING)bsSubject.GetBuffer(bsSubject.GetLength());
1187 FPDF_WIDESTRING pMsg = (FPDF_WIDESTRING)bsMsg.GetBuffer(bsMsg.GetLength());
1188 pEnv->FFI_EmailTo(pFileHandler, pTo, pSubject, pCC, pBcc, pMsg);
1189 bsTo.ReleaseBuffer();
1190 bsCC.ReleaseBuffer();
1191 bsBcc.ReleaseBuffer();
1192 bsSubject.ReleaseBuffer();
1193 bsMsg.ReleaseBuffer();
1194 } else {
1195 // HTTP or FTP
1196 CFX_WideString ws;
1197 CFX_ByteString bs = csURL.UTF16LE_Encode();
1198 int len = bs.GetLength() / sizeof(unsigned short);
1199 pEnv->FFI_UploadTo(
1200 pFileHandler, fileFlag,
1201 (FPDF_WIDESTRING)bs.GetBuffer(len * sizeof(unsigned short)));
1202 bs.ReleaseBuffer(len * sizeof(unsigned short));
1203 }
1204 return bRet;
1205 #else
1206 return TRUE;
1207 #endif
1208 }
1209
1210 FX_BOOL CPDFXFA_Document::SetGlobalProperty(IXFA_Doc* hDoc,
1211 const CFX_ByteStringC& szPropName,
1212 FXJSE_HVALUE hValue) {
1213 if (hDoc != m_pXFADoc)
1214 return FALSE;
1215
1216 if (m_pSDKDoc && m_pSDKDoc->GetEnv()->GetJSRuntime())
1217 return m_pSDKDoc->GetEnv()->GetJSRuntime()->SetHValueByName(szPropName,
1218 hValue);
1219 return FALSE;
1220 }
1221 FX_BOOL CPDFXFA_Document::GetPDFScriptObject(IXFA_Doc* hDoc,
1222 const CFX_ByteStringC& utf8Name,
1223 FXJSE_HVALUE hValue) {
1224 if (hDoc != m_pXFADoc)
1225 return FALSE;
1226
1227 if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime())
1228 return FALSE;
1229
1230 if (!m_pJSContext) {
1231 m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc);
1232 m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext();
1233 }
1234
1235 return _GetHValueByName(utf8Name, hValue,
1236 m_pSDKDoc->GetEnv()->GetJSRuntime());
1237 }
1238 FX_BOOL CPDFXFA_Document::GetGlobalProperty(IXFA_Doc* hDoc,
1239 const CFX_ByteStringC& szPropName,
1240 FXJSE_HVALUE hValue) {
1241 if (hDoc != m_pXFADoc)
1242 return FALSE;
1243 if (!m_pSDKDoc || !m_pSDKDoc->GetEnv()->GetJSRuntime())
1244 return FALSE;
1245
1246 if (!m_pJSContext) {
1247 m_pSDKDoc->GetEnv()->GetJSRuntime()->SetReaderDocument(m_pSDKDoc);
1248 m_pJSContext = m_pSDKDoc->GetEnv()->GetJSRuntime()->NewContext();
1249 }
1250
1251 return _GetHValueByName(szPropName, hValue,
1252 m_pSDKDoc->GetEnv()->GetJSRuntime());
1253 }
1254 FX_BOOL CPDFXFA_Document::_GetHValueByName(const CFX_ByteStringC& utf8Name,
1255 FXJSE_HVALUE hValue,
1256 IJS_Runtime* runTime) {
1257 return runTime->GetHValueByName(utf8Name, hValue);
1258 }
OLDNEW
« no previous file with comments | « fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp ('k') | fpdfsdk/src/fpdfxfa/fpdfxfa_page.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698