如何使用php代码点火器读取docx文件数学方程式 [英] how to read docx file math equations using php code-igniter

查看:104
本文介绍了如何使用php代码点火器读取docx文件数学方程式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从php读取docx文件,因为我读取成功,但是我没有在word文档中得到一些方程式,因为我是php的新手,所以我不知道如何阅读,请提出一些建议,功能我尝试阅读的文档是

I am trying to read a docx file from php, as i read successfully but i didnt get some equation in the word document, as i am newbie in php i didnt know how to read that please suggest some ideas, the function i have tried to read the document is

function index()
{
    $document = 'file_path';
    $text_output = $this->read_docx($document);
    echo nl2br($text_output);

}
private function read_docx($filename) 
{
    var_dump($filename);
    $striped_content = '';
    $content = '';

    $zip = zip_open($filename);

    if (!$zip || is_numeric($zip))
        return false;

    while ($zip_entry = zip_read($zip)) {

        if (zip_entry_open($zip, $zip_entry) == FALSE)
            continue;

        if (zip_entry_name($zip_entry) != "word/document.xml")
            continue;

        $content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

        zip_entry_close($zip_entry);
    }// end while

    zip_close($zip);

    $content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content);
    $content = str_replace('</w:r></w:p>', "\r\n", $content);
    $striped_content = strip_tags($content);

    return $striped_content;
}

这是docx文件中的示例数学方程式,我正尝试读取并呈现到html页面.谢谢

This is the sample math equation in the docx file which i am trying to read and render to html page. thanks

推荐答案

我完全了解了此

I fully go through this https://msdn.microsoft.com/en-us/library/aa982683(v=office.12).aspx#Office2007ManipulatingXMLDocs_exploring and parse the xml using php xmlreader()

$document = 'url';
/*Function to extract images*/ 
function readZippedImages($filename) 
{
    $for_image = $filename;
    /*Create a new ZIP archive object*/
    $zip = new ZipArchive;
    /*Open the received archive file*/
    $final_arr=array();
    $repo = array();
    if (true === $zip->open($filename)) 
    {
        for ($i=0; $i<$zip->numFiles;$i++) 
        {
            if($i==3)//should be document.xml
            {
                //======function using xml parser================================//
                $check = $zip->getFromIndex($i);
                //Create a new XMLReader Instance
                $reader = new XMLReader();
                //Loading from a XML File or URL
                //$reader->open($check);
                //Loading from PHP variable
                $reader->xml($check);

                //====================parsing through the document==================//
                while($reader->read())
                {
                $node_loc = $reader->localName;
                if($reader->nodeType == XMLREADER::ELEMENT && $reader->localName == 'body')
                {
                 $reader->read();
                 $read_content = $reader->value. "\n";
                }
                if($node_loc == '#text')//parsing all the text from document using #text tag
                {
                    $temp_value = array("text"=>$reader->value);
                    array_push($final_arr,$temp_value);
                    $reader->read();
                    $read_content = $reader->value. "\n";
                }
                 if($node_loc == 'blip')//parsing all the images using blip tag which is under drawing tag
                {
                    $attri_r = $reader->getAttribute("r:embed");
                    $current_image_name = $repo[$attri_r];
                    $image_stream = $this->showimage($for_image,$current_image_name);//return the base64 string
                    $temp_value = array("image"=>$image_stream);
                    array_push($final_arr,$temp_value);
                }
                }
                //==================xml parser end============================//
            }
            if($i==2)//should be rels.xml
            {
                $check_id = $zip->getFromIndex($i);
                $reader_relation = new XMLReader();
                $reader_relation->xml($check_id);

                //====================parsing through the document==================//
                while($reader_relation->read())
                {
                    $node_loc = $reader_relation->localName;
                    if($reader_relation->nodeType == XMLREADER::ELEMENT && $reader_relation->localName == 'Relationship')
                    {
                     $read_content_id = $reader_relation->getAttribute("Id");
                     $read_content_name = $reader_relation->getAttribute("Target");
                     $repo[$read_content_id]=$read_content_name;
                    }

                }
            }
        }
     }
}


function showimage($zip_file_original, $file_name_image) 
{
    $file_name_image = 'word/'.$file_name_image.'';// getting the image in the zip using its name
    $z_show = new ZipArchive();
    if ($z_show->open($zip_file_original) !== true) {
        echo "File not found.";
        return false;
    }

    $stat = $z_show->statName($file_name_image);
    $fp   = $z_show->getStream($file_name_image);
    if(!$fp) {
        echo "Could not load image.";
        return false;
    }

    header('Content-Type: image/jpeg');
    header('Content-Length: ' . $stat['size']);
    $image = stream_get_contents($fp);
    $picture = base64_encode($image);
    return $picture;//return the base62 string for the current image.
    fclose($fp);
}
readZippedImages($document);

打印$ final_arr,您将获得文档中的所有文本和图像.

print the $final_arr you will get the all text and images in the document.

这篇关于如何使用php代码点火器读取docx文件数学方程式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆