Refactor Word2007/Element to identify the same properties

This commit is contained in:
Ivan Lanin 2014-06-03 14:13:35 +07:00
parent a2294b4b1e
commit 2328e34e64
14 changed files with 62 additions and 40 deletions

View File

@ -115,6 +115,16 @@ abstract class AbstractElement
$this->pageBreakBefore = (bool)$value;
}
/**
* Write ending
*/
protected function endElementP()
{
if (!$this->withoutP) {
$this->xmlWriter->endElement(); // w:p
}
}
/**
* Convert text to valid format
*

View File

@ -85,6 +85,6 @@ class CheckBox extends Text
$xmlWriter->endElement(); // w:t
$xmlWriter->endElement(); // w:r
$this->writeClosingWP();
$this->endElementP(); // w:p
}
}

View File

@ -82,6 +82,6 @@ class Field extends Text
$xmlWriter->endElement(); // w:r
$xmlWriter->endElement(); // w:fldSimple
$this->writeClosingWP();
$this->endElementP(); // w:p
}
}

View File

@ -55,6 +55,6 @@ class Footnote extends Text
$xmlWriter->endElement(); // w:$referenceType
$xmlWriter->endElement(); // w:r
$this->writeClosingWP();
$this->endElementP(); // w:p
}
}

View File

@ -52,6 +52,7 @@ class Image extends AbstractElement
private function writeImage(XMLWriter $xmlWriter, ImageElement $element)
{
$rId = $element->getRelationId() + ($element->isInSection() ? 6 : 0);
$style = $element->getStyle();
$styleWriter = new ImageStyleWriter($xmlWriter, $style);
@ -59,23 +60,25 @@ class Image extends AbstractElement
$xmlWriter->startElement('w:p');
$styleWriter->writeAlignment();
}
$xmlWriter->startElement('w:r');
$xmlWriter->startElement('w:pict');
$xmlWriter->startElement('v:shape');
$xmlWriter->writeAttribute('type', '#_x0000_t75');
$styleWriter->write();
$styleWriter->writeW10Wrap();
$xmlWriter->startElement('v:imagedata');
$xmlWriter->writeAttribute('r:id', 'rId' . $rId);
$xmlWriter->writeAttribute('o:title', '');
$xmlWriter->endElement(); // v:imagedata
$styleWriter->writeW10Wrap();
$xmlWriter->endElement(); // v:shape
$xmlWriter->endElement(); // w:pict
$xmlWriter->endElement(); // w:r
if (!$this->withoutP) {
$xmlWriter->endElement(); // w:p
}
$this->endElementP(); // w:p
}
/**
* Write watermark element
@ -83,23 +86,29 @@ class Image extends AbstractElement
private function writeWatermark(XMLWriter $xmlWriter, ImageElement $element)
{
$rId = $element->getRelationId();
$style = $element->getStyle();
$style->setPositioning('absolute');
$styleWriter = new ImageStyleWriter($xmlWriter, $style);
$xmlWriter->startElement('w:p');
$xmlWriter->startElement('w:r');
$xmlWriter->startElement('w:pict');
$xmlWriter->startElement('v:shape');
$xmlWriter->writeAttribute('type', '#_x0000_t75');
$style->setPositioning('absolute');
$styleWriter->write();
$xmlWriter->startElement('v:imagedata');
$xmlWriter->writeAttribute('r:id', 'rId' . $rId);
$xmlWriter->writeAttribute('o:title', '');
$xmlWriter->endElement(); // v:imagedata
$xmlWriter->endElement(); // v:shape
$xmlWriter->endElement(); // w:pict
$xmlWriter->endElement(); // w:r
$xmlWriter->endElement(); // w:p
}
}

View File

@ -37,16 +37,19 @@ class Line extends AbstractElement
return;
}
$style = $element->getStyle();
$style = $element->getStyle();
$styleWriter = new LineStyleWriter($xmlWriter, $style);
$elementId = $element->getElementIndex();
if (!$this->withoutP) {
$xmlWriter->startElement('w:p');
$styleWriter->writeAlignment();
}
$xmlWriter->startElement('w:r');
$xmlWriter->startElement('w:pict');
// Shapetype could be defined for each line separately, but then a unique id would be necessary
if ($elementId == 1) {
$xmlWriter->startElement('v:shapetype');
@ -67,18 +70,20 @@ class Line extends AbstractElement
$xmlWriter->endElement(); // o:lock
$xmlWriter->endElement(); // v:shapetype
}
$xmlWriter->startElement('v:shape');
$xmlWriter->writeAttribute('id', sprintf('_x0000_s1%1$03d', $elementId));
$xmlWriter->writeAttribute('type', '#_x0000_t32'); //type should correspond to shapetype id
$styleWriter->write();
$styleWriter->writeStroke();
$styleWriter->writeW10Wrap();
$styleWriter->writeStroke();
$xmlWriter->endElement(); // v:shape
$xmlWriter->endElement(); // w:pict
$xmlWriter->endElement(); // w:r
if (!$this->withoutP) {
$xmlWriter->endElement(); // w:p
}
$this->endElementP(); // w:p
}
}

View File

@ -53,6 +53,6 @@ class Link extends Text
$xmlWriter->endElement(); // w:r
$xmlWriter->endElement(); // w:hyperlink
$this->writeClosingWP();
$this->endElementP(); // w:p
}
}

View File

@ -41,6 +41,7 @@ class Object extends AbstractElement
$rIdImage = $element->getImageRelationId() + ($element->isInSection() ? 6 : 0);
$shapeId = md5($rIdObject . '_' . $rIdImage);
$objectId = $element->getRelationId() + 1325353440;
$style = $element->getStyle();
$styleWriter = new ImageStyleWriter($xmlWriter, $style);
@ -48,20 +49,27 @@ class Object extends AbstractElement
$xmlWriter->startElement('w:p');
$styleWriter->writeAlignment();
}
$xmlWriter->startElement('w:r');
$xmlWriter->startElement('w:object');
$xmlWriter->writeAttribute('w:dxaOrig', '249');
$xmlWriter->writeAttribute('w:dyaOrig', '160');
// Icon
$xmlWriter->startElement('v:shape');
$xmlWriter->writeAttribute('id', $shapeId);
$xmlWriter->writeAttribute('type', '#_x0000_t75');
$xmlWriter->writeAttribute('style', 'width:104px;height:67px');
$xmlWriter->writeAttribute('o:ole', '');
$xmlWriter->startElement('v:imagedata');
$xmlWriter->writeAttribute('r:id', 'rId' . $rIdImage);
$xmlWriter->writeAttribute('o:title', '');
$xmlWriter->endElement(); // v:imagedata
$xmlWriter->endElement(); // v:shape
// Object
$xmlWriter->startElement('o:OLEObject');
$xmlWriter->writeAttribute('Type', 'Embed');
$xmlWriter->writeAttribute('ProgID', 'Package');
@ -70,10 +78,10 @@ class Object extends AbstractElement
$xmlWriter->writeAttribute('ObjectID', '_' . $objectId);
$xmlWriter->writeAttribute('r:id', 'rId' . $rIdObject);
$xmlWriter->endElement(); // o:OLEObject
$xmlWriter->endElement(); // w:object
$xmlWriter->endElement(); // w:r
if (!$this->withoutP) {
$xmlWriter->endElement(); // w:p
}
$this->endElementP(); // w:p
}
}

View File

@ -86,6 +86,6 @@ class PreserveText extends Text
}
}
$this->writeClosingWP();
$this->endElementP(); // w:p
}
}

View File

@ -42,6 +42,8 @@ class Shape extends AbstractElement
}
$style = $element->getStyle();
$styleWriter = new ShapeStyleWriter($xmlWriter, $style);
$type = $element->getType();
if ($type == 'rect' && $style->getRoundness() !== null) {
$type = 'roundrect';
@ -62,16 +64,13 @@ class Shape extends AbstractElement
}
// Child style
$styleWriter = new ShapeStyleWriter($xmlWriter, $style);
$styleWriter->write();
$xmlWriter->endElement(); // v:$type
$xmlWriter->endElement(); // w:pict
$xmlWriter->endElement(); // w:r
if (!$this->withoutP) {
$xmlWriter->endElement(); // w:p
}
$this->endElementP(); // w:p
}
/**

View File

@ -51,7 +51,7 @@ class Text extends AbstractElement
$xmlWriter->endElement();
$xmlWriter->endElement(); // w:r
$this->writeClosingWP();
$this->endElementP(); // w:p
}
/**
@ -78,18 +78,6 @@ class Text extends AbstractElement
}
}
/**
* Write ending
*/
protected function writeClosingWP()
{
$xmlWriter = $this->getXmlWriter();
if (!$this->withoutP) {
$xmlWriter->endElement(); // w:p
}
}
/**
* Write ending
*/

View File

@ -36,6 +36,7 @@ class TextBox extends AbstractElement
if (!$element instanceof \PhpOffice\PhpWord\Element\TextBox) {
return;
}
$style = $element->getStyle();
$styleWriter = new TextBoxStyleWriter($xmlWriter, $style);
@ -48,7 +49,9 @@ class TextBox extends AbstractElement
$xmlWriter->startElement('w:pict');
$xmlWriter->startElement('v:shape');
$xmlWriter->writeAttribute('type', '#_x0000_t0202');
$styleWriter->write();
$xmlWriter->startElement('v:textbox');
$styleWriter->writeInnerMargin();
@ -64,8 +67,6 @@ class TextBox extends AbstractElement
$xmlWriter->endElement(); // w:pict
$xmlWriter->endElement(); // w:r
if (!$this->withoutP) {
$xmlWriter->endElement(); // w:p
}
$this->endElementP(); // w:p
}
}

View File

@ -38,12 +38,14 @@ class TextBreak extends Text
if (!$this->withoutP) {
$hasStyle = $element->hasStyle();
$this->writeOpeningWP();
if ($hasStyle) {
$xmlWriter->startElement('w:pPr');
$this->writeFontStyle();
$xmlWriter->endElement(); // w:pPr
}
$this->writeClosingWP();
$this->endElementP(); // w:p
} else {
$xmlWriter->writeElement('w:br');
}

View File

@ -37,6 +37,6 @@ class TextRun extends Text
$containerWriter = new Container($xmlWriter, $element);
$containerWriter->write();
$this->writeClosingWP();
$this->endElementP(); // w:p
}
}