// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
 
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef _FPDFSAVE_H_
#define _FPDFSAVE_H_

#include "fpdfview.h"

#ifdef __cplusplus
extern "C" {
#endif


// Structure for custom file write
struct FPDF_FILEWRITE{

	//
	//Version number of the interface. Currently must be 1.
	//
	int version;

	// 
	// Method: WriteBlock
	//			Output a block of data in your custom way.
	// Interface Version:
	//			1
	// Implementation Required:
	//			Yes
	// Comments:
	//			Called by function FPDF_SaveDocument
	// Parameters:
	//			pThis		-	Pointer to the structure itself
	//			pData		-	Pointer to a buffer to output
	//			size		-	The size of the buffer.
	// Return value:
	//			Should be non-zero if successful, zero for error.
	//
	int		(*WriteBlock)( FPDF_FILEWRITE* pThis, const void* pData, unsigned long size);

};


/** @brief Incremental. */
#define FPDF_INCREMENTAL		1
/** @brief No Incremental. */
#define FPDF_NO_INCREMENTAL		2


// Function: FPDF_SaveAsCopy
//			Saves the copy of specified document in custom way.
// Parameters:	
//			document		-	Handle to document. Returned by FPDF_LoadDocument and FPDF_CreateNewDocument.
//			pFileWrite		-	A pointer to a custom file write structure.
//			flags			-	The creating flags.
// Return value:
//			TRUE for succeed, FALSE for failed.
//
DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveAsCopy(	FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,
												FPDF_DWORD flags );

// Function: FPDF_SaveWithVersion
//			Same as function ::FPDF_SaveAsCopy, except the file version of the saved document could be specified by user.
// Parameters:	
//			document		-	Handle to document.
//			pFileWrite		-	A pointer to a custom file write structure.
//			flags			-	The creating flags.
//			fileVersion		-	The PDF file version. File version: 14 for 1.4, 15 for 1.5, ...
// Return value:
//			TRUE if succeed, FALSE if failed.
//
DLLEXPORT FPDF_BOOL STDCALL FPDF_SaveWithVersion(FPDF_DOCUMENT document,FPDF_FILEWRITE * pFileWrite,
	FPDF_DWORD flags, int fileVersion);

#ifdef __cplusplus
};
#endif

#endif //_FPDFSAVE_H_
