blob: c8383a3ceb250181690dae12a9303ccdef97ea77 [file] [log] [blame]
<?php
/**
* File containing the ezcDocumentPdfDriver class
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @package Document
* @version //autogen//
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
*/
/**
* Abstract base class for driver implementations.
*
* Driver implement the actual creation of PDF documents. They offer a simple
* unified API for PDF creation and proxy them to the actual PDF
* implementation, which will create the binary data.
*
* The unit used for all values passed to methods of this class is milimeters.
* The extending drivers need to transform these values in a representation
* they can use.
*
* @package Document
* @version //autogen//
*/
abstract class ezcDocumentPdfDriver
{
/**
* Normal text
*/
const FONT_PLAIN = 0;
/**
* Bold text
*/
const FONT_BOLD = 1;
/**
* Italic text
*/
const FONT_OBLIQUE = 2;
/**
* PDF options
*
* @var ezcDocumentPdfOptions
*/
protected $options;
/**
* Construct driver
*
* Creates a new PDF driver.
*
* @return void
*/
public function __construct()
{
$this->options = new ezcDocumentPdfOptions();
}
/**
* Set compression
*
* Set whether the generated PDF should be compressed or not.
*
* @param bool $compress
* @return void
*/
public function setOptions( ezcDocumentPdfOptions $options )
{
$this->options = $options;
}
/**
* Create a new page
*
* Create a new page in the PDF document with the given width and height.
*
* @param float $width
* @param float $height
* @return void
*/
abstract public function createPage( $width, $height );
/**
* Set text formatting option
*
* Set a text formatting option. The names of the options are the same used
* in the PCSS files and need to be translated by the driver to the proper
* backend calls.
*
*
* @param string $type
* @param mixed $value
* @return void
*/
abstract public function setTextFormatting( $type, $value );
/**
* Calculate the rendered width of the current word
*
* Calculate the width of the passed word, using the currently set text
* formatting options.
*
* @param string $word
* @return float
*/
abstract public function calculateWordWidth( $word );
/**
* Get current line height
*
* Return the current line height in millimeter based on the current font
* and text rendering settings.
*
* @return float
*/
abstract public function getCurrentLineHeight();
/**
* Draw word at given position
*
* Draw the given word at the given position using the currently set text
* formatting options.
*
* The coordinate specifies the left bottom edge of the words bounding box.
*
* @param float $x
* @param float $y
* @param string $word
* @return void
*/
abstract public function drawWord( $x, $y, $word );
/**
* Draw image
*
* Draw image at the defined position. The first parameter is the
* (absolute) path to the image file, and the second defines the type of
* the image. If the driver cannot handle this aprticular image type, it
* should throw an exception.
*
* The further parameters define the location where the image should be
* rendered and the dimensions of the image in the rendered output. The
* dimensions do not neccesarily match the real image dimensions, and might
* require some kind of scaling inside the driver depending on the used
* backend.
*
* @param string $file
* @param string $type
* @param float $x
* @param float $y
* @param float $width
* @param float $height
* @return void
*/
abstract public function drawImage( $file, $type, $x, $y, $width, $height );
/**
* Draw a fileld polygon
*
* Draw any filled polygon, filled using the defined color. The color
* should be passed as an array with the keys "red", "green", "blue" and
* optionally "alpha". Each key should have a value between 0 and 1
* associated.
*
* The polygon itself is specified as an array of two-tuples, specifying
* the x and y coordinate of the point.
*
* @param array $points
* @param array $color
* @return void
*/
public function drawPolygon( array $points, array $color )
{
// @apichange This method should be declared abstract, but can't be
// because this would change the internal API.
return;
}
/**
* Draw a polyline
*
* Draw any non-filled polygon, filled using the defined color. The color
* should be passed as an array with the keys "red", "green", "blue" and
* optionally "alpha". Each key should have a value between 0 and 1
* associated.
*
* The polyline itself is specified as an array of two-tuples, specifying
* the x and y coordinate of the point.
*
* The thrid parameter defines the width of the border and the last
* parameter may optionally be set to false to not close the polygon (draw
* another line from the last point to the first one).
*
* @param array $points
* @param array $color
* @param float $width
* @param bool $close
* @return void
*/
public function drawPolyline( array $points, array $color, $width, $close = true )
{
// @apichange This method should be declared abstract, but can't be
// because this would change the internal API.
return;
}
/**
* Add an external link
*
* Add an external link to the rectangle specified by its top-left
* position, width and height. The last parameter is the actual URL to link
* to.
*
* @param float $x
* @param float $y
* @param float $width
* @param float $height
* @param string $url
* @return void
*/
public function addExternalLink( $x, $y, $width, $height, $url )
{
// @apichange This method should be declared abstract, but can't be
// because this would change the internal API.
return;
}
/**
* Add an internal link
*
* Add an internal link to the rectangle specified by its top-left
* position, width and height. The last parameter is the target identifier
* to link to.
*
* @param float $x
* @param float $y
* @param float $width
* @param float $height
* @param string $target
* @return void
*/
public function addInternalLink( $x, $y, $width, $height, $target )
{
// @apichange This method should be declared abstract, but can't be
// because this would change the internal API.
return;
}
/**
* Add an internal link target
*
* Add an internal link to the current page. The last parameter
* is the target identifier.
*
* @param string $id
* @return void
*/
public function addInternalLinkTarget( $id )
{
// @apichange This method should be declared abstract, but can't be
// because this would change the internal API.
return;
}
/**
* Register a font
*
* Registers a font, which can be used by its name later in the driver. The
* given type is either self::FONT_PLAIN or a bitwise combination of self::FONT_BOLD
* and self::FONT_OBLIQUE.
*
* The third paramater specifies an array of pathes with references to font
* definition files. Multiple pathes may be specified to provide the same
* font using different types, because not all drivers may process all font
* types.
*
* @param string $name
* @param int $type
* @param array $pathes
* @return void
*/
public function registerFont( $name, $type, array $pathes )
{
// @apichange This method should be declared abstract, but can't be
// because this would change the internal API.
return;
}
/**
* Set metadata
*
* Set document meta data. The meta data types are identified by a list of
* keys, common to PDF, like: title, author, subject, created, modified.
*
* The values are passed like embedded in the docbook document and might
* need to be reformatted.
*
* @param string $key
* @param string $value
* @return void
*/
public function setMetaData( $key, $value )
{
// @apichange This method should be declared abstract, but can't be
// because this would change the internal API.
return;
}
/**
* Generate and return PDF
*
* Return the generated binary PDF content as a string.
*
* @return string
*/
abstract public function save();
}
?>