Есть ли способ отформатировать преобразованный файл DOCX в текст в PHP? - PullRequest
1 голос
/ 23 сентября 2019

Здравствуйте. Хочу приятно отформатировать преобразованный файл 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";
        }
    }

}

Пример вывода - это просто текст без пробелов, отступов, заголовков и многого другого.Это пример выходных данных, которые приходят после успешного его преобразования.

СПИСОК ИНОСТРАННЫХ ДЕЙСТВИЙ Руководящий пастор Пастор Родители Рона Эгегрума г-н Марио Кабунок младший.Родители Сюзаны КабунокБрайд: г-н Эдильберто Марукут (умерший) г-жаИоланда Марукут Главные спонсоры: капитан Немезио Десалес III, г-н Эдвин Гинес.Valentino CabunocMr.Фелипе МарукутМр.Nilo CabunocMr.Froilan Dulce Mr. Jose Fabie CabunocMr.Рамон Наварро г-н Альфонсо Фернандес г-н Исагани Кабунок г-н.Аллан КабуноцЮлиус ОрпиллаМиссисРодора DesalesMrs.Кларита Алонзо г-жа Нина КабуноцРобелита Ана Миссис Марифе КабуноцJuvy Dulce Mrs. Imelda de GuiaMs.Имельда ФураггананMadamoiselle Гранада миссис Mayeth Идальго миссис Analyn Cabida миссис Luz Игнасио Best Man Марио Cabunoc III Maid Чести Marivic MarucutGroomsman Уоррен Ван CabunocBridesmaid Cristhel Joy CabunocSecondary Спонсоры Свечи Кристиан Пауло DivinaAlanis Джойс AlbisoVeil Винсент Аллен FernandezShiela мая CabunocCord Курт Джейсон AlbisoCyrille Allyssa LimpinCoin однонаправленного ахиллова RonilRain FacunlaБиблия на предъявителя Ральф Джейкоб Дульсе Кольцо на предъявителя Калеб Джошуа МарукутFlowergirlsShekinah Ирландский CabunocYurie Ysabelle MarucutElisha Бернис Каджандиг

Этот текст ниже - формат, который я хочу сделать, как и в файле 1011 *

* ENTOURAGE LIST

Управляющий пастор Пастор Рон Эге

Родители жениха Мистер Марио Кабунок-младший Родители миссис Сусаны Кабунок Невесты: г-н Эдильберто Марукут (умерший) г-жа Иоланда Марукут

Основные спонсоры:

Капитан.Немезио Десалес III г-н Эдвин Джинс г-н Валентино Кабунок г-н Фелипе Марукут г-н Нило Кабунок г-н Фрулан Дульсе г-н Хосе Фаби Кабунок г-н Рамон Наварро г-н Альфонсо Фернандес г-н Изагани Кабунок г-н Аллан Кабунок г-н Юлиус Орпилла г-жаРодора Десалс миссис Кларита Алонзо миссис Нина Кабунок миссис Робелита Ана миссис Марифе Кабунок миссис Джуви Дульс миссис Имельда де Гиа г-жа Имельда Фурагганан миссис Мадамизель Гранада миссис Майет * Идальго миссис Луио 10-я Гиньяк Айнайз 10 лет

Я хочу отредактировать вывод формата файла docx в php.Кто-нибудь может помочь?Заранее спасибо !!

...