| 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_edit.h" | 7 #include "../../public/fpdf_edit.h" |
| 8 #include "../../public/fpdf_formfill.h" | 8 #include "../../public/fpdf_formfill.h" |
| 9 #include "../../public/fpdf_save.h" | 9 #include "../../public/fpdf_save.h" |
| 10 #include "../include/fsdk_define.h" | 10 #include "../include/fsdk_define.h" |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 pContext->UpdateChecksum((IFX_FileRead*)pTemplate); | 128 pContext->UpdateChecksum((IFX_FileRead*)pTemplate); |
| 129 pTemplate->Release(); | 129 pTemplate->Release(); |
| 130 } | 130 } |
| 131 #endif | 131 #endif |
| 132 CPDF_Stream* pFormStream = NULL; | 132 CPDF_Stream* pFormStream = NULL; |
| 133 CPDF_Stream* pDataSetsStream = NULL; | 133 CPDF_Stream* pDataSetsStream = NULL; |
| 134 if (iFormIndex != -1) { | 134 if (iFormIndex != -1) { |
| 135 // Get form CPDF_Stream | 135 // Get form CPDF_Stream |
| 136 CPDF_Object* pFormPDFObj = pArray->GetElement(iFormIndex); | 136 CPDF_Object* pFormPDFObj = pArray->GetElement(iFormIndex); |
| 137 if (pFormPDFObj->GetType() == PDFOBJ_REFERENCE) { | 137 if (pFormPDFObj->GetType() == PDFOBJ_REFERENCE) { |
| 138 CPDF_Reference* pFormRefObj = (CPDF_Reference*)pFormPDFObj; | |
| 139 CPDF_Object* pFormDircetObj = pFormPDFObj->GetDirect(); | 138 CPDF_Object* pFormDircetObj = pFormPDFObj->GetDirect(); |
| 140 if (NULL != pFormDircetObj && | 139 if (NULL != pFormDircetObj && |
| 141 pFormDircetObj->GetType() == PDFOBJ_STREAM) { | 140 pFormDircetObj->GetType() == PDFOBJ_STREAM) { |
| 142 pFormStream = (CPDF_Stream*)pFormDircetObj; | 141 pFormStream = (CPDF_Stream*)pFormDircetObj; |
| 143 } | 142 } |
| 144 } else if (pFormPDFObj->GetType() == PDFOBJ_STREAM) { | 143 } else if (pFormPDFObj->GetType() == PDFOBJ_STREAM) { |
| 145 pFormStream = (CPDF_Stream*)pFormPDFObj; | 144 pFormStream = (CPDF_Stream*)pFormPDFObj; |
| 146 } | 145 } |
| 147 } | 146 } |
| 148 | 147 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 178 pContext->UpdateChecksum((IFX_FileRead*)pDsfileWrite); | 177 pContext->UpdateChecksum((IFX_FileRead*)pDsfileWrite); |
| 179 pContext->FinishChecksum(); | 178 pContext->FinishChecksum(); |
| 180 #endif | 179 #endif |
| 181 CPDF_Dictionary* pDataDict = new CPDF_Dictionary; | 180 CPDF_Dictionary* pDataDict = new CPDF_Dictionary; |
| 182 if (iDataSetsIndex != -1) { | 181 if (iDataSetsIndex != -1) { |
| 183 if (pDataSetsStream) | 182 if (pDataSetsStream) |
| 184 pDataSetsStream->InitStream(pDsfileWrite, pDataDict); | 183 pDataSetsStream->InitStream(pDsfileWrite, pDataDict); |
| 185 } else { | 184 } else { |
| 186 CPDF_Stream* pData = new CPDF_Stream(NULL, 0, NULL); | 185 CPDF_Stream* pData = new CPDF_Stream(NULL, 0, NULL); |
| 187 pData->InitStream(pDsfileWrite, pDataDict); | 186 pData->InitStream(pDsfileWrite, pDataDict); |
| 188 FX_DWORD AppStreamobjnum = pPDFDocument->AddIndirectObject(pData); | 187 pPDFDocument->AddIndirectObject(pData); |
| 189 CPDF_Reference* pRef = | 188 iLast = pArray->GetCount() - 2; |
| 190 (CPDF_Reference*)pPDFDocument->GetIndirectObject(AppStreamobjnum); | 189 pArray->InsertAt(iLast, CPDF_String::Create("datasets")); |
| 191 { | 190 pArray->InsertAt(iLast + 1, pData, pPDFDocument); |
| 192 iLast = pArray->GetCount() - 2; | |
| 193 pArray->InsertAt(iLast, CPDF_String::Create("datasets")); | |
| 194 pArray->InsertAt(iLast + 1, pData, pPDFDocument); | |
| 195 } | |
| 196 } | 191 } |
| 197 fileList.Add(pDsfileWrite); | 192 fileList.Add(pDsfileWrite); |
| 198 } | 193 } |
| 199 } | 194 } |
| 200 | 195 |
| 201 // L"form" | 196 // L"form" |
| 202 { | 197 { |
| 203 IFX_FileStream* pfileWrite = FX_CreateMemoryStream(); | 198 IFX_FileStream* pfileWrite = FX_CreateMemoryStream(); |
| 204 if (NULL == pfileWrite) { | 199 if (NULL == pfileWrite) { |
| 205 pContext->Release(); | 200 pContext->Release(); |
| 206 return FALSE; | 201 return FALSE; |
| 207 } | 202 } |
| 208 if (pXFADocHandler->SavePackage(pXFADocView->GetDoc(), | 203 if (pXFADocHandler->SavePackage(pXFADocView->GetDoc(), |
| 209 CFX_WideStringC(L"form"), pfileWrite, | 204 CFX_WideStringC(L"form"), pfileWrite, |
| 210 pContext) && | 205 pContext) && |
| 211 pfileWrite > 0) { | 206 pfileWrite > 0) { |
| 212 CPDF_Dictionary* pDataDict = new CPDF_Dictionary; | 207 CPDF_Dictionary* pDataDict = new CPDF_Dictionary; |
| 213 if (iFormIndex != -1) { | 208 if (iFormIndex != -1) { |
| 214 if (pFormStream) | 209 if (pFormStream) |
| 215 pFormStream->InitStream(pfileWrite, pDataDict); | 210 pFormStream->InitStream(pfileWrite, pDataDict); |
| 216 } else { | 211 } else { |
| 217 CPDF_Stream* pData = new CPDF_Stream(NULL, 0, NULL); | 212 CPDF_Stream* pData = new CPDF_Stream(NULL, 0, NULL); |
| 218 pData->InitStream(pfileWrite, pDataDict); | 213 pData->InitStream(pfileWrite, pDataDict); |
| 219 FX_DWORD AppStreamobjnum = pPDFDocument->AddIndirectObject(pData); | 214 pPDFDocument->AddIndirectObject(pData); |
| 220 CPDF_Reference* pRef = | 215 iLast = pArray->GetCount() - 2; |
| 221 (CPDF_Reference*)pPDFDocument->GetIndirectObject(AppStreamobjnum); | 216 pArray->InsertAt(iLast, CPDF_String::Create("form")); |
| 222 { | 217 pArray->InsertAt(iLast + 1, pData, pPDFDocument); |
| 223 iLast = pArray->GetCount() - 2; | |
| 224 pArray->InsertAt(iLast, CPDF_String::Create("form")); | |
| 225 pArray->InsertAt(iLast + 1, pData, pPDFDocument); | |
| 226 } | |
| 227 } | 218 } |
| 228 fileList.Add(pfileWrite); | 219 fileList.Add(pfileWrite); |
| 229 } | 220 } |
| 230 } | 221 } |
| 231 pContext->Release(); | 222 pContext->Release(); |
| 232 #endif // PDF_ENABLE_XFA | 223 #endif // PDF_ENABLE_XFA |
| 233 | 224 |
| 234 return TRUE; | 225 return TRUE; |
| 235 } | 226 } |
| 236 | 227 |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 FPDF_DWORD flags) { | 327 FPDF_DWORD flags) { |
| 337 return _FPDF_Doc_Save(document, pFileWrite, flags, FALSE, 0); | 328 return _FPDF_Doc_Save(document, pFileWrite, flags, FALSE, 0); |
| 338 } | 329 } |
| 339 | 330 |
| 340 DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document, | 331 DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document, |
| 341 FPDF_FILEWRITE* pFileWrite, | 332 FPDF_FILEWRITE* pFileWrite, |
| 342 FPDF_DWORD flags, | 333 FPDF_DWORD flags, |
| 343 int fileVersion) { | 334 int fileVersion) { |
| 344 return _FPDF_Doc_Save(document, pFileWrite, flags, TRUE, fileVersion); | 335 return _FPDF_Doc_Save(document, pFileWrite, flags, TRUE, fileVersion); |
| 345 } | 336 } |
| OLD | NEW |