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 "../../public/fpdf_edit.h" 8#include "../../public/fpdf_save.h" 9#include "../include/fsdk_define.h" 10 11#if _FX_OS_ == _FX_ANDROID_ 12#include "time.h" 13#else 14#include <ctime> 15#endif 16 17class CFX_IFileWrite FX_FINAL : public IFX_StreamWrite 18{ 19 20public: 21 CFX_IFileWrite(); 22 FX_BOOL Init( FPDF_FILEWRITE * pFileWriteStruct ); 23 virtual FX_BOOL WriteBlock(const void* pData, size_t size) FX_OVERRIDE; 24 virtual void Release() FX_OVERRIDE {} 25 26protected: 27 FPDF_FILEWRITE* m_pFileWriteStruct; 28}; 29 30CFX_IFileWrite::CFX_IFileWrite() 31{ 32 m_pFileWriteStruct = NULL; 33} 34 35FX_BOOL CFX_IFileWrite::Init( FPDF_FILEWRITE * pFileWriteStruct ) 36{ 37 if (!pFileWriteStruct) 38 return FALSE; 39 else 40 { 41 m_pFileWriteStruct = pFileWriteStruct; 42 } 43 return TRUE; 44} 45 46FX_BOOL CFX_IFileWrite::WriteBlock(const void* pData, size_t size) 47{ 48 if (m_pFileWriteStruct) 49 { 50 m_pFileWriteStruct->WriteBlock( m_pFileWriteStruct, pData, size ); 51 return TRUE; 52 } 53 else 54 return FALSE; 55} 56 57FPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,FPDF_DWORD flags, FPDF_BOOL bSetVersion, 58 int fileVerion) 59{ 60 CPDF_Document* pDoc = (CPDF_Document*)document; 61 if (!pDoc) 62 return 0; 63 64 if ( flags < FPDF_INCREMENTAL || flags > FPDF_REMOVE_SECURITY ) 65 { 66 flags = 0; 67 } 68 69 CPDF_Creator FileMaker(pDoc); 70 if(bSetVersion) 71 FileMaker.SetFileVersion(fileVerion); 72 if(flags == FPDF_REMOVE_SECURITY) 73 { 74 flags = 0; 75 FileMaker.RemoveSecurity(); 76 } 77 CFX_IFileWrite* pStreamWrite = NULL; 78 FX_BOOL bRet; 79 pStreamWrite = new CFX_IFileWrite; 80 pStreamWrite->Init( pFileWrite ); 81 bRet = FileMaker.Create(pStreamWrite, flags); 82 delete pStreamWrite; 83 return bRet; 84} 85 86DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite, 87 FPDF_DWORD flags ) 88{ 89 return _FPDF_Doc_Save(document, pFileWrite, flags, FALSE , 0); 90} 91 92 93DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite, 94 FPDF_DWORD flags, int fileVersion) 95{ 96 return _FPDF_Doc_Save(document, pFileWrite, flags, TRUE , fileVersion); 97} 98