/** */ public function testPixelsCentimeters() { $value = rand(1, 100); $this->assertEquals(0, Drawing::pixelsToCentimeters()); $this->assertEquals($value / Drawing::DPI_96 * 2.54, Drawing::pixelsToCentimeters($value)); $this->assertEquals(0, Drawing::centimetersToPixels()); $this->assertEquals($value / 2.54 * Drawing::DPI_96, Drawing::centimetersToPixels($value)); }
protected function writeStylePartShadow(XMLWriter $objWriter, Shadow $oShadow) { $objWriter->writeAttribute('draw:shadow', 'visible'); $objWriter->writeAttribute('draw:shadow-color', '#' . $oShadow->getColor()->getRGB()); if ($oShadow->getDirection() == 0 || $oShadow->getDirection() == 360) { $objWriter->writeAttribute('draw:shadow-offset-x', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', '0cm'); } elseif ($oShadow->getDirection() == 45) { $objWriter->writeAttribute('draw:shadow-offset-x', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } elseif ($oShadow->getDirection() == 90) { $objWriter->writeAttribute('draw:shadow-offset-x', '0cm'); $objWriter->writeAttribute('draw:shadow-offset-y', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } elseif ($oShadow->getDirection() == 135) { $objWriter->writeAttribute('draw:shadow-offset-x', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } elseif ($oShadow->getDirection() == 180) { $objWriter->writeAttribute('draw:shadow-offset-x', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', '0cm'); } elseif ($oShadow->getDirection() == 225) { $objWriter->writeAttribute('draw:shadow-offset-x', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } elseif ($oShadow->getDirection() == 270) { $objWriter->writeAttribute('draw:shadow-offset-x', '0cm'); $objWriter->writeAttribute('draw:shadow-offset-y', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } elseif ($oShadow->getDirection() == 315) { $objWriter->writeAttribute('draw:shadow-offset-x', CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); $objWriter->writeAttribute('draw:shadow-offset-y', '-' . CommonDrawing::pixelsToCentimeters($oShadow->getDistance()) . 'cm'); } $objWriter->writeAttribute('draw:shadow-opacity', 100 - $oShadow->getAlpha() . '%'); $objWriter->writeAttribute('style:mirror', 'none'); }
/** * Write Meta file to XML format * * @return string XML Output * @throws \Exception */ protected function writePart() { // Create XML writer $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); $objWriter->startDocument('1.0', 'UTF-8'); // office:document-meta $objWriter->startElement('office:document-styles'); $objWriter->writeAttribute('xmlns:office', 'urn:oasis:names:tc:opendocument:xmlns:office:1.0'); $objWriter->writeAttribute('xmlns:style', 'urn:oasis:names:tc:opendocument:xmlns:style:1.0'); $objWriter->writeAttribute('xmlns:text', 'urn:oasis:names:tc:opendocument:xmlns:text:1.0'); $objWriter->writeAttribute('xmlns:table', 'urn:oasis:names:tc:opendocument:xmlns:table:1.0'); $objWriter->writeAttribute('xmlns:draw', 'urn:oasis:names:tc:opendocument:xmlns:drawing:1.0'); $objWriter->writeAttribute('xmlns:fo', 'urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0'); $objWriter->writeAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); $objWriter->writeAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/'); $objWriter->writeAttribute('xmlns:meta', 'urn:oasis:names:tc:opendocument:xmlns:meta:1.0'); $objWriter->writeAttribute('xmlns:number', 'urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0'); $objWriter->writeAttribute('xmlns:presentation', 'urn:oasis:names:tc:opendocument:xmlns:presentation:1.0'); $objWriter->writeAttribute('xmlns:svg', 'urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0'); $objWriter->writeAttribute('xmlns:chart', 'urn:oasis:names:tc:opendocument:xmlns:chart:1.0'); $objWriter->writeAttribute('xmlns:dr3d', 'urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0'); $objWriter->writeAttribute('xmlns:math', 'http://www.w3.org/1998/Math/MathML'); $objWriter->writeAttribute('xmlns:form', 'urn:oasis:names:tc:opendocument:xmlns:form:1.0'); $objWriter->writeAttribute('xmlns:script', 'urn:oasis:names:tc:opendocument:xmlns:script:1.0'); $objWriter->writeAttribute('xmlns:ooo', 'http://openoffice.org/2004/office'); $objWriter->writeAttribute('xmlns:ooow', 'http://openoffice.org/2004/writer'); $objWriter->writeAttribute('xmlns:oooc', 'http://openoffice.org/2004/calc'); $objWriter->writeAttribute('xmlns:dom', 'http://www.w3.org/2001/xml-events'); $objWriter->writeAttribute('xmlns:smil', 'urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0'); $objWriter->writeAttribute('xmlns:anim', 'urn:oasis:names:tc:opendocument:xmlns:animation:1.0'); $objWriter->writeAttribute('xmlns:rpt', 'http://openoffice.org/2005/report'); $objWriter->writeAttribute('xmlns:of', 'urn:oasis:names:tc:opendocument:xmlns:of:1.2'); $objWriter->writeAttribute('xmlns:xhtml', 'http://www.w3.org/1999/xhtml'); $objWriter->writeAttribute('xmlns:grddl', 'http://www.w3.org/2003/g/data-view#'); $objWriter->writeAttribute('xmlns:officeooo', 'http://openoffice.org/2009/office'); $objWriter->writeAttribute('xmlns:tableooo', 'http://openoffice.org/2009/table'); $objWriter->writeAttribute('xmlns:drawooo', 'http://openoffice.org/2010/draw'); $objWriter->writeAttribute('xmlns:css3t', 'http://www.w3.org/TR/css3-text/'); $objWriter->writeAttribute('office:version', '1.2'); // Variables $stylePageLayout = $this->getPresentation()->getLayout()->getDocumentLayout(); if (empty($stylePageLayout)) { $stylePageLayout = 'sPL0'; } // office:styles $objWriter->startElement('office:styles'); // style:style $objWriter->startElement('style:style'); $objWriter->writeAttribute('style:name', 'sPres0'); $objWriter->writeAttribute('style:display-name', 'sPres0'); $objWriter->writeAttribute('style:family', 'presentation'); // style:graphic-properties $objWriter->startElement('style:graphic-properties'); $objWriter->writeAttribute('draw:fill-color', '#ffffff'); // > style:graphic-properties $objWriter->endElement(); // > style:style $objWriter->endElement(); foreach ($this->getPresentation()->getAllSlides() as $keySlide => $oSlide) { foreach ($oSlide->getShapeCollection() as $shape) { if ($shape instanceof Table) { $this->writeTableStyle($objWriter, $shape); } elseif ($shape instanceof Group) { $this->writeGroupStyle($objWriter, $shape); } elseif ($shape instanceof RichText) { $this->writeRichTextStyle($objWriter, $shape); } } $oBkgImage = $oSlide->getBackground(); if ($oBkgImage instanceof Image) { $this->writeBackgroundStyle($objWriter, $oBkgImage, $keySlide); } } // > office:styles $objWriter->endElement(); // office:automatic-styles $objWriter->startElement('office:automatic-styles'); // style:page-layout $objWriter->startElement('style:page-layout'); $objWriter->writeAttribute('style:name', $stylePageLayout); // style:page-layout-properties $objWriter->startElement('style:page-layout-properties'); $objWriter->writeAttribute('fo:margin-top', '0cm'); $objWriter->writeAttribute('fo:margin-bottom', '0cm'); $objWriter->writeAttribute('fo:margin-left', '0cm'); $objWriter->writeAttribute('fo:margin-right', '0cm'); $objWriter->writeAttribute('fo:page-width', Text::numberFormat(CommonDrawing::pixelsToCentimeters(CommonDrawing::emuToPixels($this->getPresentation()->getLayout()->getCX())), 1) . 'cm'); $objWriter->writeAttribute('fo:page-height', Text::numberFormat(CommonDrawing::pixelsToCentimeters(CommonDrawing::emuToPixels($this->getPresentation()->getLayout()->getCY())), 1) . 'cm'); $printOrientation = 'portrait'; if ($this->getPresentation()->getLayout()->getCX() > $this->getPresentation()->getLayout()->getCY()) { $printOrientation = 'landscape'; } $objWriter->writeAttribute('style:print-orientation', $printOrientation); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); // office:master-styles $objWriter->startElement('office:master-styles'); // style:master-page $objWriter->startElement('style:master-page'); $objWriter->writeAttribute('style:name', 'Standard'); $objWriter->writeAttribute('style:display-name', 'Standard'); $objWriter->writeAttribute('style:page-layout-name', $stylePageLayout); $objWriter->writeAttribute('draw:style-name', 'sPres0'); $objWriter->endElement(); $objWriter->endElement(); $objWriter->endElement(); // Return return $objWriter->getData(); }
/** * @param Title $oTitle */ private function writeTitle(Title $oTitle) { if ($oTitle->isVisible()) { // chart:title $this->xmlContent->startElement('chart:title'); $this->xmlContent->writeAttribute('svg:x', Text::numberFormat(CommonDrawing::pixelsToCentimeters($oTitle->getOffsetX()), 3) . 'cm'); $this->xmlContent->writeAttribute('svg:y', Text::numberFormat(CommonDrawing::pixelsToCentimeters($oTitle->getOffsetY()), 3) . 'cm'); $this->xmlContent->writeAttribute('chart:style-name', 'styleTitle'); // > text:p $this->xmlContent->startElement('text:p'); $this->xmlContent->text($oTitle->getText()); // > text:p $this->xmlContent->endElement(); // > chart:title $this->xmlContent->endElement(); } }
public function testRichTextShadow() { $randAlpha = rand(0, 100); $phpPresentation = new PhpPresentation(); $oSlide = $phpPresentation->getActiveSlide(); $oRichText = $oSlide->createRichTextShape(); $oRichText->createTextRun('AAA'); $oRichText->getShadow()->setVisible(true)->setAlpha($randAlpha)->setBlurRadius(2); $element = '/office:document-content/office:automatic-styles/style:style[@style:name=\'gr1\']/style:graphic-properties'; for ($inc = 0; $inc <= 360; $inc += 45) { $randDistance = rand(0, 100); $oRichText->getShadow()->setDirection($inc)->setDistance($randDistance); $pres = TestHelperDOCX::getDocument($phpPresentation, 'ODPresentation'); $this->assertTrue($pres->elementExists($element, 'content.xml')); $this->assertEquals('visible', $pres->getElementAttribute($element, 'draw:shadow', 'content.xml')); $this->assertEquals('none', $pres->getElementAttribute($element, 'style:mirror', 'content.xml')); // Opacity $this->assertStringStartsWith((string) (100 - $randAlpha), $pres->getElementAttribute($element, 'draw:shadow-opacity', 'content.xml')); $this->assertStringEndsWith('%', $pres->getElementAttribute($element, 'draw:shadow-opacity', 'content.xml')); // Color $this->assertStringStartsWith('#', $pres->getElementAttribute($element, 'draw:shadow-color', 'content.xml')); // X $xOffset = $pres->getElementAttribute($element, 'draw:shadow-offset-x', 'content.xml'); if ($inc == 90 || $inc == 270) { $this->assertEquals('0cm', $xOffset); } else { if ($inc > 90 && $inc < 270) { $this->assertEquals('-' . Drawing::pixelsToCentimeters($randDistance) . 'cm', $xOffset); } else { $this->assertEquals(Drawing::pixelsToCentimeters($randDistance) . 'cm', $xOffset); } } // Y $yOffset = $pres->getElementAttribute($element, 'draw:shadow-offset-y', 'content.xml'); if ($inc == 0 || $inc == 180 || $inc == 360) { $this->assertEquals('0cm', $yOffset); } else { if ($inc > 0 && $inc < 180 || $inc == 360) { $this->assertEquals(Drawing::pixelsToCentimeters($randDistance) . 'cm', $yOffset); } else { $this->assertEquals('-' . Drawing::pixelsToCentimeters($randDistance) . 'cm', $yOffset); } } } }