有什么方法可以将转换后的docx文件格式化为php中的文本?

时间:2019-09-23 20:04:54

标签: php ms-word docx .doc

您好,我想以一种很好的方式将转换后的doc或docx文件格式化为php中的文本吗? 下面的代码是我用来将docx文件转换为文本的类。

class DocxConversion{
    private $filename;

    public function __construct($filePath) {
        $this->filename = $filePath;
    }

    private function read_doc() {
        $fileHandle = fopen($this->filename, "r");
        $line = @fread($fileHandle, filesize($this->filename));   
        $lines = explode(chr(0x0D),$line);
        $outtext = "";
        foreach($lines as $thisline)
          {
            $pos = strpos($thisline, chr(0x00));
            if (($pos !== FALSE)||(strlen($thisline)==0))
              {
              } else {
                $outtext .= $thisline." ";
              }
          }
         $outtext = preg_replace("/[^a-zA-Z0-9\s\,\.\-\n\r\t@\/\_\(\)]/","",$outtext);
        return $outtext;
    }

    private function read_docx(){

        $striped_content = '';
        $content = '';

        $zip = zip_open($this->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;
    }

 /************************excel sheet************************************/

function xlsx_to_text($input_file){
    $xml_filename = "xl/sharedStrings.xml"; //content file name
    $zip_handle = new ZipArchive;
    $output_text = "";
    if(true === $zip_handle->open($input_file)){
        if(($xml_index = $zip_handle->locateName($xml_filename)) !== false){
            $xml_datas = $zip_handle->getFromIndex($xml_index);
            $xml_handle = DOMDocument::loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
            $output_text = strip_tags($xml_handle->saveXML());
        }else{
            $output_text .="";
        }
        $zip_handle->close();
    }else{
    $output_text .="";
    }
    return $output_text;
}

/*************************power point files*****************************/
function pptx_to_text($input_file){
    $zip_handle = new ZipArchive;
    $output_text = "";
    if(true === $zip_handle->open($input_file)){
        $slide_number = 1; //loop through slide files
        while(($xml_index = $zip_handle->locateName("ppt/slides/slide".$slide_number.".xml")) !== false){
            $xml_datas = $zip_handle->getFromIndex($xml_index);
            $xml_handle = DOMDocument::loadXML($xml_datas, LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING);
            $output_text .= strip_tags($xml_handle->saveXML());
            $slide_number++;
        }
        if($slide_number == 1){
            $output_text .="";
        }
        $zip_handle->close();
    }else{
    $output_text .="";
    }
    return $output_text;
}


    public function convertToText() {

        if(isset($this->filename) && !file_exists($this->filename)) {
            return "File Not exists";
        }

        $fileArray = pathinfo($this->filename);
        $file_ext  = $fileArray['extension'];
        if($file_ext == "doc" || $file_ext == "docx" || $file_ext == "xlsx" || $file_ext == "pptx")
        {
            if($file_ext == "doc") {
                return $this->read_doc();
            } elseif($file_ext == "docx") {
                return $this->read_docx();
            } elseif($file_ext == "xlsx") {
                return $this->xlsx_to_text();
            }elseif($file_ext == "pptx") {
                return $this->pptx_to_text();
            }
        } else {
            return "Invalid File Type";
        }
    }

}

示例输出就像没有间距,没有缩进,没有标题等的文本。 这是成功转换后的示例输出。

  

招待名单主持牧师Ron EgeGroom牧师的父母Mario Cabunoc Jr. Mrs. Mrs. Susana CabunocBride的父母:Edilberto Marucut先生(已故)。 Yolanda Marucut主要赞助商:Nemesio Desales III上尉Edwin Gines先生。华伦天奴(Valentino)Cabunoc先生。 Felipe Marucut先生Nilo Cabunoc先生。 Froilan Dulce先生Jose Fabie Cabunoc先生。 Ramon Navarro先生Alfonso Fernandez先生Isagani Cabunoc先生。艾伦·卡布诺克(Allan Cabunoc)先生。朱利叶斯·奥皮拉夫人Rhodora Desales太太。 Clarita Alonzo夫人NiñaCabunoc夫人。 Robelita Ana夫人Marife Cabunoc夫人。 Juvy Dulce Imelda de Guia女士。 Imelda Furagganan夫人。格拉纳达夫人(Madamoiselle Granada)夫人Mayeth Hidalgo夫人Analyn Cabida夫人Luz Ignacio最佳男装Mario Cabunoc III荣誉女仆Marivic Marucut s仪员Warren Van CabunocBridesmaid Cristhel Joy CabunocSecondary Sponsors Candles Christian Christian Paulo DivinaAlanisCyannesAlbeilyCycent Allen Ferre Rain Facunla《圣经》 Bearer Ralph Jacob Dulce Ring Bearer Caleb Joshua MarucutFlowergirlsShekinah Irish CabunocYurie Ysabelle MarucutElisha Bernice Cajandig

下面的文本是我想要的格式,就像在docx文件中一样。

  

参赛名单

     

主持牧师   罗恩·埃格牧师

     

新郎的父母   小马里奥·卡布诺克(Mario Cabunoc)夫人苏珊娜·卡布诺克(Susana Cabunoc)   新娘的父母:   Edilberto Marucut先生(已故)Yolanda Marucut夫人

     

主要赞助商:

     

Capt。 Nemesio Desales III   埃德温·吉恩斯先生   Valentino Cabunoc先生   费利佩·马鲁库特先生   Nilo Cabunoc先生   Froilan Dulce先生   Jose Fabie Cabunoc先生   拉蒙·纳瓦罗先生   阿方索·费尔南德斯先生   Isagani Cabunoc先生   艾伦·卡布诺克先生   朱利叶斯·奥皮拉先生   Rhodora Desales太太   克拉丽塔·阿隆佐夫人   NiñaCabunoc夫人   罗贝丽塔·安娜夫人   Marife Cabunoc夫人   Juvy Dulce太太   伊梅尔达·德吉亚夫人   Imelda Furagganan女士   格拉纳达夫人夫人   Mayeth Hidalgo夫人   阿纳琳·卡比达夫人    卢兹·伊格纳西奥夫人

我想在php中编辑docx文件的格式输出。有人可以帮忙吗? 预先谢谢你!

1 个答案:

答案 0 :(得分:0)

['2224'    ,   '42.82.207.241'  , '42.82.207.241'   ,   'W']

删除所有 p br

您需要先保护它们,然后再更换

$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);

我对每种段落使用单独的替换,因为您也可能想要
替换为”#CENTER#“ ,然后将其替换为多余的空格。我怎么了 如果没有,最好将它们合并为一个。