如何基於PHP實現微信小程序pdf文件的預覽功能
知識點
微信小程序預覽pdf文件
這都是一些實際項目的開發經驗,不是東拼西湊的網上水文。如果這篇文章幫到瞭你,麻煩動動你發財的小手給點個贊,留下個評論。🙏🙏🙏
問題描述
前段時間文庫類微信小程序開發中遇到個問題,就是要在小程序中預覽阿裡雲OSS中的pdf文件。微信官方給的方案就一個,就是把文檔緩存到本地然後用資源管理器打開。
這樣寫問題很明顯,pdf文件小的話還可以,當pdf文件很大的時候,加載速度就會很慢。而且我隻是需要預覽單純的前幾頁而已,也要把所有的文檔緩存下來,在文件資源管理器中打開。體驗非常不好。
探索過程
-
方案一:使用小程序的webview,在網頁中實現預覽。體驗還是可以的,但是遇到的問題是 跨域問題無法解決。
-
方案二:pdf.js。網上很多方案說是用這個,在服務器上寫個靜態頁面進行預覽。這種方案的話,如果pdf文件在自己域名的服務器上還可以。但是如果文件在第三方的oss中,還是會碰到跨域問題。而且線上小程序會出跳轉提示。pdf.js文檔比較難啃,各種兼容性,未知問題無法預知。
-
方案三:pdf文件轉圖片,小程序端隻是加載相應的圖片。這種方案最完美瞭,不過比較考研後端開發者。我們的後端嫌麻煩,不給我整,無奈。我隻能自己來整瞭。
實現思路
將要預覽的pdf文件的鏈接,跟要預覽的頁數傳遞給後端。後端根據傳遞的參數去解析pdf文件,並把需要的那一頁返回為圖片即可。
- 服務器需要安裝圖像處理軟件(ImageMagick) 用於生成圖片
- php需要安裝ImageMagick對應的擴展
- 服務器需要安裝 ghostscript 用於打開並解析pdf文件
最終效果
通過參數p指定相應的頁數以後,左邊就能顯示出相對應頁數的圖片瞭。
實現步驟
- 下載並編譯安裝 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
五條命令分別對應的操作為:下載 解壓 打開目錄 配置 編譯安裝
- 為php安裝擴展 imagemagick (我是在寶塔中一鍵安裝的)
還可以進行編譯安裝,這裡就暫且省略咯。
- 安裝 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
五條命令分別對應的操作為:下載 解壓 打開目錄 配置 編譯安裝
- 配置命令到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 '發生錯誤'; }
註意:pdf文件的路徑可以是自己服務器的,也可以自己調整。
總結
到此這篇關於如何基於PHP實現微信小程序pdf文件預覽功能的文章就介紹到這瞭,更多相關PHP微信小程序pdf文件預覽內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Centos安裝python3與scapy模塊的問題及解決方法
- PHP安裝Swoole支持DTLS協議步驟
- docker 編輯Dockerfile 添加php7.2 acpu的問題
- 在vmware虛擬機安裝dpdk的詳細過程
- python用moviepy對視頻進行簡單的處理