如何基于PHP實(shí)現(xiàn)微信小程序pdf文件的預(yù)覽功能
知識(shí)點(diǎn)
微信小程序預(yù)覽pdf文件
這都是一些實(shí)際項(xiàng)目的開(kāi)發(fā)經(jīng)驗(yàn),不是東拼西湊的網(wǎng)上水文。如果這篇文章幫到了你,麻煩動(dòng)動(dòng)你發(fā)財(cái)?shù)男∈纸o點(diǎn)個(gè)贊,留下個(gè)評(píng)論。??????
問(wèn)題描述
前段時(shí)間文庫(kù)類(lèi)微信小程序開(kāi)發(fā)中遇到個(gè)問(wèn)題,就是要在小程序中預(yù)覽阿里云OSS中的pdf文件。微信官方給的方案就一個(gè),就是把文檔緩存到本地然后用資源管理器打開(kāi)。
這樣寫(xiě)問(wèn)題很明顯,pdf文件小的話還可以,當(dāng)pdf文件很大的時(shí)候,加載速度就會(huì)很慢。而且我只是需要預(yù)覽單純的前幾頁(yè)而已,也要把所有的文檔緩存下來(lái),在文件資源管理器中打開(kāi)。體驗(yàn)非常不好。
探索過(guò)程
方案一:使用小程序的webview,在網(wǎng)頁(yè)中實(shí)現(xiàn)預(yù)覽。體驗(yàn)還是可以的,但是遇到的問(wèn)題是 跨域問(wèn)題無(wú)法解決。
方案二:pdf.js。網(wǎng)上很多方案說(shuō)是用這個(gè),在服務(wù)器上寫(xiě)個(gè)靜態(tài)頁(yè)面進(jìn)行預(yù)覽。這種方案的話,如果pdf文件在自己域名的服務(wù)器上還可以。但是如果文件在第三方的oss中,還是會(huì)碰到跨域問(wèn)題。而且線上小程序會(huì)出跳轉(zhuǎn)提示。pdf.js文檔比較難啃,各種兼容性,未知問(wèn)題無(wú)法預(yù)知。
方案三:pdf文件轉(zhuǎn)圖片,小程序端只是加載相應(yīng)的圖片。這種方案最完美了,不過(guò)比較考研后端開(kāi)發(fā)者。我們的后端嫌麻煩,不給我整,無(wú)奈。我只能自己來(lái)整了。
實(shí)現(xiàn)思路
將要預(yù)覽的pdf文件的鏈接,跟要預(yù)覽的頁(yè)數(shù)傳遞給后端。后端根據(jù)傳遞的參數(shù)去解析pdf文件,并把需要的那一頁(yè)返回為圖片即可。
- 服務(wù)器需要安裝圖像處理軟件(ImageMagick) 用于生成圖片
- php需要安裝ImageMagick對(duì)應(yīng)的擴(kuò)展
- 服務(wù)器需要安裝 ghostscript 用于打開(kāi)并解析pdf文件
最終效果
通過(guò)參數(shù)p指定相應(yīng)的頁(yè)數(shù)以后,左邊就能顯示出相對(duì)應(yīng)頁(yè)數(shù)的圖片了。
實(shí)現(xiàn)步驟
- 下載并編譯安裝 ImageMagick
wget https://netix.dl.sourceforge.net/project/imagemagick/im7-src/ImageMagick-7.0.7-25.tar.gz tar -zxvf ImageMagick-7.0.7-25.tar.gz cd ImageMagick-7.0.7-25 ./configure make && make install
五條命令分別對(duì)應(yīng)的操作為:下載 解壓 打開(kāi)目錄 配置 編譯安裝
- 為php安裝擴(kuò)展 imagemagick (我是在寶塔中一鍵安裝的)
還可以進(jìn)行編譯安裝,這里就暫且省略咯。
- 安裝 ghostscript
wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs925/ghostscript-9.25.tar.gz tar zxvf ghostscript-9.25.tar.gz cd ghostscript-9.25 ./configure --prefix=/usr make && make install
五條命令分別對(duì)應(yīng)的操作為:下載 解壓 打開(kāi)目錄 配置 編譯安裝
- 配置命令到linux中
echo "/usr/local/lib" >> /etc/ld.so.conf ldconfig
- php解析文件代碼
<?php try{ $url = !empty($_GET['url']) ? $_GET['url'] : die('error'); $page = isset($_GET['p']) ? $_GET['p']-1 : '0'; $file_name = 'temp_' . mt_rand(1000,9999) . 'pdf'; file_put_contents( './'.$file_name,file_get_contents($url)); $imagePreview = new imagick('./'. $file_name . '['.$page.']'); $imagePreview->setImageFormat( "jpg" ); // $imagePreview->setResolution( 900, 900 ); header( "Content-Type: image/jpeg" ); echo $imagePreview; unlink('./'. $file_name); }catch(\Exception $e){ echo '發(fā)生錯(cuò)誤'; }
注意:pdf文件的路徑可以是自己服務(wù)器的,也可以自己調(diào)整。
總結(jié)
到此這篇關(guān)于如何基于PHP實(shí)現(xiàn)微信小程序pdf文件預(yù)覽功能的文章就介紹到這了,更多相關(guān)PHP微信小程序pdf文件預(yù)覽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
php簡(jiǎn)單統(tǒng)計(jì)中文個(gè)數(shù)的方法
這篇文章主要介紹了php簡(jiǎn)單統(tǒng)計(jì)中文個(gè)數(shù)的方法,涉及strlen、mb_strlen及mb_strwidth等函數(shù)的使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-09-09關(guān)于PHP文件的自動(dòng)運(yùn)行方法分析
這篇文章主要介紹了PHP文件的自動(dòng)運(yùn)行方法,分析了兩種自動(dòng)刷新的方法及相應(yīng)的優(yōu)缺點(diǎn),需要的朋友可以參考下2016-05-05php+mysqli事務(wù)控制實(shí)現(xiàn)銀行轉(zhuǎn)賬實(shí)例
這篇文章主要介紹了php+mysqli事務(wù)控制實(shí)現(xiàn)銀行轉(zhuǎn)賬,實(shí)例分析了事物控制的原理與事物回滾的使用技巧,需要的朋友可以參考下2015-01-01使用PHP遍歷文件目錄與清除目錄中文件的實(shí)現(xiàn)詳解
本篇文章是對(duì)使用PHP遍歷文件目錄與清除目錄中文件的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06PHP中$GLOBALS[''HTTP_RAW_POST_DATA'']和$_POST的區(qū)別分析
這篇文章主要介紹了PHP中$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的區(qū)別,結(jié)合具體實(shí)例形式分析了$GLOBALS['HTTP_RAW_POST_DATA']和$_POST的功能與使用過(guò)程中的區(qū)別,需要的朋友可以參考下2017-07-07PHP實(shí)現(xiàn)根據(jù)時(shí)間戳獲取周幾的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)根據(jù)時(shí)間戳獲取周幾的方法,涉及PHP針對(duì)時(shí)間與日期操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-02-02一個(gè)不易被發(fā)現(xiàn)的PHP后門(mén)代碼解析
這篇文章主要介紹了一個(gè)不易被發(fā)現(xiàn)的PHP后門(mén)代碼解析,對(duì)于網(wǎng)絡(luò)安全來(lái)說(shuō)非常重要,需要的朋友可以參考下2014-07-07php mongodb操作類(lèi) 帶幾個(gè)簡(jiǎn)單的例子
這篇文章主要介紹了php mongodb操作類(lèi) 帶幾個(gè)簡(jiǎn)單的例子,需要的朋友可以參考下2016-08-08整理的一些實(shí)用WordPress后臺(tái)MySQL操作命令
WordPress將其所有信息片段(包括文章、頁(yè)面、評(píng)論、博客鏈接、插件設(shè)置等)存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中。 雖然WordPress用戶可以通過(guò)網(wǎng)站后臺(tái)編輯控制以上信息片段2013-01-01