PHP网页导出Word文书档案的秘诀分别

function MakeFile{ $contents = $this->GetFile(); $fp = fopen; fwrite;
fclose; }

那个函数的重大成效实在正是深入分析HTML代码中的全数图片地址,何况逐个下载下来。获取到了图片的剧情现在,调用MhtFileMaker类,将图片增加到mht文件中。具体的丰硕细节,封装在MhtFileMaker类中了。

   
那些函数的要紧职能实在正是解析HTML代码中的全数图片地址,何况逐条下载下来。获取到了图片的内容现在,调用MhtFileMaker类,将图片增添到mht文件中。具体的丰硕细节,封装在MhtFileMaker类中了。

function SetSubject{ $this->SetHeader; }

‘; //批量生成 for{ $word = new word; //$html = “aaa”.$i; $wordname =
‘PHP教程网址–jb51.net’.$i.”.doc”; echo $html; $word->save;
ob_flush; }私家点评:这种措施效果最棒,原因有几个:

    function SetFrom($from){
        $this->SetHeader(“From: $from”);
    }

function MhtFile{

PHP10086

    }

地点商量了经过mht文件,来落实PHP导出doc格式的。这种格局能够缓慢解决四个难点,正是使导出的doc文件中蕴藏图表,当然,倘令你要包涵越多的剧情,比如CSS样式表,只须要用正则表达式解析HTML代码中的link标签,提取css样式文件的地方,然后读取并编码成base64,最终进入到mht文件中就足以了。

规律:com作为PHP的三个扩充类,安装过office的服务器会自行调用word.application的com,能够自动生成文档,PHP官方文书档案手册:

    function SetHeader($header){
        $this->headers[] = $header;
        $key = strtolower(substr($header, 0, strpos($header, ‘:’)));
        $this->headers_exists[$key] = TRUE;
    }

复制代码 代码如下:$fileContent =
getWordDocument($content,”//www.jb51.net/Music/etc/”);$fp =
fopen;fwrite;fclose;

二、利用windows下面的com组件

   
日常,有2种情势能够导出doc文书档案,生机勃勃种是采取com,况且作为php的叁个扩张库安装到服务器上,然后创制贰个com,调用它的诀窍。安装过office的服务器能够调用一个叫word.application的com,可以生成word文书档案,可是这种方式本人不推荐,因为推行效能十分低(笔者测量检验了弹指间,在执行代码的时候,服务器会真的去开辟二个word客户端卡塔 尔(英语:State of Qatar)。理想的com应该是从未界面的,在后台进行数量调换,那样效果会比较好,然而那么些扩张平时必要收取金钱。
   
第2种办法,就是用PHP将大家的doc文书档案内容一贯写入四个后缀为doc的公文中就能够。使用这种格局无需依附第三方扩展,何况举办作用较高。
   
word本人的效能依然很强盛的,它能够张开html格式的文本,並且能够保留格式,即便后缀为doc,它也能分辨平时展开。那就为大家提供了造福。可是有三个标题,html格式的文书中的图片独有二个地点,真正的图片是保留在别的地点的,也正是说,即使将HTML格式写入doc中,那么doc大校不能够包蕴图表。那大家什么样创建包括图表的doc文书档案呢?大家可以利用和html很附近的mht格式。
   
mht格式和html很肖似,只可是在mht格式中,外界链接进来的公文,举例图片、Javascript、CSS会被base64实行编码存款和储蓄。由此,单个mht文件就足以保留一个网页中的全数财富,当然,比较html,它的尺码也会超级大。
   
mht格式能被word识别吗?小编将八个网页保存成mht,然后改过后缀名字为doc,再用word展开,OK,word也足以识别mht文件,而且能够显示图片。
   
好了,既然doc能够识别mht,上边正是思虑怎样将图纸归入mht了。由于html代码中的图片的地点都以写在img标签的src属性中,由此,只要提取html代码中的src属性值,就能够获得图片地址。当然,有极大可能您取获得的是相对路线,没涉及,加上UEnclaveL的前缀,改成相对路线就足以了。有了图片地址,我们就足以透过file_get_content函数获取到图片文件的具体内容,然后调用base64_encode函数将文件内容编码成base64编码,最终插入到mht文件的方便岗位即可。
   
最终,大家有二种艺术将文件发送给客商端,风度翩翩种是先在服务器端生成三个doc文书档案,然后将这么些doc文书档案之处记录下来,最终,通过header(“location:xx.doc”);就足以让顾客端下载这么些doc。还会有风流倜傥种是直接发送html央求,改革HTML公约的header部分,将它的content-type设置为application/doc,将content-disposition设置为attachment,后面跟上文件名,发送完html公约以往,直接将文件内容发送给顾客端,也能够让客商端下载到那个doc文书档案。

接受格局:

专心,在动用这么些函数从前,您必要先包含类MhtFileMaker,那几个类能够协理大家生成Mht文书档案。

    function SetFirstPage($filename){
        $this->page_first = str_replace(“\\”, “/”, realpath(“{$this->dir_base}/$filename”));
    }

function SetFrom{ $this->SetHeader; }

其间,$content变量应该是HTML源代码,前边的链接应该是能互补HTML代码中图纸相对路线的U智跑L地址

    function GetFile(){
        $this->CheckHeaders();
        if (!$this->CheckFiles()) {
            exit (‘No file was added.’);
        } //www.jbxue.com
        $contents = implode(“\r\n”, $this->headers);
        $contents .= “\r\n”;
        $contents .= “MIME-Version: 1.0\r\n”;
        $contents .= “Content-Type: multipart/related;\r\n”;
        $contents .= “\tboundary=\”{$this->boundary}\”;\r\n”;
        $contents .= “\ttype=\”” . $this->files[0][‘mimetype’] . “\”\r\n”;
        $contents .= “X-MimeOLE: Produced By Mht File Maker v1.0 beta\r\n”;
        $contents .= “\r\n”;
        $contents .= “This is a multi-part message in MIME format.\r\n”;
        $contents .= “\r\n”;
        foreach ($this->files as $file) {
            $contents .= “–{$this->boundary}\r\n”;
            $contents .= “Content-Type: $file[mimetype]\r\n”;
            $contents .= “Content-Transfer-Encoding: $file[encoding]\r\n”;
            $contents .= “Content-Location: $file[filepath]\r\n”;
            $contents .= “\r\n”;
            $contents .= $file[‘filecont’];
            $contents .= “\r\n”;
        }
        $contents .= “–{$this->boundary}–\r\n”;
        return $contents;
    }

function AutoAddFiles(){ if (!isset { exit (‘Not set the first page.’);
} $filepath = str_replace($this->dir_base, ”,
$this->page_first); $filepath = ” . $filepath;
$this->AddFile($this->page_first, $filepath, NULL);
$this->AddDir; }

2.纯HTML格式写入word

    function CheckFiles(){
        if (count($this->files) == 0) {
            return FALSE;
        } else {
            return TRUE;
        }
    }

复制代码 代码如下:Description: The class
can make .mht
file.***********************************************************************/

运用官方实例:

    function SetBoundary($boundary = NULL){
        if ($boundary == NULL) {
            $this->boundary = ‘–‘ . strtoupper(md5(mt_rand())) . ‘_MULTIPART_MIXED’;
        } else {
            $this->boundary = $boundary;
        }
    }

透过以上的法规介绍,相信大家应该对促成的经过有个开端的问询了,上面小编付诸二个导出函数,那几个函数可以将HTML代码导出成三个mht文书档案,参数有3个,当中后2个为可选参数content:要更改的HTML代码absolutePath:
假使HTML代码中的图片地址都以相对路线,那么这一个参数正是HTML代码中缺少的相对路线。is伊RusseLink:是或不是去掉HTML代码中的超链接再次来到值为mht的文本内容,您能够由此file_put_content将它保存成后缀名叫doc的公文这几个函数的要害意义实在正是解析HTML代码中的全部图片地址,何况逐条下载下来。获取到了图片的内容现在,调用MhtFileMaker类,将图片增加到mht文件中。具体的丰裕细节,封装在MhtFileMaker类中了。

复制代码 代码如下:

    function AddDir($dir){
        $handle_dir = opendir($dir);
        while ($filename = readdir($handle_dir)) {
            if (($filename!=’.’) && ($filename金沙电子游戏中心,!=’..’) && (“$dir/$filename”金沙国际手机客户端,!=$this->page_first)) {
                if (is_dir(“$dir/$filename”)) {
                    $this->AddDir(“$dir/$filename”);
                } elseif (is_file(“$dir/$filename”)) {
                    $filepath = str_replace($this->dir_base, ”, “$dir/$filename”);
                    $filepath = ” . $filepath;
金沙国际唯一官网,                    $this->AddFile(“$dir/$filename”, $filepath, NULL);
                }
            }
        }
        closedir($handle_dir);
    }

复制代码 代码如下:/***
根据HTML代码获取word文书档案内容*
成立三个真相为mht的文书档案,该函数会分析文件内容并从远程下载页面中的图片财富*
该函数注重于类MhtFileMaker*
该函数会分析img标签,提取src的属性值。然则,src的属性值必需被引号包围,否则无法领取*
* @param string $content HTML内容* @param string $absolutePath
网页的相对路线。假如HTML内容里的图形路线为相对路线,那么就须求填写这些参数,来让该函数自动抵补成相对路线。那几个参数最终索要以/结束*
@param bool $isEraseLink 是不是去掉HTML内容中的链接* by
www.jb51.net*/function getWordDocument( $content , $absolutePath = “” ,
$isEraseLink = true ){ $mht = new MhtFileMaker $content =
preg_replace(‘//i’ , ‘$1’ , $content); //去掉链接

先是代码相比较简练,比较轻易精晓第二是永葆批量生成word第三是支持完全的html代码

    $images = array();
    $files = array();
    $matches = array();
    //这么些算法必要src后的属性值必得选用引号括起来
    if ( preg_match_all(‘/<img[.\n]*?src\s*?=\s*?[\”\’](.*?)[\”\’](.*?)\/>/i’,$content ,$matches ) )
    {
        $arrPath = $matches[1];
        for ( $i=0;$i<count($arrPath);$i++)
        {
            $path = $arrPath[$i];
            $imgPath = trim( $path );
            if ( $imgPath != “” )
            {
                $files[] = $imgPath;
                if( substr($imgPath,0,7) == ‘http://’)
                {
                    //绝对链接,不加前缀
                }
                else
                {
                    $imgPath = $absolutePath.$imgPath;
                }
                $images[] = $imgPath;
            }
        }
    }
    $mht->AddContents(“tmp.html”,$mht->GetMimeType(“tmp.html”),$content);
    
    for ( $i=0;$i<count($images);$i++)
    {
        $image = $images[$i];
        if ( @fopen($image , ‘r’) )
        {
            $imgcontent = @file_get_contents( $image );
            if ( $content )
                $mht->AddContents($files[$i],$mht->GetMimeType($image),$imgcontent);
        }
        else
        {
            echo “file:”.$image.” not exist!<br />”;
        }
    }
    
    return $mht->GetFile();
}

原理

动用方法1:远程调用复制代码
代码如下:$url= =
file_get_contents;$fileContent =
getWordDocument($content,” =
fopen;fwrite;fclose;在那之中,$content变量应该是HTML源代码,后边的链接应该是能互补HTML代码中图纸相对路线的U大切诺基L地址

    function AddFile($filename, $filepath = NULL, $encoding = NULL){
        if ($filepath == NULL) {
            $filepath = $filename;
        }
        $mimetype = $this->GetMimeType($filename);
        $filecont = file_get_contents($filename);
        $this->AddContents($filepath, $mimetype, $filecont, $encoding);
    }

发表评论

电子邮件地址不会被公开。 必填项已用*标注

CopyRight © 2015-2020 金沙中心城 All Rights Reserved.
网站地图xml地图