Bug 180846 Implement page emitter framework.
Implement page emitter framework to layout engine. The framework was designed before postscript emitter was implemented. The outline of the framework is as following: 1. PageDeviceRender determines if new pages should be created and how to compute absolute position where items should be rendered in a page. 2. If a new page need to be created, PageDeviceRender informs the page device (an instance of IPagableDevice) to create a new page which is an instance of IPage. 3. When an item need be rendered in a page, PageDeviceRender computes absolute position of the item in the page and inform the page (IPage) to render the item at the position. 4. As a protocol, position is represented as coordinates, height and width in a coordinate system with origin at the left upper corner. For a specific emitter, the coordinates, height and width should be converted according to the special coordinate system of the emitter. Under this framework, algorithm of computing position is reused and emitters needn't to compute the absolute position by itself. Instead, it only needs to provide algorithm about how to create new pages and how to render items at specified position in a page. Postscript emitter is implemented under this framework, while the framework should be immigated into layout engine so that all page-emitter (pdf, postscript, etc.) can use this framework.
engine/org.eclipse.birt.report.engine.emitter.postscript/src/org/eclipse/birt/report/engine/emitter/postscript/device/PostscriptPage.java
* @see org.eclipse.birt.report.engine.emitter.postscript.page.IPageDevice#drawPageBackgroundColor(java.awt.Color)
	 */
	public void drawPageBackgroundColor( Color color )
	{
		writer.fillPage( color );
	}
	/* (non-Javadoc)
	 * @see org.eclipse.birt.report.engine.emitter.postscript.page.IPageDevice#drawBackgroundImage(float, float, float, float, java.lang.String, java.lang.String, float, float)
	 */
	public void drawBackgroundImage( float x, float y, float width,
			float height, String repeat, String imageUrl, float absPosX,
			float absPosY ) throws IOException
	{
		writer.drawBackgroundImage( imageUrl, x, y, width, height, absPosX,
				absPosY, repeat );
	}
	public void clip( float startX, float startY, float width, float height )
	{
		writer.clipRect( startX, startY, width, height );
	}
	public void clipSave( )
	{
		writer.clipSave( );
	}
	public void clipRestore( )
	{
		writer.clipRestore( );
	}
}