`

php 导出word(可包含图片)

    博客分类:
  • PHP
 
阅读更多

发布:sunday01   来源:Net

今天 为大家介绍一个 php 生成 导出word(可包含图片)的代码,有需要的朋友可以参考下。
转自:http://www.jbxue.com/article/6348.html

之前介绍过php生成word的例子,只是不能包含图片与链接。
今天 为大家介绍一个 php 生成 导出word(可包含图片)的代码,有需要的朋友可以参考下。
1、生成word的类 docclass.php:
 

复制代码代码示例:

<?php
/***********************************************************************
Class: Mht File Maker
Version: 1.2 beta
Link:www.jbxue.com
Author: Wudi <wudicgi@yahoo.de>
Description: The class can make .mht file.
***********************************************************************/

class MhtFileMaker{
var $config = array();
var $headers = array();
var $headers_exists = array();
var $files = array();
var $boundary;
var $dir_base;
var $page_first;

function MhtFile($config = array()){

}

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

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

function SetSubject($subject){
$this->SetHeader("Subject: $subject");
}

function SetDate($date = NULL, $istimestamp = FALSE){
if ($date == NULL) {
$date = time();
}
if ($istimestamp == TRUE) {
$date = date('D, d M Y H:i:s O', $date);
}
$this->SetHeader("Date: $date");
}

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

function SetBaseDir($dir){
$this->dir_base = str_replace()("\", "/", realpath($dir));
}

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

function AutoAddFiles(){
if (!isset()($this->page_first)) {
exit ('Not set the first page.');
}
$filepath = str_replace($this->dir_base, '', $this->page_first);
$filepath = 'http://mhtfile' . $filepath;
$this->AddFile($this->page_first, $filepath, NULL);
$this->AddDir($this->dir_base);
}

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 = 'http://mhtfile' . $filepath;
$this->AddFile("$dir/$filename", $filepath, NULL);
}
}
}
closedir($handle_dir);
}

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

function AddContents($filepath, $mimetype, $filecont, $encoding = NULL){
if ($encoding == NULL) {
$filecont = chunk_split()(base64_encode($filecont), 76);
$encoding = 'base64';
}
$this->files[] = array('filepath' => $filepath,
'mimetype' => $mimetype,
'filecont' => $filecont,
'encoding' => $encoding);
}

function CheckHeaders(){
if (!array_key_exists('date', $this->headers_exists)) {
$this->SetDate(NULL, TRUE);
}
if ($this->boundary == NULL) {
$this->SetBoundary();
}
}

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

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

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

function GetMimeType($filename){
$pathinfo = pathinfo($filename);
switch ($pathinfo['extension']) {
case 'htm': $mimetype = 'text/html'; break;
case 'html': $mimetype = 'text/html'; break;
case 'txt': $mimetype = 'text/plain'; break;
case 'cgi': $mimetype = 'text/plain'; break;
case 'php': $mimetype = 'text/plain'; break;
case 'css': $mimetype = 'text/css'; break;
case 'jpg': $mimetype = 'image/jpeg'; break;
case 'jpeg': $mimetype = 'image/jpeg'; break;
case 'jpe': $mimetype = 'image/jpeg'; break;
case 'gif': $mimetype = 'image/gif'; break;
case 'png': $mimetype = 'image/png'; break;
default: $mimetype = 'application/octet-stream'; break;
}
return $mimetype;
}
}
?>

2、导出word文件 exportdoc.php
 

复制代码代码示例:

<?php 
/**
* 根据HTML代码获取word文档内容
* 创建一个本质为mht的文档,该函数会分析文件内容并从远程下载页面中的图片资源
* 该函数依赖于类MhtFileMaker
* 该函数会分析img标签,提取src的属性值。但是,src的属性值必须被引号包围,否则不能提取

* @param string $content HTML内容
* @param string $absolutePath 网页的绝对路径。如果HTML内容里的图片路径为相对路径,那么就需要填写这个参数,来让该函数自动填补成绝对路径。这个参数最后需要以/结束
* @param bool $isEraseLink 是否去掉HTML内容中的链接
*/
include_once("docclass.php"); 
function getWordDocument( $content , $absolutePath = "" , $isEraseLink = true )
{
$mht = new MhtFileMaker();
if ($isEraseLink)
$content = preg_replace('/<as*.*?s*>(s*.*?s*)</a>/i' , '$1' , $content); //去掉链接

$images = array();
$files = array();
$matches = array();
//这个算法要求src后的属性值必须使用引号括起来
if ( preg_match_all('/<img[.n]*?srcs*?=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();
}
$content=implode("",file("http://www.jbxue.com/print.php?id=3548"));
$fileContent = getWordDocument($content,".");
$fp = fopen("hugesky_word.doc", 'w');
fwrite($fp, $fileContent);
fclose($fp); 
?>

您可能感兴趣的文章:
php导出word格式文档的实例代码
php生成excel或word文档的最简单方法
php生成word文档(读取数据库)
php生成word最简单的例子
php使用phpword生成word文档的例子
php生成word文件的简单范例
php生成word的例子
php使用phpword生成word文档
分享到:
评论

相关推荐

    Oracle数据库表结构导出成Word文档工具(带源码下载)

    Oracle数据库表结构导出成Word文档工具(带源码下载) 修改了一下数据库的连接方式:由于我安装的是win764位+office64+oracle client 32位,用MSDAORA.1无法连接,所以将MSDAORA.1换为OraOleDb.Oracle.1,换后正常连接...

    使用PHP导出Word文档的原理和实例

     一般,有2种方法可以导出doc文档,一种是使用com,并且作为php的一个扩展库安装到服务器上,然后创建一个com,调用它的方法。安装过office的服务器可以调用一个叫word.application的com,可以生成word文档,不过...

    强大的php生成word ,html,rtf,pdf框架(包含中文文档)

    PHPWord Beta 0.6.2 开发者指南 目 录 首先我们要了解文档最基本的信息和设置: 4 计量单位:缇(twips) 4 字体设置 4 文档属性设置 4 新建文档 5 添加页面 5 页面样式 5 页面样式属性 6 文本 7 添加文本 7 添加...

    Html转Word(doc,docx),带样式以及图片

    Html转Word(doc,docx),带样式以及图片转换,无缝对接

    PhpWord中文手册

    使用php语言操作 word ,包括:word 基本的属性设置,word...非常难得的一个PHPWord中文参考手册,PHP导出word文档,可实现自动分页,可插入图片,表格等,总共三十三页,内容详细,有明确的例子。简单易懂,欢迎下载。

    html页面表格导出excel(原生js浏览器全兼容)

    如果后台不提供导出excel表格的接口,那么我们js有自己的方法可以支持。操作简单,可封装。完全抛弃后台,自己展示,自己导出,非常实用,资源内包含demo,一目了然。(原生js浏览器全兼容)

    yii2-export:以各种格式(例如excel,html,pdf,csv等)导出serverdb数据的库

    yii2-export 一个使用库以各种格式(例如excel... 列选择器提供的功能包括: 显示列选择器下拉列表,以允许选择要导出的列。 新的container属性允许您对导出菜单和列选择器下拉列表进行分组。 新的template属性,用于操

    moodle-local_wordimport:包装Moodle插件强制在Microsoft Word文件importexport集中安装所有插件

    适用于Microsoft Word的Moodle插件Microsoft Word文件导入/导出本地插件该插件是一个外壳插件,它依赖于所有Microsoft Word文件导入/导出集插件。 这些插件允许将Word文件导入到文本字段(Atto),书籍,词汇表,...

    PHP程序开发范例宝典III

    《PHP程序开发范例宝典》分为20章,内容包括PHP的运行环 境配置、表单及表单元素的应用、CSS与JavaScript脚本的应用、验证控件、构建PHP动态网页、PHP与MySQL的数据库技术、PHP与其他数据库技 术、SQL查询相关技术...

    java开源包5

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解...可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    php网络开发完全手册

    7.3.4 str_word_count 107 7.3.5 字符串查找操作——strstr 108 7.3.6 获得字符串的长度——strlen 108 7.3.7 获得字符串的子串——substr 109 7.4 正则表达式简介 109 7.5 正则表达式与字符操作的综合应用 110 ...

    SOAOFFICE - 微软 OFFICE 中间件

    通过SOAOffice,在Web世界里,难以驯服的Word/Excel就变成了普通的、熟悉的、服务器端可调用的.Net组件、Java组件、ASP组件、PHP组件,开发人员再也不用研究复杂的Word/Excel COM自动化细节、学习复杂的VBA语法调用...

    php OA 源码 办公自动化源码

    包括Word/Excel/PPT/HTML/PDF/RTF等格式。 可以对目录夹设定候修改和访问的权限,只有有权限的员才可以修改目录夹及相关文件,在设定权限时,可以按人来设定,也可以按部门来设定。 可以通过设定,对每个人的上传...

    奥瑞文oExam在线考试系统

    支持试卷导出到Word 支持以整张试卷方式编辑试题 支持无限层次的机构分组 支持总公司-分公司-中心支公司等数据、权限分级管理模式 支持逐题模式、整卷模式考试 支持限制考试次数 支持任意类型的考试总分设置 ...

    网管教程 从入门到精通软件篇.txt

    DUN:Microsoft拔号网络导出文件 DV:数字视频文件(MIME) DWG:AutoCAD工程图文件;AutoCAD或Generic CADD老版本的绘图格式 DXR:Macromedia Director受保护(不可编辑)电影文件 E EDA:Ensoniq ASR磁盘映像...

    EnableQ在线问卷调查引擎 v5.0 For Windows 整合安装包.exe

    EnableQ中Q是英文Questionnaire(调查表,问卷)的缩写,作为...经过严格测试表明,EnableQ生成的问卷1秒内可响应高达20次的数据提交,就导出调查数据的性能而言,30万条问卷数据导出至SPSS/R,少于4分钟的时间就可完成。

    Excel百宝箱8.0

    【删除工资条恢复明细表】【制作工资条】【建立分页小计】【删除分页小计】【建立图片目录】【批量导入图片(精确匹配)】【批量导入图片(模糊匹配)】【批量导入图片到批注】【删除所有图片】【批量导出图片】...

    ansible-ubuntu-wordpress:使用对象和页面缓存快速构建基于Ubuntu的超快速Word Web服务器

    此外,它将: 安装Wordpress插件列表安装主题列表,包括激活主题列表从另一个站点导入数据库导出先决条件一个Ubuntu 20.04盒子Ansible安装创建自己的清单: cp -rfp inventories/sample inventories/my-cool-...

    帝国下载系统 v2.5 开源正式版 bulid 090613.rar

    1、对系统进行全面的优化、调整,包括数据库与程序代码,代码基本重写。使系统运行效率更高更稳定。 2、新增下载字母导航,可以按头字母对下载内容进行检索。 3、新增专题功能,可以对下载进行自定义分类。 4、...

    Java版水果管理系统源码-VJAdmin:这是一款基于tp5和bjui的高可伸缩性和高可拓展性的二次开发框架

    后续会继承大量常用功能(包括微信,PHPWord等) 运行环境要求PHP5.6以上。 对tp5不了解,可以参考开发文档 交流群 开发过程中有什么问题可以进群交流,群号:645422792。 演示地址 用户名:youke 密码:123456 版本...

Global site tag (gtag.js) - Google Analytics