Merge develop

This commit is contained in:
Progi1984 2013-12-15 12:36:34 +01:00
commit 6b2511e34e
2 changed files with 166 additions and 142 deletions

View File

@ -64,6 +64,14 @@ class PHPWord_Style_Paragraph {
private $_spacing;
/**
* Indent by how much
*
* @var int
*/
private $_indent;
/**
* New Paragraph Style
*/
@ -72,6 +80,7 @@ class PHPWord_Style_Paragraph {
$this->_spaceBefore = null;
$this->_spaceAfter = null;
$this->_spacing = null;
$this->_indent = null;
}
/**
@ -84,6 +93,9 @@ class PHPWord_Style_Paragraph {
if($key == '_spacing') {
$value += 240; // because line height of 1 matches 240 twips
}
if($key == '_indent') {
$value = (int)$value * 720; // 720 twips per indent
}
$this->$key = $value;
}
@ -170,5 +182,25 @@ class PHPWord_Style_Paragraph {
$this->_spacing = $pValue;
return $this;
}
/**
* Get indentation
*
* @return int
*/
public function getIndent() {
return $this->_indent;
}
/**
* Set indentation
*
* @param int $pValue
* @return PHPWord_Style_Paragraph
*/
public function setIndent($pValue = null) {
$this->_indent = $pValue;
return $this;
}
}
?>

View File

@ -27,18 +27,18 @@
class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
protected function _writeText(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Text $text, $withoutP = false) {
$styleFont = $text->getFontStyle();
$SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
if(!$withoutP) {
$objWriter->startElement('w:p');
$styleParagraph = $text->getParagraphStyle();
$SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
if($SpIsObject) {
$this->_writeParagraphStyle($objWriter, $styleParagraph);
} elseif(!$SpIsObject && !is_null($styleParagraph)) {
@ -49,12 +49,12 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
}
}
$strText = htmlspecialchars($text->getText());
$strText = PHPWord_Shared_String::ControlCharacterPHP2OOXML($strText);
$objWriter->startElement('w:r');
if($SfIsObject) {
$this->_writeTextStyle($objWriter, $styleFont);
} elseif(!$SfIsObject && !is_null($styleFont)) {
@ -64,27 +64,27 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
$objWriter->endElement();
}
$objWriter->startElement('w:t');
$objWriter->writeAttribute('xml:space', 'preserve'); // needed because of drawing spaces before and after text
$objWriter->writeRaw($strText);
$objWriter->endElement();
$objWriter->endElement(); // w:r
if(!$withoutP) {
$objWriter->endElement(); // w:p
}
}
protected function _writeTextRun(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_TextRun $textrun) {
$elements = $textrun->getElements();
$styleParagraph = $textrun->getParagraphStyle();
$SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
$objWriter->startElement('w:p');
if($SpIsObject) {
$this->_writeParagraphStyle($objWriter, $styleParagraph);
} elseif(!$SpIsObject && !is_null($styleParagraph)) {
@ -94,7 +94,7 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
$objWriter->endElement();
}
if(count($elements) > 0) {
foreach($elements as $element) {
if($element instanceof PHPWord_Section_Text) {
@ -104,33 +104,41 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
}
}
}
$objWriter->endElement();
}
protected function _writeParagraphStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Paragraph $style, $withoutPPR = false) {
$align = $style->getAlign();
$spaceBefore = $style->getSpaceBefore();
$spaceAfter = $style->getSpaceAfter();
$spacing = $style->getSpacing();
if(!is_null($align) || !is_null($spacing) || !is_null($spaceBefore) || !is_null($spaceAfter)) {
$indent = $style->getIndent();
if(!is_null($align) || !is_null($spacing) || !is_null($spaceBefore) || !is_null($spaceAfter) || !is_null($indent)) {
if(!$withoutPPR) {
$objWriter->startElement('w:pPr');
}
if(!is_null($align)) {
$objWriter->startElement('w:jc');
$objWriter->writeAttribute('w:val', $align);
$objWriter->endElement();
}
if(!is_null($indent)) {
$objWriter->startElement('w:ind');
$objWriter->writeAttribute('w:firstLine', 0);
$objWriter->writeAttribute('w:left', $indent);
$objWriter->endElement();
}
if(!is_null($spaceBefore) || !is_null($spaceAfter) || !is_null($spacing)) {
$objWriter->startElement('w:spacing');
if(!is_null($spaceBefore)) {
$objWriter->writeAttribute('w:before', $spaceBefore);
}
@ -144,29 +152,29 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
}
if(!$withoutPPR) {
$objWriter->endElement(); // w:pPr
}
}
}
protected function _writeLink(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Link $link, $withoutP = false) {
$rID = $link->getRelationId();
$linkName = $link->getLinkName();
if(is_null($linkName)) {
$linkName = $link->getLinkSrc();
}
$styleFont = $link->getFontStyle();
$SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
if(!$withoutP) {
$objWriter->startElement('w:p');
$styleParagraph = $link->getParagraphStyle();
$SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
if($SpIsObject) {
$this->_writeParagraphStyle($objWriter, $styleParagraph);
} elseif(!$SpIsObject && !is_null($styleParagraph)) {
@ -177,11 +185,11 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
}
}
$objWriter->startElement('w:hyperlink');
$objWriter->writeAttribute('r:id', 'rId'.$rID);
$objWriter->writeAttribute('w:history', '1');
$objWriter->startElement('w:r');
if($SfIsObject) {
$this->_writeTextStyle($objWriter, $styleFont);
@ -192,31 +200,31 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
$objWriter->endElement();
}
$objWriter->startElement('w:t');
$objWriter->writeAttribute('xml:space', 'preserve'); // needed because of drawing spaces before and after text
$objWriter->writeRaw($linkName);
$objWriter->endElement();
$objWriter->endElement();
$objWriter->endElement();
if(!$withoutP) {
$objWriter->endElement(); // w:p
}
}
protected function _writePreserveText(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Footer_PreserveText $textrun) {
$styleFont = $textrun->getFontStyle();
$styleParagraph = $textrun->getParagraphStyle();
$SfIsObject = ($styleFont instanceof PHPWord_Style_Font) ? true : false;
$SpIsObject = ($styleParagraph instanceof PHPWord_Style_Paragraph) ? true : false;
$arrText = $textrun->getText();
$objWriter->startElement('w:p');
if($SpIsObject) {
$this->_writeParagraphStyle($objWriter, $styleParagraph);
} elseif(!$SpIsObject && !is_null($styleParagraph)) {
@ -226,20 +234,20 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
$objWriter->endElement();
}
foreach($arrText as $text) {
if(substr($text, 0, 1) == '{') {
$text = substr($text, 1, -1);
$objWriter->startElement('w:r');
$objWriter->startElement('w:fldChar');
$objWriter->writeAttribute('w:fldCharType', 'begin');
$objWriter->endElement();
$objWriter->endElement();
$objWriter->startElement('w:r');
if($SfIsObject) {
$this->_writeTextStyle($objWriter, $styleFont);
} elseif(!$SfIsObject && !is_null($styleFont)) {
@ -249,19 +257,19 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
$objWriter->endElement();
}
$objWriter->startElement('w:instrText');
$objWriter->writeAttribute('xml:space', 'preserve');
$objWriter->writeRaw($text);
$objWriter->endElement();
$objWriter->endElement();
$objWriter->startElement('w:r');
$objWriter->startElement('w:fldChar');
$objWriter->writeAttribute('w:fldCharType', 'separate');
$objWriter->endElement();
$objWriter->endElement();
$objWriter->startElement('w:r');
$objWriter->startElement('w:fldChar');
$objWriter->writeAttribute('w:fldCharType', 'end');
@ -270,9 +278,9 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
} else {
$text = htmlspecialchars($text);
$text = PHPWord_Shared_String::ControlCharacterPHP2OOXML($text);
$objWriter->startElement('w:r');
if($SfIsObject) {
$this->_writeTextStyle($objWriter, $styleFont);
} elseif(!$SfIsObject && !is_null($styleFont)) {
@ -282,7 +290,7 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
$objWriter->endElement();
}
$objWriter->startElement('w:t');
$objWriter->writeAttribute('xml:space', 'preserve');
$objWriter->writeRaw($text);
@ -290,10 +298,10 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
}
}
$objWriter->endElement(); // p
}
protected function _writeTextStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Font $style) {
$font = $style->getName();
$bold = $style->getBold();
@ -303,11 +311,9 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$fgColor = $style->getFgColor();
$striketrough = $style->getStrikethrough();
$underline = $style->getUnderline();
$superscript = $style->getSuperScript();
$subscript = $style->getSubScript();
$objWriter->startElement('w:rPr');
// Font
if($font != 'Arial') {
$objWriter->startElement('w:rFonts');
@ -316,14 +322,14 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->writeAttribute('w:cs', $font);
$objWriter->endElement();
}
// Color
if($color != '000000') {
$objWriter->startElement('w:color');
$objWriter->writeAttribute('w:val', $color);
$objWriter->endElement();
}
// Size
if($size != 20) {
$objWriter->startElement('w:sz');
@ -333,62 +339,48 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->writeAttribute('w:val', $size);
$objWriter->endElement();
}
// Bold
if($bold) {
$objWriter->writeElement('w:b', null);
}
// Superscript
if($superscript) {
$objWriter->startElement('w:vertAlign');
$objWriter->writeAttribute('w:val', 'superscript');
$objWriter->endElement();
}
// Subscript
if($subscript) {
$objWriter->startElement('w:vertAlign');
$objWriter->writeAttribute('w:val', 'subscript');
$objWriter->endElement();
}
// Italic
if($italic) {
$objWriter->writeElement('w:i', null);
$objWriter->writeElement('w:iCs', null);
}
// Underline
if(!is_null($underline) && $underline != 'none') {
$objWriter->startElement('w:u');
$objWriter->writeAttribute('w:val', $underline);
$objWriter->endElement();
}
// Striketrough
if($striketrough) {
$objWriter->writeElement('w:strike', null);
}
// Foreground-Color
if(!is_null($fgColor)) {
$objWriter->startElement('w:highlight');
$objWriter->writeAttribute('w:val', $fgColor);
$objWriter->endElement();
}
$objWriter->endElement();
}
protected function _writeTextBreak(PHPWord_Shared_XMLWriter $objWriter = null) {
$objWriter->writeElement('w:p', null);
}
protected function _writeTable(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Table $table) {
$_rows = $table->getRows();
$_cRows = count($_rows);
if($_cRows > 0) {
$objWriter->startElement('w:tbl');
$tblStyle = $table->getStyle();
@ -408,9 +400,9 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
for($i=0; $i<$_cRows; $i++) {
$row = $_rows[$i];
$height = $_heights[$i];
$objWriter->startElement('w:tr');
if(!is_null($height)) {
$objWriter->startElement('w:trPr');
$objWriter->startElement('w:trHeight');
@ -418,25 +410,25 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
$objWriter->endElement();
}
foreach($row as $cell) {
$objWriter->startElement('w:tc');
$cellStyle = $cell->getStyle();
$width = $cell->getWidth();
$objWriter->startElement('w:tcPr');
$objWriter->startElement('w:tcW');
$objWriter->writeAttribute('w:w', $width);
$objWriter->writeAttribute('w:type', 'dxa');
$objWriter->endElement();
if($cellStyle instanceof PHPWord_Style_Cell) {
$this->_writeCellStyle($objWriter, $cellStyle);
}
$objWriter->endElement();
$_elements = $cell->getElements();
if(count($_elements) > 0) {
foreach($_elements as $element) {
@ -462,7 +454,7 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
} else {
$this->_writeTextBreak($objWriter);
}
$objWriter->endElement();
}
$objWriter->endElement();
@ -470,73 +462,73 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
}
}
protected function _writeTableStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Table $style = null) {
$margins = $style->getCellMargin();
$mTop = (!is_null($margins[0])) ? true : false;
$mLeft = (!is_null($margins[1])) ? true : false;
$mRight = (!is_null($margins[2])) ? true : false;
$mBottom = (!is_null($margins[3])) ? true : false;
if($mTop || $mLeft || $mRight || $mBottom) {
$objWriter->startElement('w:tblPr');
$objWriter->startElement('w:tblCellMar');
if($mTop) {
$objWriter->startElement('w:top');
$objWriter->writeAttribute('w:w', $margins[0]);
$objWriter->writeAttribute('w:type', 'dxa');
$objWriter->endElement();
}
if($mLeft) {
$objWriter->startElement('w:left');
$objWriter->writeAttribute('w:w', $margins[1]);
$objWriter->writeAttribute('w:type', 'dxa');
$objWriter->endElement();
}
if($mRight) {
$objWriter->startElement('w:right');
$objWriter->writeAttribute('w:w', $margins[2]);
$objWriter->writeAttribute('w:type', 'dxa');
$objWriter->endElement();
}
if($mBottom) {
$objWriter->startElement('w:bottom');
$objWriter->writeAttribute('w:w', $margins[3]);
$objWriter->writeAttribute('w:type', 'dxa');
$objWriter->endElement();
}
$objWriter->endElement();
$objWriter->endElement();
}
}
protected function _writeCellStyle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Style_Cell $style = null) {
$bgColor = $style->getBgColor();
$valign = $style->getVAlign();
$textDir = $style->getTextDirection();
$brdSz = $style->getBorderSize();
$brdCol = $style->getBorderColor();
$bTop = (!is_null($brdSz[0])) ? true : false;
$bLeft = (!is_null($brdSz[1])) ? true : false;
$bRight = (!is_null($brdSz[2])) ? true : false;
$bBottom = (!is_null($brdSz[3])) ? true : false;
$borders = ($bTop || $bLeft || $bRight || $bBottom) ? true : false;
$styles = (!is_null($bgColor) || !is_null($valign) || !is_null($textDir) || $borders) ? true : false;
if($styles) {
if(!is_null($textDir)) {
$objWriter->startElement('w:textDirection');
$objWriter->writeAttribute('w:val', $textDir);
$objWriter->endElement();
}
if(!is_null($bgColor)) {
$objWriter->startElement('w:shd');
$objWriter->writeAttribute('w:val', 'clear');
@ -544,16 +536,16 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->writeAttribute('w:fill', $bgColor);
$objWriter->endElement();
}
if(!is_null($valign)) {
$objWriter->startElement('w:vAlign');
$objWriter->writeAttribute('w:val', $valign);
$objWriter->endElement();
}
if($borders) {
$_defaultColor = $style->getDefaultBorderColor();
$objWriter->startElement('w:tcBorders');
if($bTop) {
if(is_null($brdCol[0])) { $brdCol[0] = $_defaultColor; }
@ -563,7 +555,7 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->writeAttribute('w:color', $brdCol[0]);
$objWriter->endElement();
}
if($bLeft) {
if(is_null($brdCol[1])) { $brdCol[1] = $_defaultColor; }
$objWriter->startElement('w:left');
@ -572,7 +564,7 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->writeAttribute('w:color', $brdCol[1]);
$objWriter->endElement();
}
if($bRight) {
if(is_null($brdCol[2])) { $brdCol[2] = $_defaultColor; }
$objWriter->startElement('w:right');
@ -581,7 +573,7 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->writeAttribute('w:color', $brdCol[2]);
$objWriter->endElement();
}
if($bBottom) {
if(is_null($brdCol[3])) { $brdCol[3] = $_defaultColor; }
$objWriter->startElement('w:bottom');
@ -590,22 +582,22 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->writeAttribute('w:color', $brdCol[3]);
$objWriter->endElement();
}
$objWriter->endElement();
}
}
}
protected function _writeImage(PHPWord_Shared_XMLWriter $objWriter = null, $image) {
$rId = $image->getRelationId();
$style = $image->getStyle();
$width = $style->getWidth();
$height = $style->getHeight();
$align = $style->getAlign();
$objWriter->startElement('w:p');
if(!is_null($align)) {
$objWriter->startElement('w:pPr');
$objWriter->startElement('w:jc');
@ -613,46 +605,46 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
$objWriter->endElement();
}
$objWriter->startElement('w:r');
$objWriter->startElement('w:pict');
$objWriter->startElement('v:shape');
$objWriter->writeAttribute('type', '#_x0000_t75');
$objWriter->writeAttribute('style', 'width:'.$width.'px;height:'.$height.'px');
$objWriter->startElement('v:imagedata');
$objWriter->writeAttribute('r:id', 'rId'.$rId);
$objWriter->writeAttribute('o:title', '');
$objWriter->endElement();
$objWriter->endElement();
$objWriter->endElement();
$objWriter->endElement();
$objWriter->endElement();
}
protected function _writeWatermark(PHPWord_Shared_XMLWriter $objWriter = null, $image) {
$rId = $image->getRelationId();
$style = $image->getStyle();
$width = $style->getWidth();
$height = $style->getHeight();
$marginLeft = $style->getMarginLeft();
$marginTop = $style->getMarginTop();
$objWriter->startElement('w:p');
$objWriter->startElement('w:r');
$objWriter->startElement('w:pict');
$objWriter->startElement('v:shape');
$objWriter->writeAttribute('type', '#_x0000_t75');
$strStyle = 'position:absolute;';
$strStyle .= ' width:'.$width.'px;';
$strStyle .= ' height:'.$height.'px;';
@ -662,31 +654,31 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
if(!is_null($marginLeft)) {
$strStyle .= ' margin-left:'.$marginLeft.'px;';
}
$objWriter->writeAttribute('style', $strStyle);
$objWriter->startElement('v:imagedata');
$objWriter->writeAttribute('r:id', 'rId'.$rId);
$objWriter->writeAttribute('o:title', '');
$objWriter->endElement();
$objWriter->endElement();
$objWriter->endElement();
$objWriter->endElement();
$objWriter->endElement();
}
protected function _writeTitle(PHPWord_Shared_XMLWriter $objWriter = null, PHPWord_Section_Title $title) {
$text = htmlspecialchars($title->getText());
$text = PHPWord_Shared_String::ControlCharacterPHP2OOXML($text);
$anchor = $title->getAnchor();
$bookmarkId = $title->getBookmarkId();
$style = $title->getStyle();
$objWriter->startElement('w:p');
if(!empty($style)) {
$objWriter->startElement('w:pPr');
$objWriter->startElement('w:pStyle');
@ -694,28 +686,28 @@ class PHPWord_Writer_Word2007_Base extends PHPWord_Writer_Word2007_WriterPart {
$objWriter->endElement();
$objWriter->endElement();
}
$objWriter->startElement('w:r');
$objWriter->startElement('w:fldChar');
$objWriter->writeAttribute('w:fldCharType', 'end');
$objWriter->endElement();
$objWriter->endElement();
$objWriter->startElement('w:bookmarkStart');
$objWriter->writeAttribute('w:id', $bookmarkId);
$objWriter->writeAttribute('w:name', $anchor);
$objWriter->endElement();
$objWriter->startElement('w:r');
$objWriter->startElement('w:t');
$objWriter->writeRaw($text);
$objWriter->endElement();
$objWriter->endElement();
$objWriter->startElement('w:bookmarkEnd');
$objWriter->writeAttribute('w:id', $bookmarkId);
$objWriter->endElement();
$objWriter->endElement();
}
}