You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

175 lines
5.7 KiB

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PDFView.aspx.cs" Inherits="Swift.web.Remit.PDFView" %>
  2. <!DOCTYPE html>
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <title></title>
  6. <script src="../js/pdf/pdf.js"></script>
  7. <script src="../js/pdf/pdf.worker.js"></script>
  8. <style type="text/css">
  9. #the-canvas {
  10. border: 1px solid black;
  11. direction: ltr;
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <form id="form1" runat="server">
  17. <div>
  18. <input type="button" id="prev" value="Previous" />
  19. <input type="button" id="next" value="Next" />
  20. &nbsp; &nbsp;
  21. <span>Page: <span id="page_num"></span>/ <span id="page_count"></span></span>
  22. </div>
  23. <canvas id="the-canvas"></canvas>
  24. </form>
  25. <script language="JavaScript">
  26. /**
  27. * Disable right-click of mouse, F12 key, and save key combinations on page
  28. * By Arthur Gareginyan (https://www.arthurgareginyan.com)
  29. * For full source code, visit https://mycyberuniverse.com
  30. */
  31. window.onload = function () {
  32. document.addEventListener("contextmenu", function (e) {
  33. e.preventDefault();
  34. }, false);
  35. document.addEventListener("keydown", function (e) {
  36. //document.onkeydown = function(e) {
  37. // "I" key
  38. if (e.ctrlKey && e.shiftKey && e.keyCode == 73) {
  39. disabledEvent(e);
  40. }
  41. // "J" key
  42. if (e.ctrlKey && e.shiftKey && e.keyCode == 74) {
  43. disabledEvent(e);
  44. }
  45. // "S" key + macOS
  46. if (e.keyCode == 83 && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
  47. disabledEvent(e);
  48. }
  49. // "U" key
  50. if (e.ctrlKey && e.keyCode == 85) {
  51. disabledEvent(e);
  52. }
  53. // "F12" key
  54. if (event.keyCode == 123) {
  55. disabledEvent(e);
  56. }
  57. }, false);
  58. function disabledEvent(e) {
  59. if (e.stopPropagation) {
  60. e.stopPropagation();
  61. } else if (window.event) {
  62. window.event.cancelBubble = true;
  63. }
  64. e.preventDefault();
  65. return false;
  66. }
  67. };
  68. </script>
  69. <script type="text/javascript">
  70. // If absolute URL from the remote server is provided, configure the CORS
  71. // header on that server.
  72. var url = sessionStorage.getItem("fileLoadPath");
  73. // Loaded via <script> tag, create shortcut to access PDF.js exports.
  74. var pdfjsLib = window['pdfjs-dist/build/pdf'];
  75. // The workerSrc property shall be specified.
  76. pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';
  77. var pdfDoc = null,
  78. pageNum = 1,
  79. pageRendering = false,
  80. pageNumPending = null,
  81. scale = 1.3,
  82. canvas = document.getElementById('the-canvas'),
  83. ctx = canvas.getContext('2d');
  84. /**
  85. * Get page info from document, resize canvas accordingly, and render page.
  86. * @param num Page number.
  87. */
  88. function renderPage(num) {
  89. pageRendering = true;
  90. // Using promise to fetch the page
  91. pdfDoc.getPage(num).then(function (page) {
  92. var viewport = page.getViewport({ scale: scale });
  93. canvas.height = viewport.height;
  94. canvas.width = viewport.width;
  95. // Render PDF page into canvas context
  96. var renderContext = {
  97. canvasContext: ctx,
  98. viewport: viewport
  99. };
  100. var renderTask = page.render(renderContext);
  101. // Wait for rendering to finish
  102. renderTask.promise.then(function () {
  103. pageRendering = false;
  104. if (pageNumPending !== null) {
  105. // New page rendering is pending
  106. renderPage(pageNumPending);
  107. pageNumPending = null;
  108. }
  109. });
  110. });
  111. // Update page counters
  112. document.getElementById('page_num').textContent = num;
  113. }
  114. /**
  115. * If another page rendering in progress, waits until the rendering is
  116. * finised. Otherwise, executes rendering immediately.
  117. */
  118. function queueRenderPage(num) {
  119. if (pageRendering) {
  120. pageNumPending = num;
  121. } else {
  122. renderPage(num);
  123. }
  124. }
  125. /**
  126. * Displays previous page.
  127. */
  128. function onPrevPage() {
  129. if (pageNum <= 1) {
  130. return;
  131. }
  132. pageNum--;
  133. queueRenderPage(pageNum);
  134. }
  135. document.getElementById('prev').addEventListener('click', onPrevPage);
  136. /**
  137. * Displays next page.
  138. */
  139. function onNextPage() {
  140. if (pageNum >= pdfDoc.numPages) {
  141. return;
  142. }
  143. pageNum++;
  144. queueRenderPage(pageNum);
  145. }
  146. document.getElementById('next').addEventListener('click', onNextPage);
  147. /**
  148. * Asynchronously downloads PDF.
  149. */
  150. pdfjsLib.getDocument(url).promise.then(function (pdfDoc_) {
  151. pdfDoc = pdfDoc_;
  152. document.getElementById('page_count').textContent = pdfDoc.numPages;
  153. // Initial/first page rendering
  154. renderPage(pageNum);
  155. });
  156. </script>
  157. </body>
  158. </html>