| |
| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8" /> |
| <title>PDF文件转图片</title> |
| <script type="text/javascript" src="js/jquery-3.6.4.min.js"></script> |
| |
| <script type="text/javascript" src="js/2.2.228pdf.min.js"></script> |
| <script type="text/javascript" src="js/2.2.228.pdf.worker.min.js"></script> |
| |
| |
| |
| |
| |
| |
| |
| <script type="text/javascript" src="js/jszip.js"></script> |
| <script type="text/javascript" src="js/FileSaver.js"></script> |
| <style type="text/css"> |
| button { |
| width: 120px; |
| height: 30px; |
| background: none; |
| border: 1px solid #b1afaf; |
| border-radius: 5px; |
| font-size: 12px; |
| font-weight: 1000; |
| color: #384240; |
| cursor: pointer; |
| outline: none; |
| margin: 0 0.5% |
| } |
| |
| button:hover { |
| background: #ccc; |
| } |
| |
| #container { |
| width: 65%; |
| height: 75%; |
| margin-top: 1%; |
| border-radius: 2px; |
| |
| } |
| |
| .pdfInfos { |
| margin: 0 2%; |
| } |
| </style> |
| </head> |
| <body> |
| |
| <div class="showdata" style="margin-top:1%"> |
| <button id="pdf_tourl">合并多个pdf为一个</button> |
| <button id="prevpage">上一页</button> |
| <button id="nextpage">下一页</button> |
| <button id="exportImg">导出每一张图片</button> |
| <button onclick="wind_print()">打印</button> |
| <button onclick="choosePdf()">选择多个pdf文件</button> |
| <input style="display:none" id='chooseFile' type='file' accept="application/pdf" multiple="multiple"> |
| </div> |
| <div class="showdata" style="margin-top:1%"> |
| <span class="pdfInfos">页码:<span id="currentPages"></span><span id="totalPages"></span></span> |
| <span class="pdfInfos">文件名:<span id="fileName"></span></span> |
| <span class="pdfInfos">文件大小:<span id="fileSize"></span></span> |
| </div> |
| <div style="position: relative;"> |
| <div id="container"></div> |
| <img id="imgloading" style="position: absolute;top: 20%;left: 2%;display:none" src="loading.gif"> |
| </div> |
| </body> |
| <script> |
| $("#pdf_tourl").click(function(){ |
| alert("可以使用PDF Arranger软件"); |
| }); |
| function wind_print(){ |
| $(".showdata").hide(); |
| $("#container").css("width","100%"); |
| $("#container").css("height","100%"); |
| window.print(); |
| $(".showdata").show(); |
| $("#container").css("width","65%"); |
| $("#container").css("height","75%"); |
| } |
| |
| var currentPages, totalPages |
| var scale = 2; |
| $('#chooseFile').change(function() { |
| var pdfFilePath = $('#chooseFile').val(); |
| if (pdfFilePath) { |
| |
| $("#container").empty(); |
| currentPages = 1; |
| totalPages = 0; |
| debugger |
| var filesdata = $('#chooseFile')[0].files; |
| |
| var fileSize=0; |
| for (let i = 0; i < filesdata.length; i++) { |
| fileSize += filesdata[i].size; |
| } |
| |
| |
| var mb; |
| if (fileSize) { |
| mb = fileSize / 1048576; |
| if (mb > 10) { |
| alert("文件大小不能>10M"); |
| return; |
| } |
| } |
| |
| if (filesdata.length === 1) { |
| $("#fileName").text(filesdata[0].name); |
| } else { |
| $("#fileName").text(filesdata[0].name + "等 " + filesdata.length + " 个文件"); |
| |
| } |
| $("#fileSize").text(mb.toFixed(2) + "Mb"); |
| |
| |
| |
| |
| for (let j = 0; j < filesdata.length; j++) { |
| var reader = new FileReader(); |
| reader.readAsDataURL(filesdata[j]); |
| |
| |
| reader.onload = function(e) { |
| pdfjsLib.getDocument(this.result).then(function(pdf) { |
| if (pdf) { |
| totalPages = pdf.numPages; |
| $("#currentPages").text("1/"); |
| $("#totalPages").text(totalPages); |
| |
| for (var i = 1; i <= totalPages; i++) { |
| var canvas = document.createElement('canvas'); |
| var cid=j+i; |
| canvas.id = "pageNum" + cid; |
| $("#container").append(canvas); |
| var context = canvas.getContext('2d'); |
| renderImg(pdf, i, context); |
| } |
| } |
| }); |
| }; |
| |
| } |
| } |
| }); |
| |
| |
| |
| function renderImg(pdfFile, pageNumber, canvasContext) { |
| pdfFile.getPage(pageNumber).then(function(page) { |
| var viewport = page.getViewport(scale); |
| var newcanvas = canvasContext.canvas; |
| |
| newcanvas.width = viewport.width; |
| newcanvas.height = viewport.height; |
| |
| newcanvas.style.width = "100%"; |
| newcanvas.style.height = "100%"; |
| |
| if (pageNumber != 1) { |
| newcanvas.style.display = "none"; |
| } |
| var renderContext = { |
| canvasContext: canvasContext, |
| viewport: viewport |
| }; |
| page.render(renderContext); |
| }); |
| |
| return; |
| }; |
| |
| $("#prevpage").click(function() { |
| if (!currentPages || currentPages <= 1) { |
| return; |
| } |
| nowpage = currentPages; |
| currentPages--; |
| $("#currentPages").text(currentPages + "/"); |
| var prevcanvas = document.getElementById("pageNum" + currentPages); |
| var currentcanvas = document.getElementById("pageNum" + nowpage); |
| currentcanvas.style.display = "none"; |
| prevcanvas.style.display = "block"; |
| }) |
| |
| $("#nextpage").click(function() { |
| if (!currentPages || currentPages >= totalPages) { |
| return; |
| } |
| nowpage = currentPages; |
| currentPages++; |
| $("#currentPages").text(currentPages + "/"); |
| var nextcanvas = document.getElementById("pageNum" + currentPages); |
| var currentcanvas = document.getElementById("pageNum" + nowpage); |
| currentcanvas.style.display = "none"; |
| nextcanvas.style.display = "block"; |
| }) |
| |
| $("#exportImg").click(function() { |
| if (!$('#chooseFile').val()) { |
| alert('请先上传pdf文件') |
| return false; |
| } |
| |
| var zip = new JSZip(); |
| var images = zip.folder("images"); |
| |
| $("canvas").each(function(index, ele) { |
| var canvas = document.getElementById("pageNum" + (index + 1)); |
| |
| |
| |
| images.file("photo-" + (index + 1) + ".png", splitBase64(canvas.toDataURL("image/png", 1.0)), { |
| base64: true |
| }); |
| }) |
| |
| zip.generateAsync({ |
| type: "blob" |
| }).then(function(content) { |
| |
| saveAs(content, "imgFiles.zip"); |
| |
| }); |
| }); |
| |
| function splitBase64(dataurl) { |
| var arr = dataurl.split(',') |
| return arr[1] |
| } |
| |
| function choosePdf() { |
| $("#chooseFile").click() |
| } |
| </script> |
| </html> |
| |