簡體   English   中英

有沒有辦法將轉換后的 docx 文件格式化為 php 中的文本?

[英]Is there any way to format converted docx file to text in php?

您好,我想以一種很好的方式將轉換后的 doc 或 docx 文件格式化為 php 中的文本? 下面的代碼是我用來將 docx 文件轉換為文本的 class。

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";
        }
    }

}

示例 output 就像一個沒有空格、沒有縮進、沒有標題等的文本。 這是一個示例 output,當我成功轉換它時。

隨行人員名單 主禮牧師 Ron EgeGroom 的父母 Mr. Mario Cabunoc Jr.Mrs. Susana CabunocBride 的父母:Edilberto Marucut 先生(已故)Mrs. Yolanda Marucut 主要贊助商:Capt. Nemesio Desales III Edwin Gines 先生 Valentino Cabunoc 先生費利佩·馬魯卡特先生 Nilo Cabunoc 先生 Froilan Dulce Jose Fabie Cabunoc 先生 Ramon Navarro Alfonso Fernandez 先生 Isagani Cabunoc 先生艾倫·卡布諾克朱利葉斯·奧皮拉夫人羅多拉 DesalesMrs. Clarita Alonzo 夫人 Niña Cabunoc 夫人 Robelita Ana Marife Cabunoc 夫人 Juvy Dulce Imelda de GuiaMs 夫人。 伊梅爾達·弗拉格甘夫人 Madamoiselle Granada Mayeth Hidalgo 夫人 Analyn Cabida 夫人 Luz Ignacio 夫人 伴郎 Mario Cabunoc III 伴娘 Marivic Marucut 伴娘 Warren Van Cabunoc 伴娘 Cristhel Joy Cabunoc 二次贊助蠟燭 Christian Paulo DivinaAlanis Joyce AlbisoVeil Vincent Allen FernandezShiela May CabunocCord Kurt Jayson AlbisoCyrille Allyonil Bearer Achille Rain Facunla 聖經持有人 Ralph Jacob Dulce 戒指持有人 Caleb Joshua Marucut 花姑娘Shekinah Irish CabunocYurie Ysabelle MarucutElisha Bernice Cajandig

下面的這段文字是我想做的格式,就像在 docx 文件中一樣。

隨行人員名單

主禮牧師 Ron Ege

新郎父母 Mr. Mario Cabunoc Jr. Mrs. Susana Cabunoc 新娘父母: Mr. Edilberto Marucut(已故) Mrs. Yolanda Marucut

主要贊助商:

Capt. Nemesio Desales III Edwin Gines 先生 Valentino Cabunoc 先生 Felipe Marucut 先生 Nilo Cabunoc 先生 Froilan Dulce 先生 Jose Fabie Cabunoc 先生 Ramon Navarro 先生 Alfonso Fernandez 先生 Isagani Cabunoc 先生 Allan Cabunoc 先生 Julius Orpilla 先生Rhodora Desales 夫人 Clarita Alonzo 夫人 Niña Cabunoc 夫人 Robelita Ana 夫人 Marife Cabunoc 夫人 Juvy Dulce 夫人 Imelda de Guia 夫人 Imelda Furagganan 夫人 Madamoiselle Granada 夫人 Mayeth Hidalgo 夫人 Analyn Cabida 夫人 Luz Ignacio 夫人

我想編輯 php 中 docx 文件的格式輸出。 任何人都可以幫忙嗎? 先感謝您!!

這個

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

刪除所有pbr

你需要先保護它們,然后替換

$content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content);
$content = str_replace('</w:r></w:p>', "#BR#", $content);
$content = str_replace('<w:br/>', "#BR#", $content);
$content = str_replace('<w:jc w:val="center"/>', "#BR##BR#", $content);
$content = str_replace('<w:jc w:val="both"/>', "#BR##BR#", $content);
$content = str_replace('<w:jc w:val="left"/>', "#BR##BR#", $content);
$content = str_replace('<w:jc w:val="right"/>', "#BR##BR#", $content);
$striped_content = strip_tags($content);
$striped_content = str_replace("#BR#","\r\n", $striped_content);

我對每種段落都使用單獨的替換,因為您也可能想要
“#CENTER#”之類的東西替換“<w:jc w:val="center"/>” ,然后用額外的空格替換它。 我是怎么做的。 如果沒有,最好將它們合二為一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM