php 抓取网页生成图片(牢骚发完了,正式写博客吧(PHP生成word原理))

优采云 发布时间: 2021-12-18 22:18

  php 抓取网页生成图片(牢骚发完了,正式写博客吧(PHP生成word原理))

  概括:

  最近在工作中遇到了生词问题

  现在总结一下生成词的三种方法。

  btw:好像在博客园里发个博客,只要标题有PHP,好像点击量不是很高(兄弟,我标题还是有PHP的)。我不知道为什么。估计博客园里的网络技术专家比较多。把Java、.net、php比作程序员的闺蜜,那么java就是甲骨文下最好的姑娘,.net微软下的名门世家,PHP就是草根下的野蛮大妈。这让我很期待 PHP 的草根男士这么骚。怎么可能。. 委屈完了,正式写博客

  PHP为正文生成word的原理是通过windows下的com组件使用PHP将内容写入doc文件中实现的:

  原理:com是PHP的扩展。安装了office的服务器会自动调用word.application的com,可以自动生成文档。PHP 官方文档手册:

  使用官方示例:

  个人建议:com实例后面的方法需要查一下官方文档才知道是什么意思。编辑器没有代码提示,非常不方便。另外这个效率不是很高,所以不推荐使用

  使用 PHP 将内容写入 doc 文件。这种方法可以分为两种方法生成mht格式(类似HTML)并写入word

  这种方法主要是指:

  /**

* 根据HTML代码获取word文档内容

* 创建一个本质为mht的文档,该函数会分析文件内容并从远程下载页面中的图片资源

* 该函数依赖于类MhtFileMaker

* 该函数会分析img标签,提取src的属性值。但是,src的属性值必须被引号包围,否则不能提取

*

* @param string $content HTML内容

* @param string $absolutePath 网页的绝对路径。如果HTML内容里的图片路径为相对路径,那么就需要填写这个参数,来让该函数自动填补成绝对路径。这个参数最后需要以/结束

* @param bool $isEraseLink 是否去掉HTML内容中的链接

*/

function getWordDocument( $content , $absolutePath = "" , $isEraseLink = true )

{

$mht = new MhtFileMaker();

if ($isEraseLink)

$content = preg_replace('/(\s*.*?\s*)/i' , '$1' , $content); //去掉链接

$images = array();

$files = array();

$matches = array();

//这个算法要求src后的属性值必须使用引号括起来

if ( preg_match_all('/GetMimeType("tmp.html"),$content);

for ( $i=0;$iAddContents($files[$i],$mht->GetMimeType($image),$imgcontent);

}

else

{

echo "file:".$image." not exist!<br />";

}

}

return $mht->GetFile();

}

  这个函数的主要作用其实就是分析HTML代码中的所有图片地址,依次下载。获取到图片内容后,调用MhtFileMaker类将图片添加到mht文件中。具体的添加细节封装在 MhtFileMaker 类中。

  url= http://www.***.com;

$content = file_get_contents($url);

$fileContent = getWordDocument($content,"http://www.yoursite.com/Music/etc/");

$fp = fopen("test.doc", 'w');

fwrite($fp, $fileContent);

fclose($fp);

  其中$content变量应该是HTML源代码,下面的链接应该是可以在HTML代码中填写图片相对路径的URL地址

  header("缓存控制:无缓存,必须重新验证");

  header("Pragma: no-cache");

  $wordStr ='PHP淮北个人网站';

  $fileContent = getWordDocument($wordStr);

  $fileName = iconv("utf-8", "GBK",'PHP淮北'.'_'.$intro.'_'.rand(100, 999));

  header("内容类型:应用程序/文档");

  header("Content-Disposition: 附件;文件名=".$fileName.".doc");

  回声 $fileContent;

  注意在使用这个函数之前,需要收录类MhtFileMaker,它可以帮助我们生成Mht文件。

  点评:这种方式的缺点是不支持批量生成和下载,因为一个页面只能有一个header(无论是远程使用还是本地生成的statement header页面都只能输出一个header),即使你循环生成,结果还是只有一个字Generate(当然可以修改上面的方式来实现)

  2.纯HTML格式写字

  原则:

  使用ob_start先存储html页面(解决页面多个header的问题,可以批量生成),然后在写入doc文档的内容时使用

  代码:

<p>

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线