PHP office、pdf文档在线预览阅读

还是不按照写实验报告的步骤来了,简单记录一下。
最初的想法是能够将网络上的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

详见下篇

评论

  1. 小梁子
    Macintosh Chrome
    2年前
    2020-8-07 14:08:36

    你好,,excel,doc格式能转换成图片吗

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇