【问题标题】:Google Drive PDF Viewer sometimes not loading the pdfGoogle Drive PDF Viewer 有时无法加载 pdf
【发布时间】:2020-12-11 00:39:49
【问题描述】:

我正在使用 google drive pdf 查看器,使用以下代码

<embed src="https://drive.google.com/viewerng/viewer?embedded=true&url=https://xxx.xxxxx.com/download/testpdf.pdf" width="100%" height="375"></embed>

奇怪的是 - 它只是间歇性地工作。我不想在 googledrive 上回复。是否有任何查看器脚本可以安装在我的服务器中以便我可以使用它作为替代?如果可能,还请分享一些使用它的示例代码。谢谢

【问题讨论】:

    标签: pdf viewer


    【解决方案1】:

    我会推荐 js pdf 查看器替代方案。 pdf.js

    https://mozilla.github.io/pdf.js/

    下面是代码,你需要

    1. 准备好 pdf.js
    2. 准备好 pdf.worker.js

    把下面的代码写成“viewer.php”,然后你可以使用另一个php脚本调用“viewer.php?pdffile=test.pdf”,你就可以开始了。

    请注意,旧浏览器可能无法在此查看器上运行。但是目前的智能手机浏览器就可以了。

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    
    <style>
    body {
     font-family: 'Lato', Calibri, Arial, sans-serif;
     color: #000000;
    }
    
     
    #the-canvas {
      border: 1px solid black;
      direction: ltr;
      width:100%;
      height:auto;
    }
    
    </style>
    
     
    <script src="./pdf.js"></script>
    
     
    <div>  
    <button id="prev">▲</button>
    <button id="next">▼</button>
      &nbsp; &nbsp;
      <span>Page: <span id="page_num"></span> / <span id="page_count"></span></span>
    </div>
    
     
    
    <canvas id="the-canvas"></canvas>
    
     
    
    <script>
    
    // If absolute URL from the remote server is provided, configure the CORS
    // header on that server.
    var url = "<?php echo $_REQUEST["pdffile"]; ?>";
    // Loaded via <script> tag, create shortcut to access PDF.js exports.
    
    var pdfjsLib = window['pdfjs-dist/build/pdf'];
    
    pdfjsLib.GlobalWorkerOptions.workerSrc = './pdf.worker.js';
    
     
    var pdfDoc = null,
    
        pageNum = 1,
    
        pageRendering = false,
    
        pageNumPending = null,
    
        scale = 5,
    
        canvas = document.getElementById('the-canvas'),
    
        ctx = canvas.getContext('2d');
    
     
    
    /**
    
     * Get page info from document, resize canvas accordingly, and render page.
    
     * @param num Page number.
    
     */
    
    function renderPage(num) {
    
      pageRendering = true;
    
      // Using promise to fetch the page
    
      pdfDoc.getPage(num).then(function(page) {
    
        var viewport = page.getViewport({scale: scale});
    
        canvas.height = viewport.height;
    
        canvas.width = viewport.width;
    
     
    
        // Render PDF page into canvas context
    
        var renderContext = {
    
          canvasContext: ctx,
    
          viewport: viewport
    
        };
    
        var renderTask = page.render(renderContext);
    
     
    
        // Wait for rendering to finish
    
        renderTask.promise.then(function() {
    
          pageRendering = false;
    
          if (pageNumPending !== null) {
    
            // New page rendering is pending
    
            renderPage(pageNumPending);
    
            pageNumPending = null;
    
          }
    
        });
    
      });
    
     
    
      // Update page counters
    
      document.getElementById('page_num').textContent = num;
    
    }
    
     
    
    /**
    
     * If another page rendering in progress, waits until the rendering is
    
     * finised. Otherwise, executes rendering immediately.
    
     */
    
    function queueRenderPage(num) {
    
      if (pageRendering) {
    
        pageNumPending = num;
    
      } else {
    
        renderPage(num);
    
      }
    
    }
    
     
    
    /**
    
     * Displays previous page.
    
     */
    
    function onPrevPage() {
    
      if (pageNum <= 1) {
    
        return;
    
      }
    
      pageNum--;
    
      queueRenderPage(pageNum);
    
    }
    
    document.getElementById('prev').addEventListener('click', onPrevPage);
    
     
    
    /**
    
     * Displays next page.
    
     */
    
    function onNextPage() {
    
      if (pageNum >= pdfDoc.numPages) {
    
        return;
    
      }
    
      pageNum++;
    
      queueRenderPage(pageNum);
    
    }
    
    document.getElementById('next').addEventListener('click', onNextPage);
    
     
    
    /**
    
     * Asynchronously downloads PDF.
    
     */
    
    pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {
    
      pdfDoc = pdfDoc_;
    
      document.getElementById('page_count').textContent = pdfDoc.numPages;
    
     
    
      // Initial/first page rendering
    
      renderPage(pageNum);
    
    });
    
    </script>
    

    【讨论】:

    • 太棒了。我刚刚下载,它就像一个魅力。
    猜你喜欢
    • 2017-10-25
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2018-07-03
    • 2018-05-24
    • 1970-01-01
    • 2020-05-26
    相关资源
    最近更新 更多