PDF.js如何添加放大缩小的功能,转换成图片应该如何实现?

举报
孙叫兽 发表于 2021/03/29 01:29:22 2021/03/29
【摘要】 把官方的安装包搞下来,自己的PDF文件及index.html添加进去,上面的目录结构是未添加的,我先把PDF文件搞成canvas然后搞成图片,然后再图片上添加按钮对图片进行放大缩小操作,方便对用户行为进行录屏。 <!DOCTYPE HTML><html data-dpr="1" style="font-size: 37.5px;"><head> <meta charse...

把官方的安装包搞下来,自己的PDF文件及index.html添加进去,上面的目录结构是未添加的,我先把PDF文件搞成canvas然后搞成图片,然后再图片上添加按钮对图片进行放大缩小操作,方便对用户行为进行录屏。


  
  1. <!DOCTYPE HTML>
  2. <html data-dpr="1" style="font-size: 37.5px;">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
  6. <meta http-equiv="Cache-Control" content="no-siteapp" />
  7. <meta name="format-detection" content="telephone=no" />
  8. <meta name="apple-mobile-web-app-capable" content="yes" />
  9. <meta name="apple-mobile-web-app-status-bar-style" content="black" />
  10. <title>首页</title>
  11. <script type='text/javascript' src='js/pdfjs-2.5.207-dist/build/pdf.js'></script>
  12. </head>
  13. <style>
  14. /*pdf部分样式*/
  15. #pactera-imgs{
  16. background-color: #fff;
  17. position: absolute;
  18. z-index: 9999;
  19. top: 50px;
  20. }
  21. /*loading的样式*/
  22. #loading {
  23. position: fixed;
  24. left: 50px;
  25. top: 50px;
  26. width: 100%;
  27. height: auto;
  28. z-index: 9999;
  29. background:rgba(255,255,255,0.3);
  30. display: none;
  31. }
  32. #loading img{
  33. width: 2rem;
  34. height: 2rem;
  35. position: fixed;
  36. top: anto;
  37. left: 50%;
  38. margin-top:-1rem;
  39. margin-left: -1rem;
  40. }
  41. /*#enlarge{
  42. float: left;
  43. }
  44. #letting{
  45. float: left;
  46. }*/
  47. </style>
  48. <body>
  49. <!--<button id="enlarge" onclick="functionA()">放大</button>
  50. <button id="letting" onclick="functionB()">缩小</button>-->
  51. </body>
  52. <script type="text/javascript">
  53. /*<!--测试按钮PDF放大缩小功能-->*/
  54. <script>
  55. //PDF测试
  56. //PDF转成图片
  57. var loading = document.getElementById("loading");
  58. var url = "js/pdfjs-2.5.207-dist/zhuxian.pdf";
  59. pdfjsLib.GlobalWorkerOptions.workerSrc = 'js/pdfjs-2.5.207-dist/build/pdf.worker.js';
  60. //创建
  61. function createPdfContainer(id, className) {
  62. var pdfContainer = document.getElementById('pactera-canvas');
  63. var canvasNew = document.createElement('canvas');
  64. // $("canvas").on("click",function() {
  65. // window.open(url);
  66. // })
  67. canvasNew.id = id;
  68. canvasNew.className = className;
  69. pdfContainer.appendChild(canvasNew);
  70. };
  71. var renderTask;
  72. //渲染pdf
  73. //建议给定pdf宽度
  74. var i = 1;
  75. var id = 'cw-pdf-' + 1;
  76. function renderPDF(pdf) {
  77. pdf.getPage(i).then(function (page) {
  78. var scale = 1.5;//修改清晰度 越高越清晰
  79. var viewport = page.getViewport({ scale: scale, });
  80. //
  81. // 准备用于渲染的 canvas 元素
  82. //
  83. var canvas = document.getElementById(id);
  84. var context = canvas.getContext('2d');
  85. canvas.height = viewport.height;
  86. canvas.width = viewport.width;
  87. //
  88. // 将 PDF 页面渲染到 canvas 上下文中
  89. //
  90. var renderContext = {
  91. canvasContext: context,
  92. viewport: viewport
  93. };
  94. renderTask = page.render(renderContext);
  95. var renderComplete = renderTask._internalRenderTask.callback;
  96. renderTask._internalRenderTask.callback = function(){
  97. renderComplete();
  98. if(i<pdf.numPages) {
  99. i++;
  100. id = 'cw-pdf-' + i;
  101. renderPDF(pdf);
  102. } else {
  103. convertCanvasToImage();
  104. }
  105. }
  106. });
  107. };
  108. //创建和pdf页数等同的canvas数
  109. function createSeriesCanvas(num, template) {
  110. var id = '';
  111. for (var j = 1; j <= num; j++) {
  112. id = template + j;
  113. createPdfContainer(id, 'pdfClass');
  114. }
  115. }
  116. //读取pdf文件,并加载到页面中
  117. function loadPDF(fileURL) {
  118. loading.style="display:block;"
  119. pdfjsLib.getDocument(fileURL).promise.then(function (pdf) {
  120. //用 promise 获取页面
  121. var idTemplate = 'cw-pdf-';
  122. var pageNum = pdf.numPages;
  123. //根据页码创建画布
  124. createSeriesCanvas(pageNum, idTemplate);
  125. //将pdf渲染到画布上去
  126. renderPDF(pdf);
  127. });
  128. }
  129. loadPDF(url)
  130. function convertCanvasToImage() {
  131. var canvas = document.getElementById("pactera-canvas");
  132. var canvasChildren = canvas.children;
  133. var pacteraImgs = document.getElementById("pactera-imgs")
  134. for(var i = 0;i<canvasChildren.length;i++){
  135. var image = new Image();
  136. image.src = canvasChildren[i].toDataURL("image/png");
  137. image.width = getWindowClient().width;
  138. pacteraImgs.appendChild(image);
  139. loading.style="display:none;"
  140. }
  141. }
  142. function getWindowClient() {
  143. if(window.innerWidth!=undefined){
  144. // IE9+ 谷歌火狐
  145. return{
  146. width:window.innerWidth,
  147. height:window.innerHeight
  148. }
  149. }else{
  150. return {
  151. width:document.documentElement.clientWidth,
  152. height:document.documentElement.clientHeight
  153. }
  154. }
  155. // functionA(){
  156. // if(window.innerWidth!=undefined){
  157. IE9+ 谷歌火狐
  158. // return{
  159. // width:window.innerWidth*2,
  160. // height:window.innerHeight*2
  161. // }
  162. // }else{
  163. // return {
  164. // width:document.documentElement.clientWidth*2,
  165. // height:document.documentElement.clientHeight*2
  166. // }
  167. //
  168. //
  169. // }
  170. // functionB(){
  171. // if(window.innerWidth!=undefined){
  172. IE9+ 谷歌火狐
  173. // return{
  174. // width:window.innerWidth/2,
  175. // height:window.innerHeight/2
  176. // }
  177. // }else{
  178. // return {
  179. // width:document.documentElement.clientWidth/2,
  180. // height:document.documentElement.clientHeight/2
  181. // }
  182. //
  183. //
  184. // }
  185. }
  186. </script>
  187. </html>

文章来源: sunmenglei.blog.csdn.net,作者:孙叫兽,版权归原作者所有,如需转载,请联系作者。

原文链接:sunmenglei.blog.csdn.net/article/details/108739528

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。