// 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 _REPORT_H_
#define _REPORT_H_

class Report : public CJS_EmbedObj
{
public:
	Report(CJS_Object * pJSObject);
	virtual ~Report();

public:
	FX_BOOL save(OBJ_METHOD_PARAMS);
	FX_BOOL writeText(OBJ_METHOD_PARAMS);
};

class CJS_Report : public CJS_Object
{
public:
	CJS_Report(JSFXObject  pObject) : CJS_Object(pObject){};
	virtual ~CJS_Report(){};

public:
	DECLARE_JS_CLASS(CJS_Report);

	JS_STATIC_METHOD(save, Report)
	JS_STATIC_METHOD(writeText, Report);
};

#endif //_REPORT_H_

