| 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 "public/fpdf_save.h" | 7 #include "public/fpdf_save.h" |
| 8 | 8 |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "core/fpdfapi/fpdf_edit/include/cpdf_creator.h" | 11 #include "core/fpdfapi/fpdf_edit/include/cpdf_creator.h" |
| 12 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" | 12 #include "core/fpdfapi/fpdf_parser/include/cpdf_array.h" |
| 13 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" | 13 #include "core/fpdfapi/fpdf_parser/include/cpdf_document.h" |
| 14 #include "core/fpdfapi/fpdf_parser/include/cpdf_reference.h" | 14 #include "core/fpdfapi/fpdf_parser/include/cpdf_reference.h" |
| 15 #include "core/fpdfapi/fpdf_parser/include/cpdf_stream_acc.h" | 15 #include "core/fpdfapi/fpdf_parser/include/cpdf_stream_acc.h" |
| 16 #include "core/fpdfapi/fpdf_parser/include/cpdf_string.h" | 16 #include "core/fpdfapi/fpdf_parser/include/cpdf_string.h" |
| 17 #include "core/fxcrt/include/fx_ext.h" | 17 #include "core/fxcrt/include/fx_ext.h" |
| 18 #include "fpdfsdk/include/fsdk_define.h" | 18 #include "fpdfsdk/include/fsdk_define.h" |
| 19 #include "public/fpdf_edit.h" | 19 #include "public/fpdf_edit.h" |
| 20 | 20 |
| 21 #ifdef PDF_ENABLE_XFA | 21 #ifdef PDF_ENABLE_XFA |
| 22 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h" | 22 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_app.h" |
| 23 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h" | 23 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h" |
| 24 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h" | 24 #include "fpdfsdk/include/fpdfxfa/fpdfxfa_util.h" |
| 25 #include "public/fpdf_formfill.h" | 25 #include "public/fpdf_formfill.h" |
| 26 #include "xfa/include/fxfa/xfa_checksum.h" |
| 27 #include "xfa/include/fxfa/xfa_ffapp.h" |
| 28 #include "xfa/include/fxfa/xfa_ffdocview.h" |
| 29 #include "xfa/include/fxfa/xfa_ffwidgethandler.h" |
| 26 #endif | 30 #endif |
| 27 | 31 |
| 28 #if _FX_OS_ == _FX_ANDROID_ | 32 #if _FX_OS_ == _FX_ANDROID_ |
| 29 #include "time.h" | 33 #include "time.h" |
| 30 #else | 34 #else |
| 31 #include <ctime> | 35 #include <ctime> |
| 32 #endif | 36 #endif |
| 33 | 37 |
| 34 class CFX_IFileWrite final : public IFX_StreamWrite { | 38 class CFX_IFileWrite final : public IFX_StreamWrite { |
| 35 public: | 39 public: |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 if (!pDocument) | 80 if (!pDocument) |
| 77 return false; | 81 return false; |
| 78 | 82 |
| 79 if (pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA && | 83 if (pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA && |
| 80 pDocument->GetDocType() != DOCTYPE_STATIC_XFA) | 84 pDocument->GetDocType() != DOCTYPE_STATIC_XFA) |
| 81 return true; | 85 return true; |
| 82 | 86 |
| 83 if (!CPDFXFA_App::GetInstance()->GetXFAApp()) | 87 if (!CPDFXFA_App::GetInstance()->GetXFAApp()) |
| 84 return true; | 88 return true; |
| 85 | 89 |
| 86 IXFA_DocView* pXFADocView = pDocument->GetXFADocView(); | 90 CXFA_FFDocView* pXFADocView = pDocument->GetXFADocView(); |
| 87 if (!pXFADocView) | 91 if (!pXFADocView) |
| 88 return true; | 92 return true; |
| 89 | 93 |
| 90 IXFA_DocHandler* pXFADocHandler = | 94 CXFA_FFDocHandler* pXFADocHandler = |
| 91 CPDFXFA_App::GetInstance()->GetXFAApp()->GetDocHandler(); | 95 CPDFXFA_App::GetInstance()->GetXFAApp()->GetDocHandler(); |
| 92 CPDF_Document* pPDFDocument = pDocument->GetPDFDoc(); | 96 CPDF_Document* pPDFDocument = pDocument->GetPDFDoc(); |
| 93 if (!pDocument) | 97 if (!pDocument) |
| 94 return false; | 98 return false; |
| 95 | 99 |
| 96 CPDF_Dictionary* pRoot = pPDFDocument->GetRoot(); | 100 CPDF_Dictionary* pRoot = pPDFDocument->GetRoot(); |
| 97 if (!pRoot) | 101 if (!pRoot) |
| 98 return false; | 102 return false; |
| 99 | 103 |
| 100 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); | 104 CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 121 CPDF_Object* pPDFObj = pArray->GetObjectAt(i); | 125 CPDF_Object* pPDFObj = pArray->GetObjectAt(i); |
| 122 if (!pPDFObj->IsString()) | 126 if (!pPDFObj->IsString()) |
| 123 continue; | 127 continue; |
| 124 if (pPDFObj->GetString() == "form") | 128 if (pPDFObj->GetString() == "form") |
| 125 iFormIndex = i + 1; | 129 iFormIndex = i + 1; |
| 126 else if (pPDFObj->GetString() == "datasets") | 130 else if (pPDFObj->GetString() == "datasets") |
| 127 iDataSetsIndex = i + 1; | 131 iDataSetsIndex = i + 1; |
| 128 else if (pPDFObj->GetString() == "template") | 132 else if (pPDFObj->GetString() == "template") |
| 129 iTemplate = i + 1; | 133 iTemplate = i + 1; |
| 130 } | 134 } |
| 131 std::unique_ptr<IXFA_ChecksumContext, ReleaseDeleter<IXFA_ChecksumContext>> | 135 std::unique_ptr<CXFA_ChecksumContext, ReleaseDeleter<CXFA_ChecksumContext>> |
| 132 pContext(XFA_Checksum_Create()); | 136 pContext(new CXFA_ChecksumContext); |
| 133 pContext->StartChecksum(); | 137 pContext->StartChecksum(); |
| 134 | 138 |
| 135 // template | 139 // template |
| 136 if (iTemplate > -1) { | 140 if (iTemplate > -1) { |
| 137 CPDF_Stream* pTemplateStream = pArray->GetStreamAt(iTemplate); | 141 CPDF_Stream* pTemplateStream = pArray->GetStreamAt(iTemplate); |
| 138 CPDF_StreamAcc streamAcc; | 142 CPDF_StreamAcc streamAcc; |
| 139 streamAcc.LoadAllData(pTemplateStream); | 143 streamAcc.LoadAllData(pTemplateStream); |
| 140 uint8_t* pData = (uint8_t*)streamAcc.GetData(); | 144 uint8_t* pData = (uint8_t*)streamAcc.GetData(); |
| 141 uint32_t dwSize2 = streamAcc.GetSize(); | 145 uint32_t dwSize2 = streamAcc.GetSize(); |
| 142 ScopedFileStream pTemplate(FX_CreateMemoryStream(pData, dwSize2)); | 146 ScopedFileStream pTemplate(FX_CreateMemoryStream(pData, dwSize2)); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 } | 225 } |
| 222 | 226 |
| 223 bool SendPostSaveToXFADoc(CPDFXFA_Document* pDocument) { | 227 bool SendPostSaveToXFADoc(CPDFXFA_Document* pDocument) { |
| 224 if (!pDocument) | 228 if (!pDocument) |
| 225 return false; | 229 return false; |
| 226 | 230 |
| 227 if (pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA && | 231 if (pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA && |
| 228 pDocument->GetDocType() != DOCTYPE_STATIC_XFA) | 232 pDocument->GetDocType() != DOCTYPE_STATIC_XFA) |
| 229 return true; | 233 return true; |
| 230 | 234 |
| 231 IXFA_DocView* pXFADocView = pDocument->GetXFADocView(); | 235 CXFA_FFDocView* pXFADocView = pDocument->GetXFADocView(); |
| 232 if (!pXFADocView) | 236 if (!pXFADocView) |
| 233 return false; | 237 return false; |
| 234 | 238 |
| 235 IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler(); | 239 CXFA_FFWidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler(); |
| 236 CXFA_WidgetAcc* pWidgetAcc = NULL; | 240 CXFA_WidgetAcc* pWidgetAcc = NULL; |
| 237 IXFA_WidgetAccIterator* pWidgetAccIterator = | 241 CXFA_WidgetAccIterator* pWidgetAccIterator = |
| 238 pXFADocView->CreateWidgetAccIterator(); | 242 pXFADocView->CreateWidgetAccIterator(); |
| 239 pWidgetAcc = pWidgetAccIterator->MoveToNext(); | 243 pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
| 240 while (pWidgetAcc) { | 244 while (pWidgetAcc) { |
| 241 CXFA_EventParam preParam; | 245 CXFA_EventParam preParam; |
| 242 preParam.m_eType = XFA_EVENT_PostSave; | 246 preParam.m_eType = XFA_EVENT_PostSave; |
| 243 pWidgetHander->ProcessEvent(pWidgetAcc, &preParam); | 247 pWidgetHander->ProcessEvent(pWidgetAcc, &preParam); |
| 244 pWidgetAcc = pWidgetAccIterator->MoveToNext(); | 248 pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
| 245 } | 249 } |
| 246 pWidgetAccIterator->Release(); | 250 pWidgetAccIterator->Release(); |
| 247 pXFADocView->UpdateDocView(); | 251 pXFADocView->UpdateDocView(); |
| 248 pDocument->_ClearChangeMark(); | 252 pDocument->_ClearChangeMark(); |
| 249 return true; | 253 return true; |
| 250 } | 254 } |
| 251 | 255 |
| 252 bool SendPreSaveToXFADoc(CPDFXFA_Document* pDocument, | 256 bool SendPreSaveToXFADoc(CPDFXFA_Document* pDocument, |
| 253 std::vector<ScopedFileStream>* fileList) { | 257 std::vector<ScopedFileStream>* fileList) { |
| 254 if (pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA && | 258 if (pDocument->GetDocType() != DOCTYPE_DYNAMIC_XFA && |
| 255 pDocument->GetDocType() != DOCTYPE_STATIC_XFA) | 259 pDocument->GetDocType() != DOCTYPE_STATIC_XFA) |
| 256 return true; | 260 return true; |
| 257 | 261 |
| 258 IXFA_DocView* pXFADocView = pDocument->GetXFADocView(); | 262 CXFA_FFDocView* pXFADocView = pDocument->GetXFADocView(); |
| 259 if (!pXFADocView) | 263 if (!pXFADocView) |
| 260 return true; | 264 return true; |
| 261 | 265 |
| 262 IXFA_WidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler(); | 266 CXFA_FFWidgetHandler* pWidgetHander = pXFADocView->GetWidgetHandler(); |
| 263 CXFA_WidgetAcc* pWidgetAcc = NULL; | 267 CXFA_WidgetAcc* pWidgetAcc = NULL; |
| 264 IXFA_WidgetAccIterator* pWidgetAccIterator = | 268 CXFA_WidgetAccIterator* pWidgetAccIterator = |
| 265 pXFADocView->CreateWidgetAccIterator(); | 269 pXFADocView->CreateWidgetAccIterator(); |
| 266 pWidgetAcc = pWidgetAccIterator->MoveToNext(); | 270 pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
| 267 while (pWidgetAcc) { | 271 while (pWidgetAcc) { |
| 268 CXFA_EventParam preParam; | 272 CXFA_EventParam preParam; |
| 269 preParam.m_eType = XFA_EVENT_PreSave; | 273 preParam.m_eType = XFA_EVENT_PreSave; |
| 270 pWidgetHander->ProcessEvent(pWidgetAcc, &preParam); | 274 pWidgetHander->ProcessEvent(pWidgetAcc, &preParam); |
| 271 pWidgetAcc = pWidgetAccIterator->MoveToNext(); | 275 pWidgetAcc = pWidgetAccIterator->MoveToNext(); |
| 272 } | 276 } |
| 273 pWidgetAccIterator->Release(); | 277 pWidgetAccIterator->Release(); |
| 274 pXFADocView->UpdateDocView(); | 278 pXFADocView->UpdateDocView(); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 FPDF_DWORD flags) { | 324 FPDF_DWORD flags) { |
| 321 return FPDF_Doc_Save(document, pFileWrite, flags, FALSE, 0); | 325 return FPDF_Doc_Save(document, pFileWrite, flags, FALSE, 0); |
| 322 } | 326 } |
| 323 | 327 |
| 324 DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document, | 328 DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document, |
| 325 FPDF_FILEWRITE* pFileWrite, | 329 FPDF_FILEWRITE* pFileWrite, |
| 326 FPDF_DWORD flags, | 330 FPDF_DWORD flags, |
| 327 int fileVersion) { | 331 int fileVersion) { |
| 328 return FPDF_Doc_Save(document, pFileWrite, flags, TRUE, fileVersion); | 332 return FPDF_Doc_Save(document, pFileWrite, flags, TRUE, fileVersion); |
| 329 } | 333 } |
| OLD | NEW |