標籤: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文檔