还是不按照写实验报告的步骤来了,简单记录一下。
最初的想法是能够将网络上的pdf链接在线预览,不用下载到本地,在电脑上还好,如果是在手机上的话,下载的文档不喜欢去清理,而用在线预览的方式可以直接打开pdf文档,省了很多事吧算是。在实现了pdf预览后,又顺便扩展了下,实现了office文档的预览。
效果预览:read.xiaowuyike.com
来说一下实现方法和遇到的坑吧,是个记录,也希望可以帮得到大家。菜鸟水平,菜鸟记录。
因为是回忆性质的,所以来说可能会少点东西或者什么,可以评论让我晓得,如果我还有印象,可以一起讨论
总的来说两个步骤:pdf转png、office转pdf
pdf转png
因为刚开始想的就是pdf的预览,所以最初的想法就是pdf如何在界面上显示出来。
在网上查了很多pdf在线预览,很多都是说用<iframe></iframe>
之类的标签嵌套一下,然后显示出来,但是发现手机上没得用,为什么电脑可以呢,原来是PC浏览器自带的pdf预览,并不是网站实现的。
最后实在没找到可行的方法,想到了预览类似图片的轮播之类的,因此直接上手,pdf转png,再把png显示出来就行了。
首先是对pdf链接下载的处理,将文件下载到服务器
1.先判断pdf文件本地是否存在,不存在下载,存在的话直接对现有文件操作
//判断文件是否已存在
if (file_exists($newfname)) {
$file = $newfname;
} else {
$file = fopen($url, "rb");
if ($file) {
$newf = fopen($newfname, "wb");
if ($newf)
while (!feof($file)) {
fwrite($newf, fread($file, 1024 * 8), 1024 * 8);
}
}
if ($file) {
fclose($file);
}
if ($newf) {
fclose($newf);
}
}
因为刚开始测试的是自己上传到服务器上的pdf文件,所以命名简单1.pdf之类的,当真正去下载网上链接的时候,发现链接都是编码了的,就像这样%A6%E8%A7%A3.pdf
,需要先解码,$newfname = urldecode($newfname);
,解码后再保存到服务器
2.对pdf转png的操作
用到了php的扩展imagemagick,因为我图省事用的是宝塔面板,所以直接在php扩展里安装就行了,linux下的安装自行google吧,查的时候也看到了很多。
pdf转图片也是用的CSDN的现成的,哈哈,链接地址
/**
* 将pdf文件转化为多张png图片
* @param string $pdf pdf所在路径 (/www/pdf/abc.pdf pdf所在的绝对路径)
* @param string $path 新生成图片所在路径 (/www/pngs/)
*
* @return array|bool
*/
function pdf2png($pdf, $path)
{
if (!extension_loaded('imagick')) {
return false;
}
if (!file_exists($pdf)) {
return false;
}
$im = new Imagick();
$im->setResolution(120, 120); //设置分辨率 值越大分辨率越高
$im->setCompressionQuality(100);//压缩图片 1最高 100无压缩
$im->readImage($pdf);
foreach ($im as $k => $v) {
$v->setImageFormat('png');
$fileName = $path . $k . '.png';
if ($v->writeImage($fileName) == true) {
$return[] = $fileName;
}
}
return $return;
}
事情是不可能顺利的,如果跳转了上边那个CSDN链接,可能会看见下边那个孤零零显示着的没回答的问题
readInmage的时候报这个错是怎么回事呢 Failed to read the file
我也遇到了,地址什么都对了的情况下,就是这儿$im->readImage($pdf);
报了错,继续加链接,原来还要装ghostscript,可以去官网下载包,安装办法参考CSDN,安装完成后再试就可以了的噻。
显示png的方法就不多说了,懒得像我一样也可以去找个图片播放器的源码,改改……
比我更懒的,那就找我要代码吧……
office转pdf
详见下篇
你好,,excel,doc格式能转换成图片吗