pdf.js 使用實例

轉自:https://www.cnblogs.com/xiangliuyunyang/p/5956453.html


pdf.js可以實現在html下直接瀏覽pdf文檔,是一款開源的pdf文檔讀取解析插件

pdf.js主要包含兩個庫文件,一個pdf.js和一個pdf.worker.js,,一個負責API解析,一個負責核心解析

下載地址:http://cnblogs.com/files/xiangliuyunyang/build.zip

兩個主要demo

1.點擊連接讀取第一頁的pdf文檔:http://www.51purse.com/pdf/web/demo1.html(此處沒有自己上傳)

2.點擊連接,選擇需要打開的文件,進行pdf預覽:http://www.51purse.com/pdf/web/demo2.html(此處沒有自己上傳)

參考代碼:

demo1:

複製代碼
 1 <html>
 2 <head>
 3     <meta charset="UTF-8">
 4     <title>Document</title>
 5     <style type="text/css">
 6         .lightbox{
 7             position: fixed;
 8             top: 0px;
 9             left: 0px;
10             height: 100%;
11             width: 100%;
12             z-index: 7;
13             opacity: 0.3;
14             display: block;
15             background-color: rgb(0, 0, 0);
16         }
17         .pop{
18             position: absolute;
19             left: 50%;
20             width: 894px;
21             margin-left: -447px;
22             z-index: 9;
23         }
24     </style>
25     <script src="Scripts/pdf.js" type="text/javascript"></script>
26     <script type="text/javascript">
27         function showPdf() {
28             var container = document.getElementById("container");
29             container.style.display = "block";
30             var url = 'Scripts/jQuery經典入門教程(絕對詳細).pdf';
31             PDFJS.workerSrc = 'Scripts/pdf.worker.js';
32             PDFJS.getDocument(url).then(function getPdfHelloWorld(pdf) {
33                 pdf.getPage(1).then(function getPageHelloWorld(page) {
34                     var scale = 1;
35                     var viewport = page.getViewport(scale);
36                     var canvas = document.getElementById('the-canvas');
37                     var context = canvas.getContext('2d');
38                     canvas.height = viewport.height;
39                     canvas.width = viewport.width;
40                     var renderContext = {
41                         canvasContext: context,
42                         viewport: viewport
43                     };
44                     page.render(renderContext);
45                 });
46             });
47         }
48     </script>
49 </head>
50 <body>
51     <h1><a href="javascript:void(0)" target="_blank" onclick="showPdf()">顯示pdf文檔</a></h1>
52     <div id="container" style="display: none;">
53         <div class="lightbox"></div>
54         <div id="pop" class="pop">
55             <canvas id="the-canvas"></canvas>
56         </div>
57     </div>
58 </body>
59 </html>
複製代碼

 

demo2:

複製代碼
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .lightbox{
            position: fixed;
            top: 0px;
            left: 0px;
            height: 100%;
            width: 100%;
            z-index: 7;
            opacity: 0.3;
            display: block;
            background-color: rgb(0, 0, 0);
            display: none;
        }
        .pop,iframe{
            position: absolute;
            left: 50%;
            top:0;
            width: 893px;
            height: 100%;
            margin-left: -446.5px;
            z-index: 9;
        }
    </style>
    <script src="Scripts/pdf.js" type="text/javascript"></script>
    <script type="text/javascript">
        function showPdf(isShow) {
            var state = "";
            if (isShow) {
                state = "block";
            } else {
                state = "none";
            }
            var pop = document.getElementById("pop");
            pop.style.display = state;
            var lightbox = document.getElementById("lightbox");
            lightbox.style.display = state;
        }
        function close() {
            showPdf(false);
        }
    </script>
</head>
<body>
    <ul>
        <li><a href="Scripts/jQuery經典入門教程(絕對詳細).pdf" target="pdfContainer" onclick="showPdf(true)">0001_pdf</a></li>   
    </ul>
    <div class="lightbox" id="lightbox"></div>
    <div id="pop" class="pop" style="display: none;">
        <a href="javascript:close()" style="
            position: absolute;
            right: -90px;
            display: inline-block;
            width: 80px;
            height: 30px;
        " id="close">關閉</a>
        <iframe src="" frameborder="0" id="pdfContainer" name="pdfContainer"></iframe>
    </div>
</body>
</html>
複製代碼

項目架構:

 

注(下面內容來自論壇:http://bbs.csdn.net/topics/392177382):

pdf.js 應該是每次只能把一頁放到一個canvas裏,官方的例子也是如此。所以把所有頁面放在多個canvas內就可以解決。
寫一個for循環去把每一頁讀取出來放到一個動態創建的canvas元素裏,追加到原來的canvas後面即可。
如果不明白,看下面我改的代碼:
PDFJS.getDocument("http://www.server.com/file.pdf").then(function getPdfHelloWorld(pdf) {
  
  for (var i = 0; i < pdf.numPages; i++) {
    //
    // 獲取第i頁
    //
    pdf.getPage(i).then(function getPageHelloWorld(page) {
      var scale = 1.5;
      var viewport = page.getViewport(scale);

      //
      // Prepare canvas using PDF page dimensions
      //
      var canvas = document.createElement('canvas');
      var context = canvas.getContext('2d');
      canvas.height = viewport.height;
      canvas.width = viewport.width;

      // 這裏拿body當pdf容器
      document.body.appendChild(canvas);
      //
      // Render PDF page into canvas context
      //
      page.render({canvasContext: context, viewport: viewport});
    });
  }
});

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章