jQuery+pdf.js 实现的PDF切换预览

快来打我* 2021-07-04 17:40 527阅读 0赞

index.html

需要部署在web服务器上打开

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <link rel="stylesheet" href="content/css/reset.css">
  7. <link rel="stylesheet" href="content/css/site.css">
  8. </head>
  9. <body>
  10. <div class="container">
  11. <div class="read-ppt">
  12. <div class="ppt-view">
  13. <canvas id="canvas"></canvas>
  14. <div class="loading"></div>
  15. </div>
  16. <span class="next"></span>
  17. <span class="prev"></span>
  18. </div>
  19. <div class="ppt-pager" style="display: block;">
  20. <span class="current-page">1</span>
  21. <span>/</span>
  22. <span class="total-page">47</span>
  23. </div>
  24. </div>
  25. <script src="scripts/lib/jquery.min.js"></script>
  26. <script src="scripts/lib/pdf.js"></script>
  27. <script src="scripts/lib/pdf.worker.js"></script>
  28. <!--<script src="scripts/lib/compatibility.js"></script> <script src="scripts/lib/pdf.combined.js"></script>-->
  29. <script src="scripts/sites/readPPT.js"></script>
  30. </body>
  31. </html>

reset.css

  1. html { color: #000; }
  2. body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, fieldset, legend, input, button, textarea, select, p, blockquote, th, td {
  3. margin: 0;
  4. padding: 0
  5. }
  6. table {
  7. border-collapse: collapse;
  8. border-spacing: 0
  9. }
  10. fieldset, img { border: 0 }
  11. address, button, caption, cite, code, dfn, em, input, optgroup, option, select, strong, textarea, th, var { font: inherit }
  12. del, ins { text-decoration: none }
  13. li {
  14. list-style: none;
  15. list-style-image: none;
  16. }
  17. caption, th { text-align: left }
  18. h1, h2, h3, h4, h5, h6 {
  19. font-size: 100%;
  20. font-weight: normal
  21. }
  22. q:before, q:after { content: '' }
  23. abbr, acronym {
  24. border: 0;
  25. font-variant: normal
  26. }
  27. sup { vertical-align: super }
  28. sub { vertical-align: baseline }
  29. legend { color: #000 }
  30. em { font-style: italic; }
  31. strong { font-weight: bold; }
  32. p { line-height: 18px; }
  33. body { font: 13px/1.231 arial, helvetica, clean, sans-serif; }

site.css

  1. .container {
  2. width: 100%;
  3. max-width: 1140px;
  4. margin: 0 auto;
  5. margin-top: 50px;
  6. }
  7. .read-ppt {
  8. position: relative;
  9. width: 85%;
  10. margin: auto;
  11. height: 0;
  12. text-align: center;
  13. border: 1px solid #d1d6da;
  14. margin-bottom: 15px;
  15. }
  16. .loading {
  17. position: absolute;
  18. display: none;
  19. left: 50%;
  20. top: 50%;
  21. margin-top: -25px;
  22. margin-left: -25px;
  23. width: 50px;
  24. height: 50px;
  25. background: url("../images/loading.gif") no-repeat;
  26. }
  27. .read-ppt span {
  28. background: url("../images/video_slider_arrow.png") no-repeat;
  29. position: absolute;
  30. left: 0;
  31. top: 50%;
  32. display: block;
  33. margin: -40px 0 0 -50px;
  34. width: 35px;
  35. height: 50px;
  36. text-indent: -9999px;
  37. }
  38. .read-ppt span:hover { cursor: pointer; }
  39. .read-ppt .next {
  40. left: 100%;
  41. margin-left: 15px;
  42. background-position: -37px;
  43. }
  44. .ppt-pager {
  45. display: none;
  46. text-align: center;
  47. margin-bottom: 35px;
  48. font-family: "Malgun Gothic";
  49. font-size: 20px;
  50. }
  51. .ppt-pager .current-page {
  52. font-size: 24px;
  53. color: #0096d5;
  54. }
  55. .ppt-pager .total-page { color: #555555; }

readPPT.js

  1. /** */
  2. (function($) {
  3. $(function() {
  4. var url = "resources/1.pdf";
  5. var pdfDoc = null,
  6. pageNum = 1,
  7. pageRendering = false,
  8. pageNumPending = null,
  9. scale = 1,
  10. canvas = document.getElementById("canvas"),
  11. ctx,
  12. $currentPageEle = $(".ppt-pager .current-page"),
  13. $totalPageEle = $(".ppt-pager .total-page"),
  14. $readPPT = $(".read-ppt"),
  15. resizeTimeout,
  16. isFirstRender = true;
  17. var $loadingEle = $(".loading");
  18. if (canvas) {
  19. ctx = canvas.getContext('2d');
  20. }
  21. function renderPage(num) {
  22. if (!isFirstRender) {
  23. $loadingEle.show();
  24. }
  25. pageRendering = true;
  26. pdfDoc.getPage(num).then(function(page) {
  27. var desireWidth = $readPPT.width() - 5,
  28. viewport = page.getViewport(scale),
  29. desireScale = desireWidth / viewport.width,
  30. scaleViewPort = page.getViewport(desireScale);
  31. canvas.height = scaleViewPort.height;
  32. canvas.width = scaleViewPort.width;
  33. $readPPT.css("padding-bottom", canvas.height / canvas.width * $readPPT.width());
  34. var renderContext = {
  35. canvasContext: ctx,
  36. viewport: scaleViewPort
  37. };
  38. var renderTask = page.render(renderContext);
  39. renderTask.promise.then(function() {
  40. pageRendering = false;
  41. $(".ppt-pager").show();
  42. $loadingEle.hide();
  43. if (pageNumPending !== null) {
  44. renderPage(pageNumPending);
  45. pageNumPending = null;
  46. }
  47. });
  48. });
  49. $currentPageEle.text(pageNum);
  50. }
  51. function queueRenderPage(num) {
  52. if (pageRendering) {
  53. pageNumPending = num;
  54. } else {
  55. renderPage(num);
  56. }
  57. }
  58. function onPrevPage() {
  59. if (pageNum <= 1) {
  60. return;
  61. }
  62. pageNum--;
  63. queueRenderPage(pageNum);
  64. }
  65. function onNextPage() {
  66. if (pageNum >= pdfDoc.numPages) {
  67. return;
  68. }
  69. pageNum++;
  70. queueRenderPage(pageNum);
  71. }
  72. if ($(".read-ppt canvas").length > 0) {
  73. $loadingEle.show();
  74. PDFJS.getDocument(url).then(function(pdfDoc_) {
  75. pdfDoc = pdfDoc_;
  76. $totalPageEle.text(pdfDoc.numPages);
  77. renderPage(pageNum);
  78. $('.read-ppt .prev').on('click', onPrevPage);
  79. $('.read-ppt .next').on('click', onNextPage);
  80. isFirstRender = false;
  81. },
  82. function error(e) {
  83. alert(e.message);
  84. $loadingEle.hide();
  85. });
  86. window.onresize = function() {
  87. if (pdfDoc) {
  88. clearTimeout(resizeTimeout);
  89. resizeTimeout = setTimeout(function() {
  90. renderPage(pageNum);
  91. },
  92. 200);
  93. }
  94. }
  95. }
  96. });
  97. })(jQuery);

如图:

在这里插入图片描述

在这里插入图片描述

下载示例

发表评论

表情:
评论列表 (有 0 条评论,527人围观)

还没有评论,来说两句吧...

相关阅读

    相关 pdf

    > 首先下载pdf.js插件,放到项目里面 > > 官网下载地址:[http://mozilla.github.io/pdf.js/getting\_started/\dow