Skip to content

#160 refactoring: Merge TableFull-Table Style + Merge MemoryImage-Image #169

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Mar 26, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ This release marked the transformation to namespaces (PHP 5.3+).

### Features

None yet.
- Image: Ability to use remote or GD images using `addImage()` on sections, headers, footer, cells, and textruns - @ivanlanin
- Header: Ability to use remote or GD images using `addWatermark()` - @ivanlanin

### Bugfixes

Expand All @@ -21,6 +22,8 @@ None yet.
- Use `PhpOffice\PhpWord` namespace for PSR compliance - @RomanSyroeshko @gabrielbull GH-159 GH-58
- Restructure folders and change folder name `Classes` to `src` and `Tests` to `test` for PSR compliance - @RomanSyroeshko @gabrielbull
- Compliance to phpDocumentor - @ivanlanin
- Merge Style\TableFull into Style\Table. Style\TableFull is deprecated - @ivanlanin GH-160
- Merge Section\MemoryImage into Section\Image. Section\Image is deprecated - @ivanlanin GH-160

## 0.8.1 - 17 Mar 2014

Expand Down
19 changes: 9 additions & 10 deletions docs/elements.rst
Original file line number Diff line number Diff line change
Expand Up @@ -239,17 +239,15 @@ See ``Sample_09_Tables.php`` for more code sample.
Images
------

To add an image, use the ``addImage`` or ``addMemoryImage`` method. The
first one is used when your source is stored locally, the later is used
when your source is a remote URL, either another script that create
image or an image on the internet.

Syntax:
To add an image, use the ``addImage`` method to sections, headers, footers,
textruns, or table cells.

.. code-block:: php

$section->addImage($src, [$style]);
$section->addMemoryImage($link, [$style]);

- `source` String path to a local image or URL of a remote image
- `styles` Array fo styles for the image. See below.

Examples:

Expand All @@ -266,9 +264,10 @@ Examples:
'wrappingStyle' => 'behind'
)
);

$section->addMemoryImage('http://example.com/image.php');
$section->addMemoryImage('http://php.net/logo.jpg');
$footer = $section->createFooter();
$footer->addImage('http://example.com/image.php');
$textrun = $section->createTextRun();
$textrun->addImage('http://php.net/logo.jpg');

Image styles
~~~~~~~~~~~~
Expand Down
34 changes: 34 additions & 0 deletions src/PhpWord/Exceptions/InvalidObjectException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php
/**
* PHPWord
*
* Copyright (c) 2014 PHPWord
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* @category PHPWord
* @package PHPWord
* @copyright Copyright (c) 2014 PHPWord
* @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
* @version 0.8.0
*/
namespace PhpOffice\PhpWord\Exceptions;

/**
* Exception used for when an image is not found
*/
class InvalidObjectException extends Exception
{
}
126 changes: 42 additions & 84 deletions src/PhpWord/Media.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

namespace PhpOffice\PhpWord;

use PhpOffice\PhpWord\Section\MemoryImage;
use PhpOffice\PhpWord\Section\Image;

/**
* Media
Expand Down Expand Up @@ -69,81 +69,56 @@ class Media
*
* @param string $src
* @param string $type
* @param \PhpOffice\PhpWord\Section\MemoryImage|null $memoryImage
* @param \PhpOffice\PhpWord\Section\Image $image
* @return mixed
*/
public static function addSectionMediaElement($src, $type, MemoryImage $memoryImage = null)
public static function addSectionMediaElement($src, $type, Image $image = null)
{
$mediaId = md5($src);
$key = ($type === 'image') ? 'images' : 'embeddings';

if (!array_key_exists($mediaId, self::$_sectionMedia[$key])) {
$cImg = self::countSectionMediaElements('images');
$cObj = self::countSectionMediaElements('embeddings');
$rID = self::countSectionMediaElements() + 7;

$media = array();

$folder = null;
$file = null;
if ($type === 'image') {
$cImg++;
//Detect if it's a memory image first by php ext and second by regex
$isMemImage = false;
if (stripos(strrev($src), strrev('.php')) === 0) {
$isMemImage = true;
}
if (!$isMemImage) {
$isMemImage = (filter_var($src, \FILTER_VALIDATE_URL) !== false);
if (!is_null($image)) {
$isMemImage = $image->getIsMemImage();
$extension = $image->getImageExtension();
} else {
$isMemImage = false;
}
$extension = '';
if ($isMemImage) {
$extension = $memoryImage->getImageExtension();
$media['isMemImage'] = true;
$media['createfunction'] = $memoryImage->getImageCreateFunction();
$media['imagefunction'] = $memoryImage->getImageFunction();
} else {
$imageType = exif_imagetype($src);
if ($imageType === \IMAGETYPE_JPEG) {
$extension = 'jpg';
} elseif ($imageType === \IMAGETYPE_GIF) {
$extension = 'gif';
} elseif ($imageType === \IMAGETYPE_PNG) {
$extension = 'png';
} elseif ($imageType === \IMAGETYPE_BMP) {
$extension = 'bmp';
} elseif ($imageType === \IMAGETYPE_TIFF_II || $imageType === \IMAGETYPE_TIFF_MM) {
$extension = 'tif';
}
$media['createfunction'] = $image->getImageCreateFunction();
$media['imagefunction'] = $image->getImageFunction();
}

$folder = 'media';
$file = $type . $cImg . '.' . strtolower($extension);
} elseif ($type === 'oleObject') {
$cObj++;
$folder = 'embedding';
$file = $type . $cObj . '.bin';
}

$media['source'] = $src;
$media['target'] = "$folder/section_$file";
$media['type'] = $type;
$media['rID'] = $rID;

self::$_sectionMedia[$key][$mediaId] = $media;

if ($type === 'oleObject') {
return array($rID, ++self::$_objectId);
}

return $rID;
} else {
if ($type === 'oleObject') {
$rID = self::$_sectionMedia[$key][$mediaId]['rID'];
return array($rID, ++self::$_objectId);
}
return self::$_sectionMedia[$key][$mediaId]['rID'];
}

if ($type === 'oleObject') {
$rID = self::$_sectionMedia[$key][$mediaId]['rID'];
return array($rID, ++self::$_objectId);
}
return self::$_sectionMedia[$key][$mediaId]['rID'];
}

/**
Expand Down Expand Up @@ -207,50 +182,42 @@ public static function countSectionMediaElements($key = null)
*
* @param int $headerCount
* @param string $src
* @param \PhpOffice\PhpWord\Section\MemoryImage|null $memoryImage
* @param \PhpOffice\PhpWord\Section\Image $image
* @return int
*/
public static function addHeaderMediaElement($headerCount, $src, MemoryImage $memoryImage = null)
public static function addHeaderMediaElement($headerCount, $src, Image $image = null)
{
$mediaId = md5($src);
$key = 'header' . $headerCount;

if (!array_key_exists($key, self::$_headerMedia)) {
self::$_headerMedia[$key] = array();
}

if (!array_key_exists($mediaId, self::$_headerMedia[$key])) {
$cImg = self::countHeaderMediaElements($key);
$rID = $cImg + 1;

$cImg++;
$inf = pathinfo($src);
$isMemImage = (substr(strtolower($inf['extension']), 0, 3) == 'php') ? true : false;

$media = array();
if (!is_null($image)) {
$isMemImage = $image->getIsMemImage();
$extension = $image->getImageExtension();
} else {
$isMemImage = false;
}
if ($isMemImage) {
$ext = $memoryImage->getImageExtension();
$media['isMemImage'] = true;
$media['createfunction'] = $memoryImage->getImageCreateFunction();
$media['imagefunction'] = $memoryImage->getImageFunction();
} else {
$ext = $inf['extension'];
if ($ext == 'jpeg') { // Office crashes when adding a jpEg Image, so rename to jpg
$ext = 'jpg';
}
$media['createfunction'] = $image->getImageCreateFunction();
$media['imagefunction'] = $image->getImageFunction();
}
$file = 'image' . $cImg . '.' . strtolower($ext);

$file = 'image' . $cImg . '.' . strtolower($extension);
$media['source'] = $src;
$media['target'] = 'media/' . $key . '_' . $file;
$media['type'] = 'image';
$media['rID'] = $rID;

self::$_headerMedia[$key][$mediaId] = $media;

return $rID;
} else {
return self::$_headerMedia[$key][$mediaId]['rID'];
}
return self::$_headerMedia[$key][$mediaId]['rID'];
}

/**
Expand Down Expand Up @@ -279,50 +246,41 @@ public static function getHeaderMediaElements()
*
* @param int $footerCount
* @param string $src
* @param \PhpOffice\PhpWord\Section\MemoryImage|null $memoryImage
* @param \PhpOffice\PhpWord\Section\Image $image
* @return int
*/
public static function addFooterMediaElement($footerCount, $src, MemoryImage $memoryImage = null)
public static function addFooterMediaElement($footerCount, $src, Image $image = null)
{
$mediaId = md5($src);
$key = 'footer' . $footerCount;

if (!array_key_exists($key, self::$_footerMedia)) {
self::$_footerMedia[$key] = array();
}

if (!array_key_exists($mediaId, self::$_footerMedia[$key])) {
$cImg = self::countFooterMediaElements($key);
$rID = $cImg + 1;

$cImg++;
$inf = pathinfo($src);
$isMemImage = (substr(strtolower($inf['extension']), 0, 3) == 'php') ? true : false;

$media = array();
if (!is_null($image)) {
$isMemImage = $image->getIsMemImage();
$extension = $image->getImageExtension();
} else {
$isMemImage = false;
}
if ($isMemImage) {
$ext = $memoryImage->getImageExtension();
$media['isMemImage'] = true;
$media['createfunction'] = $memoryImage->getImageCreateFunction();
$media['imagefunction'] = $memoryImage->getImageFunction();
} else {
$ext = $inf['extension'];
if ($ext == 'jpeg') { // Office crashes when adding a jpEg Image, so rename to jpg
$ext = 'jpg';
}
$media['createfunction'] = $image->getImageCreateFunction();
$media['imagefunction'] = $image->getImageFunction();
}
$file = 'image' . $cImg . '.' . strtolower($ext);

$file = 'image' . $cImg . '.' . strtolower($extension);
$media['source'] = $src;
$media['target'] = 'media/' . $key . '_' . $file;
$media['type'] = 'image';
$media['rID'] = $rID;

self::$_footerMedia[$key][$mediaId] = $media;

return $rID;
} else {
return self::$_footerMedia[$key][$mediaId]['rID'];
}
return self::$_footerMedia[$key][$mediaId]['rID'];
}

/**
Expand Down
Loading