viewer2.html 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>PDF查看器</title>
  7. <style>
  8. body, html {
  9. margin: 0;
  10. padding: 0;
  11. height: 100%;
  12. display: flex;
  13. flex-direction: column;
  14. font-family: Arial, sans-serif;
  15. }
  16. #toolbar {
  17. background-color: #333;
  18. color: #fff;
  19. padding: 10px;
  20. display: flex;
  21. justify-content: space-between;
  22. align-items: center;
  23. border-bottom: 1px solid #555;
  24. }
  25. #toolbar button, #toolbar select {
  26. background-color: #444;
  27. color: #fff;
  28. border: none;
  29. padding: 5px 10px;
  30. margin: 0 5px;
  31. cursor: pointer;
  32. }
  33. #toolbar button:hover, #toolbar select:hover {
  34. background-color: #555;
  35. }
  36. #pdf-viewer-container {
  37. flex: 1;
  38. overflow-y: auto;
  39. padding: 10px;
  40. }
  41. #pdf-viewer {
  42. border: 1px solid #ccc;
  43. display: block;
  44. margin: 0 auto;
  45. }
  46. </style>
  47. <script src="pdf.min.js"></script>
  48. </head>
  49. <body>
  50. <div id="toolbar">
  51. <div>
  52. <select id="scale-select">
  53. <option value="0.5">50%</option>
  54. <option value="1">100%</option>
  55. <option value="1.5">150%</option>
  56. <option value="2">200%</option>
  57. </select>
  58. <button id="rotate-left">左旋</button>
  59. <button id="rotate-right">右旋</button>
  60. </div>
  61. </div>
  62. <div id="pdf-viewer-container">
  63. <canvas id="pdf-viewer"></canvas>
  64. </div>
  65. <script>
  66. // 解析URL参数
  67. function getQueryParam(param) {
  68. const urlParams = new URLSearchParams(window.location.search);
  69. return urlParams.get(param);
  70. }
  71. // 获取PDF URL参数,如果没有则使用默认URL
  72. const pdfurl = getQueryParam('file') || '/compressed.tracemonkey-pldi-09.pdf';
  73. const isShowTools = getQueryParam('isShowTools') || 'true';
  74. let pdfDoc = null;
  75. let scale = 1.5;
  76. let rotation = 0;
  77. async function loadPDF() {
  78. if(!isShowTools||isShowTools=="false")
  79. {
  80. document.getElementById('toolbar').style.display = 'none';
  81. }
  82. const loadingTask = pdfjsLib.getDocument(pdfurl);
  83. pdfDoc = await loadingTask.promise;
  84. renderAllPages();
  85. }
  86. async function renderAllPages() {
  87. const numPages = pdfDoc.numPages;
  88. const canvas = document.getElementById('pdf-viewer');
  89. const context = canvas.getContext('2d');
  90. let totalHeight = 0;
  91. let totalWidth = 0;
  92. for (let pageNumber = 1; pageNumber <= numPages; pageNumber++) {
  93. const page = await pdfDoc.getPage(pageNumber);
  94. const viewport = page.getViewport({ scale, rotation });
  95. totalHeight += viewport.height;
  96. totalWidth = Math.max(totalWidth, viewport.width);
  97. }
  98. canvas.height = totalHeight;
  99. canvas.width = totalWidth;
  100. let currentHeight = 0;
  101. for (let pageNumber = 1; pageNumber <= numPages; pageNumber++) {
  102. const page = await pdfDoc.getPage(pageNumber);
  103. const viewport = page.getViewport({ scale, rotation });
  104. const renderContext = {
  105. canvasContext: context,
  106. viewport: viewport
  107. };
  108. context.save();
  109. context.translate(0, currentHeight);
  110. await page.render(renderContext).promise;
  111. context.restore();
  112. currentHeight += viewport.height;
  113. }
  114. }
  115. document.getElementById('scale-select').addEventListener('change', (event) => {
  116. scale = parseFloat(event.target.value);
  117. renderAllPages();
  118. });
  119. document.getElementById('rotate-left').addEventListener('click', () => {
  120. rotation = (rotation - 90 + 360) % 360; // 确保旋转角度在0-359之间
  121. renderAllPages();
  122. });
  123. document.getElementById('rotate-right').addEventListener('click', () => {
  124. rotation = (rotation + 90) % 360; // 确保旋转角度在0-359之间
  125. renderAllPages();
  126. });
  127. document.addEventListener('DOMContentLoaded', function () {
  128. loadPDF();
  129. });
  130. </script>
  131. </body>
  132. </html>