javascript+java實現html轉化為PDF文檔

來源:互聯網
上載者:User

標籤:idt      需要   awt   fas   result   結果   大於   parameter   

  1. 項目中引入相關的jar包

    itextasian-1.5.2.jar

    itext-4.2.1.jar

    itextpdf-5.1.2.jar

    itextpdf-5.1.2-sources.jar

  2. 在需要將頁面轉化為pdf文檔的頁面中添加按鈕

     <span id="download" onclick="exportpdf();">轉化為PDF</span>

     <a id="pdfdown" style="display: none"><span id="spanid">匯出PDF</span></a>  

  3. 然後引入相關的js以及jar包

    html2canvas.js

  4.編寫產生pdf文檔的js代碼

   

   /*    * 匯出pdf文檔    */    function exportpdf(){      var title = "";      layer.prompt({title: "請輸入pdf檔案名稱", formType: 0,end:function(){      if(title != "" && title != null){        shot(title);      }    }}, function(pass, index){      title = pass;      layer.close(index);    });  };  //將頁面轉化為圖片  function shot(title){        $("#download").remove();    //隱藏按鈕    html2canvas(document.body, { //對象    //此處可配置詳細參數      onrendered: function(canvas) { //渲染完成回調canvas      canvas.id = "mycanvas";       // 產生base64圖片資料      var dataUrl = canvas.toDataURL("image/png"); //指定格式,也可不帶參數      var formData = new FormData(); //類比表單對象      formData.append("imgData",convertBase64UrlToBlob(dataUrl)); //寫入資料      var xhr = new XMLHttpRequest(); //資料轉送方法      xhr.open("POST", "../pdftools/exportPdf?filename="+title); //配置傳輸方式及地址      xhr.send(formData);      xhr.onreadystatechange = function(){ //回呼函數      if(xhr.readyState == 4){        if (xhr.status == 200) {          var back = JSON.parse(xhr.responseText);          if(back["mesg"] == "success"){            $("#pdfdown").attr("href","../file/downloadFile?fileName="+back[‘fileName‘]);            $("#spanid").click();            $("#bodyId").prepend("<span onclick=\"exportpdf();\" id=\"download\">轉化為PDF</span>");            layer.msg("Pdf匯出成功",{icon:1,time:2000});          }else{            layer.msg("Pdf匯出失敗",{icon:2,time:2000});          }        }       }      };    }  }); }//將以base64的圖片url資料轉換為Blobfunction convertBase64UrlToBlob(urlData){  //去掉url的頭,並轉換為byte  var bytes=window.atob(urlData.split(‘,‘)[1]);   //處理異常,將ascii碼小於0的轉換為大於0  var ab = new ArrayBuffer(bytes.length);  var ia = new Uint8Array(ab);  for (var i = 0; i < bytes.length; i++) {    ia[i] = bytes.charCodeAt(i);  }  return new Blob( [ab] , {type : "image/png"});}
View Code

 

 

  5. 編寫後台方法

 

package com.sd.ddo.controller.pdf;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.URLDecoder;import java.util.Iterator;import java.util.Map;import javax.imageio.stream.FileImageOutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServletResponse;import javax.swing.filechooser.FileSystemView;import org.springframework.stereotype.Controller;import org.springframework.util.FileCopyUtils;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.servlet.ModelAndView;import com.alibaba.fastjson.JSONObject;import com.lowagie.text.Document;import com.lowagie.text.DocumentException;import com.lowagie.text.Image;import com.lowagie.text.pdf.PdfWriter;import com.sd.cloud.util.alipay.HttpRequest;import com.sd.cloud.util.alipay.HttpResponse;import com.sd.cloud.util.common.CommonUtil;import com.sd.cloud.util.common.SDConstants;/** * 匯出pdf文檔 * @author yugb * 將html,jsp頁面轉化為pdf文檔 */@Controller@RequestMapping("/pdftools")public class PDFExportController {    /**     * 匯出pdf文檔     * @param request     * @param response      * @throws ServletException     * @throws IOException     * @throws DocumentException     */    @SuppressWarnings("rawtypes")    @RequestMapping("/exportPdf")    public @ResponseBody Object exportPdf(MultipartHttpServletRequest request,HttpServletResponse response)throws ServletException, IOException, DocumentException {        JSONObject result = new JSONObject(); //自訂結果格式        try{             String filename = URLDecoder.decode(request.getParameter("filename"),"utf-8");             String filePath =SDConstants.fileDir+filename+".pdf";             String imagePath = SDConstants.fileDir +filename+".bmp";             Document document = new Document();              Map getMap = request.getFileMap();             MultipartFile mfile = (MultipartFile) getMap.get("imgData"); //擷取資料             InputStream file = mfile.getInputStream();             byte[] fileByte = FileCopyUtils.copyToByteArray(file);             FileImageOutputStream imageOutput = new FileImageOutputStream(new File(imagePath));             imageOutput.write(fileByte, 0, fileByte.length);//產生本地圖片檔案             imageOutput.close();                         PdfWriter.getInstance(document, new FileOutputStream(filePath)); //itextpdf檔案             document.open();             Image image = Image.getInstance(imagePath); // itext-pdf-image             float heigth = image.getHeight();              float width = image.getWidth();              int percent = getPercent(heigth, width);  //按比例縮小圖片             image.setAlignment(Image.MIDDLE);              image.scalePercent(percent+3);             document.add(image);             document.close();             result.put("fileName", filename+".pdf");             result.put("imageName", filename+".bmp");             result.put("mesg", "success");        }catch (DocumentException de) {             System.err.println(de.getMessage());        }catch (Exception e) {            e.printStackTrace();            result.put("mesg", "error");        }        return result;    }    /**     * 獲得百分比     * @param h     * @param w     * @return     */    private static int getPercent(float h, float w) {       int p = 0;       float p2 = 0.0f;       p2 = 560 / w * 100;       p = Math.round(p2);       return p;    }}

 

javascript+java實現html轉化為PDF文檔

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.