首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 實現線上預覽 PDF:直接輸出串流與 FlexPaper + PDF2SWF 進階方案

     編輯:PHP 綜合知識

方案一:直接輸出 PDF 串流(簡單、無轉換)

<?php
function read_pdf($file) {
    if (strtolower(pathinfo($file, PATHINFO_EXTENSION)) != 'pdf') {
        die('非 PDF 檔案');
    }
    if (!file_exists($file)) die('檔案不存在');

    header('Content-Type: application/pdf');
    header('Content-Disposition: inline; filename="' . basename($file) . '"');
    header('Content-Length: ' . filesize($file));
    readfile($file);
}

read_pdf('Python_study.pdf');

Content-Disposition: inline 讓瀏覽器直接顯示而非下載。

方案二:FlexPaper + PDF2SWF(百度文庫體驗)

  1. 安裝 PDF2SWF(SWFTools 套件)
  2. 轉換:pdf2swf input.pdf -o output.swf -f -T 9 -t
  3. 前端嵌入 FlexPaper
<script src="pdfobject.js"></script>
<script src="jquery-1.8.0.min.js"></script>
<script>
$(function() {
    // 方式一:自動嵌入
    // var myPDF = new PDFObject({url: "1.pdf"}).embed();

    // 方式二:指定容器
    var viewer = new PDFObject({url: "1.pdf"}).embed("#pdfobj");

    // 方式三:配置物件
    // var opts = {url: "1.pdf"};
    // var myPDF = new PDFObject(opts).embed();
});
</script>
<div id="pdfobj"></div>

方案比較

維度直接輸出FlexPaper+SWF
實作難度低高(需轉換工具、SWF 播放器)
瀏覽速度大檔案載入慢分頁載入、縮放流暢
行動裝置支援良好需 Flash,現代瀏覽器已棄用
搜尋/選取文字原生支援支援

現代替代方案

推薦使用 PDF.js(Mozilla 開發,純 JS 渲染 PDF,無需 Flash、支援所有現代瀏覽器):

<script src="pdf.js"></script>
<canvas id="pdf-canvas"></canvas>
<script>
pdfjsLib.getDocument('1.pdf').promise.then(function(pdf) {
    pdf.getPage(1).then(function(page) {
        var viewport = page.getViewport({scale: 1.5});
        var canvas = document.getElementById('pdf-canvas');
        var ctx = canvas.getContext('2d');
        canvas.height = viewport.height;
        canvas.width = viewport.width;
        page.render({canvasContext: ctx, viewport: viewport});
    });
});
</script>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved