Merge branch 'develop' of github.com:basjan/PHPWord into #217-basjan

This commit is contained in:
Ivan Lanin 2014-05-04 18:16:33 +07:00
commit 6898ada0e0
3 changed files with 324 additions and 43 deletions

View File

@ -249,7 +249,6 @@ abstract class AbstractContainer extends AbstractElement
$rId = Media::addElement($elementDocPart, 'image', $src, $image);
$image->setRelationId($rId);
$this->addElement($image);
return $image;
}
@ -413,7 +412,7 @@ abstract class AbstractContainer extends AbstractElement
$docPart = $isCellTextrun ? $this->getDocPart() : $this->container;
$docPartId = $isCellTextrun ? $this->getDocPartId() : $this->sectionId;
$inHeaderFooter = ($docPart == 'header' || $docPart == 'footer');
$docPartId = $inHeaderFooter ? $this->getDocPartId() : $docPartId;
return $inHeaderFooter ? $docPart . $docPartId : $docPart;
}

View File

@ -1,4 +1,5 @@
<?php
/**
* PHPWord
*
@ -6,7 +7,6 @@
* @copyright 2014 PHPWord
* @license http://www.gnu.org/licenses/lgpl.txt LGPL
*/
namespace PhpOffice\PhpWord\Style;
/**
@ -14,12 +14,67 @@ namespace PhpOffice\PhpWord\Style;
*/
class Image extends AbstractStyle
{
const WRAPPING_STYLE_INLINE = 'inline';
const WRAPPING_STYLE_SQUARE = 'square';
const WRAPPING_STYLE_TIGHT = 'tight';
const WRAPPING_STYLE_BEHIND = 'behind';
const WRAPPING_STYLE_INFRONT = 'infront';
const POSITION_HORIZONTAL_LEFT = 'left';
const POSITION_HORIZONTAL_CENTER = 'centered';
const POSITION_HORIZONTAL_RIGHT = 'right';
const POSITION_VERTICAL_TOP = 'top';
const POSITION_VERTICAL_CENTER = 'center';
const POSITION_VERTICAL_BOTTOM = 'bottom';
const POSITION_VERTICAL_INSIDE = 'inside';
const POSITION_VERTICAL_OUTSIDE = 'outside';
const POSITION_HORIZONTAL_RELATIVE_MARGIN = 'margin';
const POSITION_HORIZONTAL_RELATIVE_PAGE = 'page';
const POSITION_HORIZONTAL_RELATIVE_COLUMN = 'column';
const POSITION_HORIZONTAL_RELATIVE_CHAR = 'char';
const POSITION_HORIZONTAL_RELATIVE_LMARGIN = 'left-margin-area';
const POSITION_HORIZONTAL_RELATIVE_RMARGIN = 'right-margin-area';
const POSITION_HORIZONTAL_RELATIVE_IMARGIN = 'inner-margin-area';
const POSITION_HORIZONTAL_RELATIVE_OMARGIN = 'outer-margin-area';
const POSITION_VERTICAL_RELATIVE_MARGIN = 'margin';
const POSITION_VERTICAL_RELATIVE_PAGE = 'page';
const POSITION_VERTICAL_RELATIVE_LINE = 'line';
const POSITION_VERTICAL_RELATIVE_TMARGIN = 'top-margin-area';
const POSITION_VERTICAL_RELATIVE_BMARGIN = 'bottom-margin-area';
const POSITION_VERTICAL_RELATIVE_IMARGIN = 'inner-margin-area';
const POSITION_VERTICAL_RELATIVE_OMARGIN = 'outer-margin-area';
const POSITION_RELATIVE = 'relative';
const POSITION_ABSOLUTE = 'absolute';
/**
* Image width
*
@ -62,6 +117,41 @@ class Image extends AbstractStyle
*/
private $wrappingStyle;
/**
* Horizontal alignment
*
* @var string
*/
private $posHorizontal;
/**
* Horizontal Relation
*
* @var string
*/
private $posHorizontalRel;
/**
* Vertical alignment
*
* @var string
*/
private $posVertical;
/**
* Vertical Relation
*
* @var string
*/
private $posVerticalRel;
/**
* Positioning type (Relative or Absolute)
*
* @var string
*/
private $positioning;
/**
* Create new image style
*/
@ -73,6 +163,11 @@ class Image extends AbstractStyle
$this->marginTop = null;
$this->marginLeft = null;
$this->setWrappingStyle(self::WRAPPING_STYLE_INLINE);
$this->setPositioning(self::POSITION_RELATIVE);
$this->setPosHorizontal(self::POSITION_HORIZONTAL_LEFT);
$this->setPosHorizontalRel(self::POSITION_HORIZONTAL_RELATIVE_CHAR);
$this->setPosVertical(self::POSITION_VERTICAL_TOP);
$this->setPosVerticalRel(self::POSITION_VERTICAL_RELATIVE_LINE);
}
/**
@ -205,4 +300,174 @@ class Image extends AbstractStyle
{
return $this->wrappingStyle;
}
/**
* Set positioning type
*
* @param string $positioning
* @throws \InvalidArgumentException
* @return $this
*/
public function setPositioning($positioning)
{
switch ($positioning) {
case self::POSITION_RELATIVE:
case self::POSITION_ABSOLUTE:
$this->positioning = $positioning;
break;
default:
throw new InvalidArgumentException('Positioning does not exists');
break;
}
return $this;
}
/**
* Get positioning type
*
* @return string
*/
public function getPositioning()
{
return $this->positioning;
}
/**
* Set horizontal alignment
*
* @param string $alignment
* @throws \InvalidArgumentException
* @return $this
*/
public function setPosHorizontal($alignment)
{
switch ($alignment) {
case self::POSITION_HORIZONTAL_LEFT:
case self::POSITION_HORIZONTAL_CENTER:
case self::POSITION_HORIZONTAL_RIGHT:
$this->posHorizontal = $alignment;
break;
default:
throw new InvalidArgumentException('Horizontal alignment does not exists');
break;
}
return $this;
}
/**
* Get horizontal alignment
*
* @return string
*/
public function getPosHorizontal()
{
return $this->posHorizontal;
}
/**
* Set vertical alignment
*
* @param string $alignment
* @throws \InvalidArgumentException
* @return $this
*/
public function setPosVertical($alignment)
{
switch ($alignment) {
case self::POSITION_VERTICAL_TOP:
case self::POSITION_VERTICAL_CENTER:
case self::POSITION_VERTICAL_BOTTOM:
case self::POSITION_VERTICAL_INSIDE:
case self::POSITION_VERTICAL_OUTSIDE:
$this->posVertical = $alignment;
break;
default:
throw new InvalidArgumentException('Vertical alignment does not exists');
break;
}
return $this;
}
/**
* Get vertical alignment
*
* @return string
*/
public function getPosVertical()
{
return $this->posVertical;
}
/**
* Set horizontal relation
*
* @param string $relto
* @throws \InvalidArgumentException
* @return $this
*/
public function setPosHorizontalRel($relto)
{
switch ($relto) {
case self::POSITION_HORIZONTAL_RELATIVE_MARGIN:
case self::POSITION_HORIZONTAL_RELATIVE_PAGE:
case self::POSITION_HORIZONTAL_RELATIVE_COLUMN:
case self::POSITION_HORIZONTAL_RELATIVE_CHAR:
case self::POSITION_HORIZONTAL_RELATIVE_LMARGIN:
case self::POSITION_HORIZONTAL_RELATIVE_RMARGIN:
case self::POSITION_HORIZONTAL_RELATIVE_IMARGIN:
case self::POSITION_HORIZONTAL_RELATIVE_OMARGIN:
$this->posHorizontalRel = $relto;
break;
default:
throw new InvalidArgumentException('Horizontal relation does not exists');
break;
}
return $this;
}
/**
* Get horizontal relation
*
* @return string
*/
public function getPosHorizontalRel()
{
return $this->posHorizontalRel;
}
/**
* Set vertical relation
*
* @param string $relto
* @throws \InvalidArgumentException
* @return $this
*/
public function setPosVerticalRel($relto)
{
switch ($relto) {
case self::POSITION_VERTICAL_RELATIVE_MARGIN:
case self::POSITION_VERTICAL_RELATIVE_PAGE:
case self::POSITION_VERTICAL_RELATIVE_LINE:
case self::POSITION_VERTICAL_RELATIVE_TMARGIN:
case self::POSITION_VERTICAL_RELATIVE_BMARGIN:
case self::POSITION_VERTICAL_RELATIVE_IMARGIN:
case self::POSITION_VERTICAL_RELATIVE_OMARGIN:
$this->posVerticalRel = $relto;
break;
default:
throw new InvalidArgumentException('Vertical relation does not exists');
break;
}
return $this;
}
/**
* Get vertical relation
*
* @return string
*/
public function getPosVerticalRel()
{
return $this->posVerticalRel;
}
}

View File

@ -44,6 +44,7 @@ class Image extends Element
$marginTop = $style->getMarginTop();
$marginLeft = $style->getMarginLeft();
$wrappingStyle = $style->getWrappingStyle();
$positioning = $style->getPositioning();
$w10wrapType = null;
$imgStyle = '';
if (null !== $width) {
@ -53,24 +54,40 @@ class Image extends Element
$imgStyle .= 'height:' . $height . 'px;';
}
if (null !== $marginTop) {
$imgStyle .= 'margin-top:' . $marginTop . 'in;';
$imgStyle .= 'margin-top:' . $marginTop . 'px;';
}
if (null !== $marginLeft) {
$imgStyle .= 'margin-left:' . $marginLeft . 'in;';
$imgStyle .= 'margin-left:' . $marginLeft . 'px;';
}
$imgStyle.='position:absolute;mso-width-percent:0;mso-height-percent:0;';
$imgStyle.='mso-width-relative:margin;mso-height-relative:margin;';
switch ($positioning) {
case ImageStyle::POSITION_RELATIVE:
$imgStyle.='mso-position-horizontal:'.$style->getPosHorizontal().';';
$imgStyle.='mso-position-horizontal-relative:'.$style->getPosHorizontalRel().';';
$imgStyle.='mso-position-vertical:'.$style->getPosVertical().';';
$imgStyle.='mso-position-vertical-relative:'.$style->getPosVerticalRel().';';
$imgStyle.='margin-left:0;margin-top:0;';
break;
case ImageStyle::POSITION_ABSOLUTE:
$imgStyle.='mso-position-horizontal-relative:page;';
$imgStyle.='mso-position-vertical-relative:page;';
break;
}
switch ($wrappingStyle) {
case ImageStyle::WRAPPING_STYLE_BEHIND:
$imgStyle .= 'position:absolute;z-index:-251658752;';
$imgStyle .= 'z-index:-251658752;';
break;
case ImageStyle::WRAPPING_STYLE_INFRONT:
$imgStyle .= 'position:absolute;z-index:251659264;mso-position-horizontal:absolute;mso-position-vertical:absolute;';
$imgStyle .= 'z-index:251659264;mso-position-horizontal:absolute;mso-position-vertical:absolute;';
break;
case ImageStyle::WRAPPING_STYLE_SQUARE:
$imgStyle .= 'position:absolute;z-index:251659264;mso-position-horizontal:absolute;mso-position-vertical:absolute;';
$imgStyle .= 'z-index:251659264;mso-position-horizontal:absolute;mso-position-vertical:absolute;';
$w10wrapType = 'square';
break;
case ImageStyle::WRAPPING_STYLE_TIGHT:
$imgStyle .= 'position:absolute;z-index:251659264;mso-position-horizontal:absolute;mso-position-vertical:absolute;';
$imgStyle .= 'z-index:251659264;mso-position-horizontal:absolute;mso-position-vertical:absolute;';
$w10wrapType = 'tight';
break;
}