| 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 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 FX_BOOL WriteBlock(const void* pData, size_t size) override; | 42 FX_BOOL WriteBlock(const void* pData, size_t size) override; |
| 43 void Release() override; | 43 void Release() override; |
| 44 | 44 |
| 45 protected: | 45 protected: |
| 46 ~CFX_IFileWrite() override {} | 46 ~CFX_IFileWrite() override {} |
| 47 | 47 |
| 48 FPDF_FILEWRITE* m_pFileWriteStruct; | 48 FPDF_FILEWRITE* m_pFileWriteStruct; |
| 49 }; | 49 }; |
| 50 | 50 |
| 51 CFX_IFileWrite::CFX_IFileWrite() { | 51 CFX_IFileWrite::CFX_IFileWrite() { |
| 52 m_pFileWriteStruct = NULL; | 52 m_pFileWriteStruct = nullptr; |
| 53 } | 53 } |
| 54 | 54 |
| 55 FX_BOOL CFX_IFileWrite::Init(FPDF_FILEWRITE* pFileWriteStruct) { | 55 FX_BOOL CFX_IFileWrite::Init(FPDF_FILEWRITE* pFileWriteStruct) { |
| 56 if (!pFileWriteStruct) | 56 if (!pFileWriteStruct) |
| 57 return FALSE; | 57 return FALSE; |
| 58 | 58 |
| 59 m_pFileWriteStruct = pFileWriteStruct; | 59 m_pFileWriteStruct = pFileWriteStruct; |
| 60 return TRUE; | 60 return TRUE; |
| 61 } | 61 } |
| 62 | 62 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 // template | 133 // template |
| 134 if (iTemplate > -1) { | 134 if (iTemplate > -1) { |
| 135 CPDF_Stream* pTemplateStream = pArray->GetStreamAt(iTemplate); | 135 CPDF_Stream* pTemplateStream = pArray->GetStreamAt(iTemplate); |
| 136 CPDF_StreamAcc streamAcc; | 136 CPDF_StreamAcc streamAcc; |
| 137 streamAcc.LoadAllData(pTemplateStream); | 137 streamAcc.LoadAllData(pTemplateStream); |
| 138 uint8_t* pData = (uint8_t*)streamAcc.GetData(); | 138 uint8_t* pData = (uint8_t*)streamAcc.GetData(); |
| 139 uint32_t dwSize2 = streamAcc.GetSize(); | 139 uint32_t dwSize2 = streamAcc.GetSize(); |
| 140 ScopedFileStream pTemplate(FX_CreateMemoryStream(pData, dwSize2)); | 140 ScopedFileStream pTemplate(FX_CreateMemoryStream(pData, dwSize2)); |
| 141 pContext->UpdateChecksum(pTemplate.get()); | 141 pContext->UpdateChecksum(pTemplate.get()); |
| 142 } | 142 } |
| 143 CPDF_Stream* pFormStream = NULL; | 143 CPDF_Stream* pFormStream = nullptr; |
| 144 CPDF_Stream* pDataSetsStream = NULL; | 144 CPDF_Stream* pDataSetsStream = nullptr; |
| 145 if (iFormIndex != -1) { | 145 if (iFormIndex != -1) { |
| 146 // Get form CPDF_Stream | 146 // Get form CPDF_Stream |
| 147 CPDF_Object* pFormPDFObj = pArray->GetObjectAt(iFormIndex); | 147 CPDF_Object* pFormPDFObj = pArray->GetObjectAt(iFormIndex); |
| 148 if (pFormPDFObj->IsReference()) { | 148 if (pFormPDFObj->IsReference()) { |
| 149 CPDF_Object* pFormDirectObj = pFormPDFObj->GetDirect(); | 149 CPDF_Object* pFormDirectObj = pFormPDFObj->GetDirect(); |
| 150 if (pFormDirectObj && pFormDirectObj->IsStream()) { | 150 if (pFormDirectObj && pFormDirectObj->IsStream()) { |
| 151 pFormStream = (CPDF_Stream*)pFormDirectObj; | 151 pFormStream = (CPDF_Stream*)pFormDirectObj; |
| 152 } | 152 } |
| 153 } else if (pFormPDFObj->IsStream()) { | 153 } else if (pFormPDFObj->IsStream()) { |
| 154 pFormStream = (CPDF_Stream*)pFormPDFObj; | 154 pFormStream = (CPDF_Stream*)pFormPDFObj; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 175 pDsfileWrite.get(), nullptr) && | 175 pDsfileWrite.get(), nullptr) && |
| 176 pDsfileWrite->GetSize() > 0) { | 176 pDsfileWrite->GetSize() > 0) { |
| 177 // Datasets | 177 // Datasets |
| 178 pContext->UpdateChecksum(pDsfileWrite.get()); | 178 pContext->UpdateChecksum(pDsfileWrite.get()); |
| 179 pContext->FinishChecksum(); | 179 pContext->FinishChecksum(); |
| 180 CPDF_Dictionary* pDataDict = new CPDF_Dictionary; | 180 CPDF_Dictionary* pDataDict = new CPDF_Dictionary; |
| 181 if (iDataSetsIndex != -1) { | 181 if (iDataSetsIndex != -1) { |
| 182 if (pDataSetsStream) | 182 if (pDataSetsStream) |
| 183 pDataSetsStream->InitStreamFromFile(pDsfileWrite.get(), pDataDict); | 183 pDataSetsStream->InitStreamFromFile(pDsfileWrite.get(), pDataDict); |
| 184 } else { | 184 } else { |
| 185 CPDF_Stream* pData = new CPDF_Stream(NULL, 0, NULL); | 185 CPDF_Stream* pData = new CPDF_Stream(nullptr, 0, nullptr); |
| 186 pData->InitStreamFromFile(pDsfileWrite.get(), pDataDict); | 186 pData->InitStreamFromFile(pDsfileWrite.get(), pDataDict); |
| 187 pPDFDocument->AddIndirectObject(pData); | 187 pPDFDocument->AddIndirectObject(pData); |
| 188 iLast = pArray->GetCount() - 2; | 188 iLast = pArray->GetCount() - 2; |
| 189 pArray->InsertAt(iLast, new CPDF_String("datasets", FALSE)); | 189 pArray->InsertAt(iLast, new CPDF_String("datasets", FALSE)); |
| 190 pArray->InsertAt(iLast + 1, pData, pPDFDocument); | 190 pArray->InsertAt(iLast + 1, pData, pPDFDocument); |
| 191 } | 191 } |
| 192 fileList->push_back(std::move(pDsfileWrite)); | 192 fileList->push_back(std::move(pDsfileWrite)); |
| 193 } | 193 } |
| 194 } | 194 } |
| 195 // L"form" | 195 // L"form" |
| 196 { | 196 { |
| 197 ScopedFileStream pfileWrite(FX_CreateMemoryStream()); | 197 ScopedFileStream pfileWrite(FX_CreateMemoryStream()); |
| 198 if (pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Form, pfileWrite.get(), | 198 if (pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Form, pfileWrite.get(), |
| 199 pContext.get()) && | 199 pContext.get()) && |
| 200 pfileWrite->GetSize() > 0) { | 200 pfileWrite->GetSize() > 0) { |
| 201 CPDF_Dictionary* pDataDict = new CPDF_Dictionary; | 201 CPDF_Dictionary* pDataDict = new CPDF_Dictionary; |
| 202 if (iFormIndex != -1) { | 202 if (iFormIndex != -1) { |
| 203 if (pFormStream) | 203 if (pFormStream) |
| 204 pFormStream->InitStreamFromFile(pfileWrite.get(), pDataDict); | 204 pFormStream->InitStreamFromFile(pfileWrite.get(), pDataDict); |
| 205 } else { | 205 } else { |
| 206 CPDF_Stream* pData = new CPDF_Stream(NULL, 0, NULL); | 206 CPDF_Stream* pData = new CPDF_Stream(nullptr, 0, nullptr); |
| 207 pData->InitStreamFromFile(pfileWrite.get(), pDataDict); | 207 pData->InitStreamFromFile(pfileWrite.get(), pDataDict); |
| 208 pPDFDocument->AddIndirectObject(pData); | 208 pPDFDocument->AddIndirectObject(pData); |
| 209 iLast = pArray->GetCount() - 2; | 209 iLast = pArray->GetCount() - 2; |
| 210 pArray->InsertAt(iLast, new CPDF_String("form", FALSE)); | 210 pArray->InsertAt(iLast, new CPDF_String("form", FALSE)); |
| 211 pArray->InsertAt(iLast + 1, pData, pPDFDocument); | 211 pArray->InsertAt(iLast + 1, pData, pPDFDocument); |
| 212 } | 212 } |
| 213 fileList->push_back(std::move(pfileWrite)); | 213 fileList->push_back(std::move(pfileWrite)); |
| 214 } | 214 } |
| 215 } | 215 } |
| 216 return true; | 216 return true; |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 flags = 0; | 283 flags = 0; |
| 284 | 284 |
| 285 CPDF_Creator FileMaker(pPDFDoc); | 285 CPDF_Creator FileMaker(pPDFDoc); |
| 286 if (bSetVersion) | 286 if (bSetVersion) |
| 287 FileMaker.SetFileVersion(fileVerion); | 287 FileMaker.SetFileVersion(fileVerion); |
| 288 if (flags == FPDF_REMOVE_SECURITY) { | 288 if (flags == FPDF_REMOVE_SECURITY) { |
| 289 flags = 0; | 289 flags = 0; |
| 290 FileMaker.RemoveSecurity(); | 290 FileMaker.RemoveSecurity(); |
| 291 } | 291 } |
| 292 | 292 |
| 293 CFX_IFileWrite* pStreamWrite = NULL; | 293 CFX_IFileWrite* pStreamWrite = new CFX_IFileWrite; |
| 294 pStreamWrite = new CFX_IFileWrite; | |
| 295 pStreamWrite->Init(pFileWrite); | 294 pStreamWrite->Init(pFileWrite); |
| 296 bool bRet = FileMaker.Create(pStreamWrite, flags); | 295 bool bRet = FileMaker.Create(pStreamWrite, flags); |
| 297 #ifdef PDF_ENABLE_XFA | 296 #ifdef PDF_ENABLE_XFA |
| 298 SendPostSaveToXFADoc(pDoc); | 297 SendPostSaveToXFADoc(pDoc); |
| 299 #endif // PDF_ENABLE_XFA | 298 #endif // PDF_ENABLE_XFA |
| 300 pStreamWrite->Release(); | 299 pStreamWrite->Release(); |
| 301 return bRet; | 300 return bRet; |
| 302 } | 301 } |
| 303 | 302 |
| 304 } // namespace | 303 } // namespace |
| 305 | 304 |
| 306 DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy(FPDF_DOCUMENT document, | 305 DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy(FPDF_DOCUMENT document, |
| 307 FPDF_FILEWRITE* pFileWrite, | 306 FPDF_FILEWRITE* pFileWrite, |
| 308 FPDF_DWORD flags) { | 307 FPDF_DWORD flags) { |
| 309 return FPDF_Doc_Save(document, pFileWrite, flags, FALSE, 0); | 308 return FPDF_Doc_Save(document, pFileWrite, flags, FALSE, 0); |
| 310 } | 309 } |
| 311 | 310 |
| 312 DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document, | 311 DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document, |
| 313 FPDF_FILEWRITE* pFileWrite, | 312 FPDF_FILEWRITE* pFileWrite, |
| 314 FPDF_DWORD flags, | 313 FPDF_DWORD flags, |
| 315 int fileVersion) { | 314 int fileVersion) { |
| 316 return FPDF_Doc_Save(document, pFileWrite, flags, TRUE, fileVersion); | 315 return FPDF_Doc_Save(document, pFileWrite, flags, TRUE, fileVersion); |
| 317 } | 316 } |
| OLD | NEW |