使用PHP从MS Word文档中提取图像的最简单方法?

时间:2012-03-18 05:51:32

标签: php ms-word

是否可以使用PHP从MS Word文档中提取图像?如果是这样,怎么样?

要求:绝对是老派的文档支持,但最好是旧的和新的。

4 个答案:

答案 0 :(得分:5)

创建一个新的PHP文件并将其命名为 extract.php ,并在其中添加以下代码。

<?php

/*Name of the document file*/
$document = 'attractive_prices.docx';

/*Function to extract images*/ 
function readZippedImages($filename) {


/*Create a new ZIP archive object*/
    $zip = new ZipArchive;

    /*Open the received archive file*/
    if (true === $zip->open($filename)) {
        for ($i=0; $i<$zip->numFiles;$i++) {


/*Loop via all the files to check for image files*/
            $zip_element = $zip->statIndex($i);


/*Check for images*/
            if(preg_match("([^\s]+(\.(?i)(jpg|jpeg|png|gif|bmp))$)",$zip_element['name'])) {


/*Display images if present by using display.php*/
                echo "<image src='display.php?filename=".$filename."&index=".$i."' /><hr />";
            }
        }
    }
}
readZippedImages($document);
?>

现在创建另一个PHP文件并将其命名为 display.php ,并将以下代码添加到其中。

<?php


/*Tell the browser that we want to display an image*/
    header('Content-Type: image/jpeg');


/*Create a new ZIP archive object*/
    $zip = new ZipArchive;

    /*Open the received archive file*/
    if (true === $zip->open($_GET['filename'])) {


/*Get the content of the specified index of ZIP archive*/
        echo $zip->getFromIndex($_GET['index']);
    }

    $zip->close();
?>

来源:Extracting Images from DocX using PHP

答案 1 :(得分:1)

如果要从旧文件中提取图像,则可以选择几种方法。

运行转换器将所有文件更新为DocX,然后使用IntermediateHacker的代码。

找到提取图像所需的VBA代码,然后创建一个宏并通过PHP的COM接口函数调用此代码,或者通过这些函数自行调用代码。

首先要做的是找到如何在VBA中完成它,这样可以更容易地在PHP中完成。

答案 2 :(得分:0)

如果您使用的是较新的docx格式,则可以轻松实现,因为它们只不过是一个zip文件。请参阅以下链接:

http://www.botskool.com/geeks/how-extract-images-docx-files-using-php

答案 3 :(得分:0)

希望此帮助对您有利,您也可以根据需要进行格式化。

<?php
/**  
 * Created by PhpStorm.
 * User: khalid
 * Date: 04/26/2015
 * Time: 10:32 AM
 */
class DocxImages {
private $file;
private $indexes = [ ];
/** Local directory name where images will be saved */
private $savepath = 'docimages';
public function __construct( $filePath ) {
    $this->file = $filePath;
    $this->extractImages();
}
function extractImages() {
    $ZipArchive = new ZipArchive;
    if ( true === $ZipArchive->open( $this->file ) ) {
        for ( $i = 0; $i < $ZipArchive->numFiles; $i ++ ) {
            $zip_element = $ZipArchive->statIndex( $i );
            if ( preg_match( "([^\s]+(\.(?i)(jpg|jpeg|png|gif|bmp))$)", $zip_element['name'] ) ) {
                $imagename                   = explode( '/', $zip_element['name'] );
                $imagename                   = end( $imagename );
                $this->indexes[ $imagename ] = $i;
            }
        }
    }
}
function saveAllImages() {
    if ( count( $this->indexes ) == 0 ) {
        echo 'No images found';
    }
    foreach ( $this->indexes as $key => $index ) {
        $zip = new ZipArchive;
        if ( true === $zip->open( $this->file ) ) {
            file_put_contents( dirname( __FILE__ ) . '/' . $this->savepath . '/' .    $key, $zip->getFromIndex( $index ) );
        }
        $zip->close();
    }
}
function displayImages() {
    $this->saveAllImages();
    if ( count( $this->indexes ) == 0 ) {
        return 'No images found';
    }
    $images = '';
    foreach ( $this->indexes as $key => $index ) {
        $path = 'http://' . $_SERVER['HTTP_HOST'] . '/' . $this->savepath . '/' . $key;
        $images .= '<img src="' . $path . '" alt="' . $key . '"/> <br>';
    }
    echo $images;
 }
}
$DocxImages = new DocxImages( "doc.docx" );
/** It will save and display images*/
$DocxImages->displayImages();
/** It will only save images to local server */
#$DocxImages->saveAllImages();
?>