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