1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file. 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fsdk_define.h" 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fpdfsave.h" 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fpdfedit.h" 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if _FX_OS_ == _FX_ANDROID_ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "time.h" 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <ctime> 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CFX_IFileWrite:public IFX_StreamWrite 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic: 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_IFileWrite(); 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL Init( FPDF_FILEWRITE * pFileWriteStruct ); 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual FX_BOOL WriteBlock(const void* pData, size_t size); 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov virtual void Release(){}; 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected: 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FPDF_FILEWRITE* m_pFileWriteStruct; 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}; 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_IFileWrite::CFX_IFileWrite() 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFileWriteStruct = NULL; 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFX_IFileWrite::Init( FPDF_FILEWRITE * pFileWriteStruct ) 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pFileWriteStruct) 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFileWriteStruct = pFileWriteStruct; 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CFX_IFileWrite::WriteBlock(const void* pData, size_t size) 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (m_pFileWriteStruct) 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov m_pFileWriteStruct->WriteBlock( m_pFileWriteStruct, pData, size ); 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return TRUE; 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return FALSE; 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFPDF_BOOL _FPDF_Doc_Save(FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,FPDF_DWORD flags, FPDF_BOOL bSetVersion, 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov int fileVerion) 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Document* pDoc = (CPDF_Document*)document; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!pDoc) 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 0; 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( flags < 1 || flags > 2 ) 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov flags = 0; 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CPDF_Creator FileMaker(pDoc); 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(bSetVersion) 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FileMaker.SetFileVersion(fileVerion); 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov CFX_IFileWrite* pStreamWrite = NULL; 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FX_BOOL bRet; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pStreamWrite = new CFX_IFileWrite; 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pStreamWrite->Init( pFileWrite ); 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bRet = FileMaker.Create(pStreamWrite, flags); 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov delete pStreamWrite; 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return bRet; 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite, 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FPDF_DWORD flags ) 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return _FPDF_Doc_Save(document, pFileWrite, flags, FALSE , 0); 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion( FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite, 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FPDF_DWORD flags, int fileVersion) 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return _FPDF_Doc_Save(document, pFileWrite, flags, TRUE , fileVersion); 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 92