2023-05-16 10:47:08 +08:00

693 lines
13 KiB
PHP

<?php
/**
* This file is part of PHPWord - A pure PHP library for reading and writing
* word processing documents.
*
* PHPWord is free software distributed under the terms of the GNU Lesser
* General Public License version 3 as published by the Free Software Foundation.
*
* For the full copyright and license information, please read the LICENSE
* file that was distributed with this source code. For the full list of
* contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
*
* @see https://github.com/PHPOffice/PHPWord
* @copyright 2010-2018 PHPWord contributors
* @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
*/
namespace PhpOffice\PhpWord\Style;
use PhpOffice\PhpWord\SimpleType\Jc;
/**
* Frame defines the size and position of an object
*
* Width, height, left/hpos, top/vpos, hrel, vrel, wrap, zindex
*
* @since 0.12.0
* @todo Make existing style (image, textbox, etc) use this style
*/
class Frame extends AbstractStyle
{
/**
* Length unit
*
* @const string
*/
const UNIT_PT = 'pt'; // Mostly for shapes
const UNIT_PX = 'px'; // Mostly for images
/**
* General positioning options.
*
* @const string
*/
const POS_ABSOLUTE = 'absolute';
const POS_RELATIVE = 'relative';
/**
* Horizontal/vertical value
*
* @const string
*/
const POS_CENTER = 'center';
const POS_LEFT = 'left';
const POS_RIGHT = 'right';
const POS_TOP = 'top';
const POS_BOTTOM = 'bottom';
const POS_INSIDE = 'inside';
const POS_OUTSIDE = 'outside';
/**
* Position relative to
*
* @const string
*/
const POS_RELTO_MARGIN = 'margin';
const POS_RELTO_PAGE = 'page';
const POS_RELTO_COLUMN = 'column'; // horizontal only
const POS_RELTO_CHAR = 'char'; // horizontal only
const POS_RELTO_TEXT = 'text'; // vertical only
const POS_RELTO_LINE = 'line'; // vertical only
const POS_RELTO_LMARGIN = 'left-margin-area'; // horizontal only
const POS_RELTO_RMARGIN = 'right-margin-area'; // horizontal only
const POS_RELTO_TMARGIN = 'top-margin-area'; // vertical only
const POS_RELTO_BMARGIN = 'bottom-margin-area'; // vertical only
const POS_RELTO_IMARGIN = 'inner-margin-area';
const POS_RELTO_OMARGIN = 'outer-margin-area';
/**
* Wrap type
*
* @const string
*/
const WRAP_INLINE = 'inline';
const WRAP_SQUARE = 'square';
const WRAP_TIGHT = 'tight';
const WRAP_THROUGH = 'through';
const WRAP_TOPBOTTOM = 'topAndBottom';
const WRAP_BEHIND = 'behind';
const WRAP_INFRONT = 'infront';
/**
* @var string
*/
private $alignment = '';
/**
* Unit
*
* @var string
*/
private $unit = 'pt';
/**
* Width
*
* @var int|float
*/
private $width;
/**
* Height
*
* @var int|float
*/
private $height;
/**
* Leftmost (horizontal) position
*
* @var int|float
*/
private $left = 0;
/**
* Topmost (vertical) position
*
* @var int|float
*/
private $top = 0;
/**
* Position type: absolute|relative
*
* @var string
*/
private $pos;
/**
* Horizontal position
*
* @var string
*/
private $hPos;
/**
* Horizontal position relative to
*
* @var string
*/
private $hPosRelTo;
/**
* Vertical position
*
* @var string
*/
private $vPos;
/**
* Vertical position relative to
*
* @var string
*/
private $vPosRelTo;
/**
* Wrap type
*
* @var string
*/
private $wrap;
/**
* Top wrap distance
*
* @var float
*/
private $wrapDistanceTop;
/**
* Bottom wrap distance
*
* @var float
*/
private $wrapDistanceBottom;
/**
* Left wrap distance
*
* @var float
*/
private $wrapDistanceLeft;
/**
* Right wrap distance
*
* @var float
*/
private $wrapDistanceRight;
/**
* Vertically raised or lowered text
*
* @var int
* @see http://www.datypic.com/sc/ooxml/e-w_position-1.html
*/
private $position;
/**
* Create a new instance
*
* @param array $style
*/
public function __construct($style = array())
{
$this->setStyleByArray($style);
}
/**
* @since 0.13.0
*
* @return string
*/
public function getAlignment()
{
return $this->alignment;
}
/**
* @since 0.13.0
*
* @param string $value
*
* @return self
*/
public function setAlignment($value)
{
if (Jc::isValid($value)) {
$this->alignment = $value;
}
return $this;
}
/**
* @deprecated 0.13.0 Use the `getAlignment` method instead.
*
* @return string
*
* @codeCoverageIgnore
*/
public function getAlign()
{
return $this->getAlignment();
}
/**
* @deprecated 0.13.0 Use the `setAlignment` method instead.
*
* @param string $value
*
* @return self
*
* @codeCoverageIgnore
*/
public function setAlign($value = null)
{
return $this->setAlignment($value);
}
/**
* Get unit
*
* @return string
*/
public function getUnit()
{
return $this->unit;
}
/**
* Set unit
*
* @param string $value
* @return self
*/
public function setUnit($value)
{
$this->unit = $value;
return $this;
}
/**
* Get width
*
* @return int|float
*/
public function getWidth()
{
return $this->width;
}
/**
* Set width
*
* @param int|float $value
* @return self
*/
public function setWidth($value = null)
{
$this->width = $this->setNumericVal($value, null);
return $this;
}
/**
* Get height
*
* @return int|float
*/
public function getHeight()
{
return $this->height;
}
/**
* Set height
*
* @param int|float $value
* @return self
*/
public function setHeight($value = null)
{
$this->height = $this->setNumericVal($value, null);
return $this;
}
/**
* Get left
*
* @return int|float
*/
public function getLeft()
{
return $this->left;
}
/**
* Set left
*
* @param int|float $value
* @return self
*/
public function setLeft($value = 0)
{
$this->left = $this->setNumericVal($value, 0);
return $this;
}
/**
* Get topmost position
*
* @return int|float
*/
public function getTop()
{
return $this->top;
}
/**
* Set topmost position
*
* @param int|float $value
* @return self
*/
public function setTop($value = 0)
{
$this->top = $this->setNumericVal($value, 0);
return $this;
}
/**
* Get position type
*
* @return string
*/
public function getPos()
{
return $this->pos;
}
/**
* Set position type
*
* @param string $value
* @return self
*/
public function setPos($value)
{
$enum = array(
self::POS_ABSOLUTE,
self::POS_RELATIVE,
);
$this->pos = $this->setEnumVal($value, $enum, $this->pos);
return $this;
}
/**
* Get horizontal position
*
* @return string
*/
public function getHPos()
{
return $this->hPos;
}
/**
* Set horizontal position
*
* @since 0.12.0 "absolute" option is available.
*
* @param string $value
* @return self
*/
public function setHPos($value)
{
$enum = array(
self::POS_ABSOLUTE,
self::POS_LEFT,
self::POS_CENTER,
self::POS_RIGHT,
self::POS_INSIDE,
self::POS_OUTSIDE,
);
$this->hPos = $this->setEnumVal($value, $enum, $this->hPos);
return $this;
}
/**
* Get vertical position
*
* @return string
*/
public function getVPos()
{
return $this->vPos;
}
/**
* Set vertical position
*
* @since 0.12.0 "absolute" option is available.
*
* @param string $value
* @return self
*/
public function setVPos($value)
{
$enum = array(
self::POS_ABSOLUTE,
self::POS_TOP,
self::POS_CENTER,
self::POS_BOTTOM,
self::POS_INSIDE,
self::POS_OUTSIDE,
);
$this->vPos = $this->setEnumVal($value, $enum, $this->vPos);
return $this;
}
/**
* Get horizontal position relative to
*
* @return string
*/
public function getHPosRelTo()
{
return $this->hPosRelTo;
}
/**
* Set horizontal position relative to
*
* @param string $value
* @return self
*/
public function setHPosRelTo($value)
{
$enum = array(
self::POS_RELTO_MARGIN,
self::POS_RELTO_PAGE,
self::POS_RELTO_COLUMN,
self::POS_RELTO_CHAR,
self::POS_RELTO_LMARGIN,
self::POS_RELTO_RMARGIN,
self::POS_RELTO_IMARGIN,
self::POS_RELTO_OMARGIN,
);
$this->hPosRelTo = $this->setEnumVal($value, $enum, $this->hPosRelTo);
return $this;
}
/**
* Get vertical position relative to
*
* @return string
*/
public function getVPosRelTo()
{
return $this->vPosRelTo;
}
/**
* Set vertical position relative to
*
* @param string $value
* @return self
*/
public function setVPosRelTo($value)
{
$enum = array(
self::POS_RELTO_MARGIN,
self::POS_RELTO_PAGE,
self::POS_RELTO_TEXT,
self::POS_RELTO_LINE,
self::POS_RELTO_TMARGIN,
self::POS_RELTO_BMARGIN,
self::POS_RELTO_IMARGIN,
self::POS_RELTO_OMARGIN,
);
$this->vPosRelTo = $this->setEnumVal($value, $enum, $this->vPosRelTo);
return $this;
}
/**
* Get wrap type
*
* @return string
*/
public function getWrap()
{
return $this->wrap;
}
/**
* Set wrap type
*
* @param string $value
* @return self
*/
public function setWrap($value)
{
$enum = array(
self::WRAP_INLINE,
self::WRAP_SQUARE,
self::WRAP_TIGHT,
self::WRAP_THROUGH,
self::WRAP_TOPBOTTOM,
self::WRAP_BEHIND,
self::WRAP_INFRONT,
);
$this->wrap = $this->setEnumVal($value, $enum, $this->wrap);
return $this;
}
/**
* Get top distance from text wrap
*
* @return float
*/
public function getWrapDistanceTop()
{
return $this->wrapDistanceTop;
}
/**
* Set top distance from text wrap
*
* @param int $value
* @return self
*/
public function setWrapDistanceTop($value = null)
{
$this->wrapDistanceTop = $this->setFloatVal($value, null);
return $this;
}
/**
* Get bottom distance from text wrap
*
* @return float
*/
public function getWrapDistanceBottom()
{
return $this->wrapDistanceBottom;
}
/**
* Set bottom distance from text wrap
*
* @param float $value
* @return self
*/
public function setWrapDistanceBottom($value = null)
{
$this->wrapDistanceBottom = $this->setFloatVal($value, null);
return $this;
}
/**
* Get left distance from text wrap
*
* @return float
*/
public function getWrapDistanceLeft()
{
return $this->wrapDistanceLeft;
}
/**
* Set left distance from text wrap
*
* @param float $value
* @return self
*/
public function setWrapDistanceLeft($value = null)
{
$this->wrapDistanceLeft = $this->setFloatVal($value, null);
return $this;
}
/**
* Get right distance from text wrap
*
* @return float
*/
public function getWrapDistanceRight()
{
return $this->wrapDistanceRight;
}
/**
* Set right distance from text wrap
*
* @param float $value
* @return self
*/
public function setWrapDistanceRight($value = null)
{
$this->wrapDistanceRight = $this->setFloatVal($value, null);
return $this;
}
/**
* Get position
*
* @return int
*/
public function getPosition()
{
return $this->position;
}
/**
* Set position
*
* @param int $value
* @return self
*/
public function setPosition($value = null)
{
$this->position = $this->setIntVal($value, null);
return $this;
}
}