是否可以使用PHP从MS Word文档中提取图像?如果是这样,怎么样?
要求:绝对是老派的文档支持,但最好是旧的和新的。
答案 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();
?>
答案 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();
?>