最近项目想用到"文档在线预览",参考了一下 使用OpenOffice.org将各类文档转为PDF

本想用OpenOffice的类, 但OpenOffice的类太复杂了..

后来想到了Aspose ,

Google docs(谷歌文档)也是用的这个商业解决方案..

当然还有PSVIEW 大家有兴趣研究下..是开源的

但是在偷窃的心理作用下..决定利用了下Google的优良服务.

演示地址: http://game.gtmm.cn/

以下为源代码(仅供参考..切莫用于商业用途..后台自负)

<?php/** 这个类的主要作用是从Google文档上下载回文件..没有什么正式的API..所以..琰`Google改了.这也要改* 使用的时候请注意改一下HOSTS文件....因为国内服务器都没办法访问Google Docs的.* 加入如下两条记录,在服务器HOSTS文件(所以..国内虚拟主机没办法了)* 203.208.45.200   docs.google.com* 74.125.31.132        doc-08-c8-docsviewer.googleusercontent.com* * by wc1217 Time: 2012-03-09 13:11:31*/class google_docs{private $viewerInfo = null;//private $decorate = '_';function __construct(){require_once 'curl_multi_class.php';}/** 得到Google Viewer转换之后的信息* $url* $retArray 应返回的键名*/private function getUrlViewerInfo($url, $retArray = array()){$multi = new curl_multi();$multi->setUrlList(array('https://docs.google.com/viewer?url=' . urlencode($url) . '&embedded=true&mobile=true'));//$multi->setOpt(array('CURLOPT_HEADER'=>1));$content = $multi->exec();$out = array();preg_match('/\{svUrl:\\\'\?url\\\\75(https?:\/\/.*?)\\\',biUrl:\\\'\?url\\\\75(https?:\/\/.*?)\\\',chanId:\\\'(.*?)\\\',gpUrl:\\\'(https?:\/\/.*?)\\\',docId:\\\'(.*?)\\\',numPages:(\d+),gtUrl:\\\'\?url\\\\75(https?:\/\/.*?)\\\',thWidth:(\d+),dlUrl:\\\'(.*?)\\\',thHeight:(.*?)\}/', $content[0], $out);if(empty($out) || count($out) != 11){trigger_error('没有应有的得到响应值!', E_USER_ERROR);}else{array_shift($out);$allArray = array_combine(array('svUrl', 'biUrl', 'chanId', 'gpUrl', 'docId', 'numPages', 'gtUrl', 'thWidth', 'dlUrl', 'thHeight'), $out); //合并键值//返回指定键值return empty($retArray) || !is_array($retArray) ? $allArray : array_intersect_key($allArray, array_flip($retArray));}}/** 转化八进制URL*/private function transFormUrl($url){return preg_replace('/\\\\(\d{2,3})/e', 'chr(ord("\\\$1"))', $url);}/** 转换成Png图片* $url type biUrl* $page number* @retrun array pngByte*/private function getUrlToPng($url, $page, $width = '1000'){$urlList = array();for($i = 1; $i <= $page; $i++){$urlList[] = $this->transFormUrl("https://docs.google.com/viewer?url={$url}&pagenumber={$i}&w={$width}");}$multi = new curl_multi();$multi->setUrlList($urlList);return $multi->exec();}/** 先得到文件信息*/function setUrlViewerInfo($url, $retArray = array('biUrl', 'numPages')){if(empty($url))trigger_error('$url can not be empty!', E_USER_ERROR);else$this->viewerInfo = $this->getUrlViewerInfo($url, $retArray);}/** 返回的Png的Byte保存至文件* $filePrefix 文件前缀* $numPages 要几页?*/function byteToPngFile($filePrefix = '', $numPages = 0){if(empty($this->viewerInfo))trigger_error('Please call setUrlViewerInfo() before runing!', E_USER_ERROR);else$biUrl = $this->viewerInfo;$pngByte = $this->getUrlToPng($biUrl['biUrl'], empty($numPages) ? $biUrl['numPages'] : $numPages);$succeed = array();foreach($pngByte as $key => $value){$succeed[] = file_put_contents($filePrefix . (sprintf("%02d", $key + 1)) . '.png', $value);}return $succeed;}/** 转换成PDF输出*/function viewerToPdfFile($filePrefix = ''){if(empty($this->viewerInfo))trigger_error('Please call setUrlViewerInfo() before runing!', E_USER_ERROR);else$gpUrl = $this->viewerInfo;$url = $this->transFormUrl($gpUrl['gpUrl']);$multi = new curl_multi();$multi->setOpt(array(/* 'CURLOPT_FOLLOWLOCATION' => 0,'CURLOPT_MAXREDIRS'=>3, */'CURLOPT_HEADER' => 1));$multi->setUrlList(array($url));$urlHeader = $this->transFormHeader($multi->exec()); //第一次..//得到cookie 还有location$cookie = explode(';', $urlHeader['Set-Cookie']); //Set-Cookie: $location = $urlHeader['Location']; //Location: //exit($cookie[0]);//$multi->setOpt(array('CURLOPT_COOKIE' => $cookie[0], 'CURLOPT_HEADER' => 1));$multi->setUrlList(array($location));$urlHeader = $this->transFormHeader($multi->exec()); //第二次$location = $urlHeader['Location']; //Location: $multi->setOpt(array('CURLOPT_COOKIE' => $cookie[0], 'CURLOPT_HEADER' => 0)); //第三次..加上cookie$multi->setUrlList(array($location));$bytePdf = $multi->exec();if(!empty($bytePdf[0]))return file_put_contents($filePrefix . 'pdf.pdf', $bytePdf);}/** 转化Header为数组格式*/private function transFormHeader($str){$headerArray = array();if(is_array($str))$str = $str[0];if(!empty($str) && strpos($str, "\n") !== false)foreach(explode("\n", $str) as $v){if(strpos($v, ': ') !== false){$t = explode(': ', $v);if(count($t) == 2)$headerArray[$t[0]] = $t[1];}}return $headerArray;}/** 得到文件信息,并写入文件* (不完全功能)有待XML解析*/function viewerToTextFile($filePrefix = ''){if(empty($this->viewerInfo))trigger_error('Please call setUrlViewerInfo() before runing!', E_USER_ERROR);else$gtUrl = $this->viewerInfo;$url = 'https://docs.google.com/viewer?url=' . $this->transFormUrl($gtUrl['gtUrl']);$multi = new curl_multi();$multi->setUrlList(array($url));return file_put_contents($filePrefix . 'text.txt', $multi->exec());}}

curl_multi的类.请引用curl_multi_class.php文件

文件来自本人上一篇文章 http://blog.csdn.net/wc1217/article/details/7332852

以下是测试文件index.php

<?phprequire_once 'google_docs_viewer.php';$docs = new google_docs();
$docs->setUrlViewerInfo('http://infolab.stanford.edu/pub/papers/google.pdf', null);
echo $docs->viewerToPdfFile('10123_')."\n";
echo $docs->viewerToTextFile('10123_')."\n";
print_r($docs->byteToPngFile('10123_'));

office(doc,xls,txt,pdf,ppt)文档在线预览及转换(office2pdf) - PHP版相关推荐

  1. 利用aspose转word为PDF实现文档在线预览

    原始需求 java-web and 小程序 项目某页面,用户在支付前生成在线合同,并且签订电子签名,并且可以提供PDF在线预览和下载功能. 分析问题 既然是在线合同,肯定就需要靠模板来生成,这里我使用 ...

  2. 前端【vue】实现文档在线预览功能,在线预览pdf、word、xls、ppt等office文件

    前端江太公 前端实现文档在线预览功能 最直接的就是使用XDOC 文档云服务 XDOC可以实现预览以DataURI表示的DOC文档,此外XDOC还可以实现文本.带参数文本.html文本.json文本.公 ...

  3. 【githubshare】开源的文件文档在线预览项目,支持主流办公文档的在线预览,如 doc、docx、Excel、pdf、txt、zip、rar、 图片等

    GitHub 上一份硬核计算机科学 CS 自学计划,偏向软件工程和系统架构方向. 旨在帮助开发者制定一个为期 3-5 年的重学 CS 目标,夯实 CS 基本功,达到美国一流大学 CS 专业本科毕业水平 ...

  4. office 文档 在线预览功能实现(word,excel,pdf,ppt等多种格式)——使用https://view.xdocin.com/view 提示文档过期——基础积累

    web实现office文档在线预览功能--基础积累 最近遇到一个需求,就是要实现多种文档链接的在线预览,最简单的方式就是通过window.open(url地址)的方式来实现. 但是如果要求是在一个弹窗 ...

  5. 文档在线预览(四)使用js前端实现word、excel、pdf、ppt 在线预览

    文章目录 实现方案 一.docx文件实现前端预览 1.docx-preview 2.Mammoth 二.PDF文件实现前端预览 1.pdf.js 2.pdfobject.js 3.vue-pdf 4. ...

  6. 文档在线预览(二)word、pdf、excel文件转html以实现文档在线预览

    文章目录 一.前言 1.aspose 2 .poi + pdfbox 3 spire 二.将文件转换成html字符串 1.将word文件转成html字符串 1.1 使用aspose 1.2 使用poi ...

  7. office文档在线预览工具平台选型

    ​​​​​​在线预览原理 文档在线预览说明: 1.业务系统生成文档浏览地址,用户通过终端进行访 2.用户终端访问文档预览资源地址,请求文档解析器,解析器分为私有云和公有云部署,作用是将文档进行解析成x ...

  8. office web viewer实现office文档在线预览

    office web viewer实现office文档在线预览 office web viewer官网介绍 若要自行制作 URL,您可使用以下链接,其中 <文档位置> 是文档的 URL. ...

  9. 永中云转换支持PPT动画播放 为文档在线预览多面赋能

    随着永中DCS文档在线预览4.0全新升级之后,其公有云版本--永中云转换也得到了全面升级,除了文档在线预览品质得到大幅提升之外,PPT动画播放预览在云转换上也支持了!平台升级之后,很快获得了文档在线预 ...

最新文章

  1. SQL Server 2012入门T-SQL基础篇:(8)Delete语句
  2. 报名丨24小时创新挑战:数字时代的人类健康与福祉
  3. 2018-2019-2 20165315 《网络对抗技术》Exp2+ 后门进阶
  4. 2020新版IDEA创建Web工程(包括添加Tomcat服务器、第三方jar包)
  5. php 利用redis写一个聊天室,Redis实现多人多聊天室功能
  6. (二)Docker配置修改阿里云镜像仓库
  7. python中静态方法可以访问对象变量_python 面向对象-实例变量、类变量、实例方法、类方法、静态方法...
  8. python开发转行渗透测试_月薪45K的大牛用Python开发一款密码攻击测试器!密码形同虚设!...
  9. android bitmap 替换指定颜色,Android 实现把bitmap图片的某一部分的颜色改成其他颜色...
  10. 图片加文字怎么弄?介绍几款不错的电脑图片编辑软件
  11. 【linux】正点原子linux教程学习
  12. 理解机器学习中的偏差与方差
  13. Borland听我对你说
  14. 教程篇(6.4) 02. FortiOS架构 ❀ 企业防火墙 ❀ Fortinet 网络安全架构师 NSE7
  15. 轻松在Google Chrome浏览器中管理您的电子邮件
  16. Python玩转《生僻字》
  17. python3 运行you get_You-Get的安装及使用方法
  18. 2020年下半年软件设计师下午真题试题(案例分析)及答案
  19. NodeJs 的fs模块
  20. eclipse web 项目目录结构

热门文章

  1. C语言32个关键字-最详解释
  2. 百度AI人脸检测实现性别、人种肤色、年龄检测python
  3. 设计模式【17】——备忘录模式(Memento 模式)
  4. JavaScript+html实现倒计时
  5. oracle正确卸载步骤,转自yuxuan_08
  6. TXT文件怎么转换成PDF这种格式?分享给大家三个方法!
  7. 电脑怎么把mv快速转换成mp3
  8. 无线键盘休眠后按键失效 - 解决方案
  9. java jce 授权_java jce限制
  10. 浏览器远程控制linux,VNC远程Linux桌面控制好用 --尤其是用浏览器