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