1.maven项目进入依赖
<dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>core-renderer</artifactId> <version>R8pre2</version> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.0.8</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.4.4</version> </dependency>
2.将html页面进行封装
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ include file="../../../common.jsp" %> <link rel="stylesheet" type="text/css" href="${basePath}css/bootstrap-table.css"/> <link rel="stylesheet" type="text/css" href="${basePath}css/bootstrap.min.css"/> <script type="text/javascript" src="${basePath}js/jquery-1.9.1.min.js"></script> <script type="text/javascript" src="${basePath}js/jquery-ui-1.10.4.custom.min.js"></script> <script type="text/javascript" src="<%=basePath %>js/jquery.PrintArea.js"></script> <script src="${basePath}js/html2canvas/html2canvas.js"></script> <script src="${basePath}js/html2canvas/jspdf.debug.js"></script> <!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script> --> <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <style> .table{ border:1px solid #cad9ea; color:#666; margin-bottom: 10px; margin-top: 10px; } .table th { background-repeat:repeat-x; height:30px; } .table td,.table th{ border:1px solid #cad9ea; padding:0 0.5em 0; } .table tr.alter{ background-color:#f5fafe; } .imgStyle{ margin-bottom:0.5em; width: 220px; height: 150px; } textarea{ margin-bottom: 4px; } #stamp{ background-color: #008CBA; /* Green */ border: none; color: white; padding: 4px 25px; text-align: center; text-decoration: none; display: inline-block; font-size: 13px; margin: 4px 2px; cursor: pointer; } #picture{ position: absolute; right: 200px; top: 650px; } html{ height:60% } </style> <style type="text/css" media="print"> .noprint { display:none;} </style> <script type="text/javascript"> $(document).ready(function(){ //通过AJAX后台取数据 //获取当前的时间 var day = new Date(); Year= day.getFullYear();//支持IE和火狐浏览器. Month= day.getMonth()+1; Day = day.getDate(); // $(‘#year‘).text(Year); // $(‘#month‘).text(Month); // $(‘#day‘).text(Day); // $(‘#year2‘).text(Year); // $(‘#month2‘).text(Month); // $(‘#day2‘).text(Day); // var a=new Date(new Date()); // var year1=a.getFullYear();//年 // var month1=a.getMonth()+1;//月份(月份是从0~11,所以显示时要加1) // // month1=month1<10?‘0‘+month1:month1; // var day1=a.getDate();//日期 // // day1=day1<10?"0"+day1:day1; // var str1=year1+‘年‘+month1+‘月‘+day1+‘日‘; // $(‘#year2‘).text(str1); // $(‘#year‘).text(str1); //var driver_bespeak_id = ${requestScope.driver_bespeak_id}; //获取驾驶员预约号 // $.post( // "getYuyueDataByAjax.action" // ,{ // driver_bespeak_id : ${requestScope.driver_bespeak_id}, // } // ,function(data){ // $("#username").text(data.username); // }); }); </script> <script type="text/javascript"> //页面格式改成页签的格式 var hkey_root,hkey_path,hkey_key; hkey_root="HKEY_CURRENT_USER"; hkey_path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"; $(document).ready(function(){ //后续操作 $("#stamp").click(function(){ debugger; var printHtml = "<?xml version=‘1.0‘ encoding=‘UTF-8‘?>"; printHtml += "<html xmlns=‘http://www.w3.org/1999/xhtml‘>"; printHtml +="<head>"; printHtml +="<title>页面打印</title>"; printHtml +="<style media= ‘print‘ >"; printHtml +=" @page{size: A4 portrait;};";/* 可以控制打印方向,portrait: 纵向打印, landscape: 横向。 */ printHtml +=" .page { page-break-after: always; } </style> "; printHtml +=" </head> "; printHtml +=" <body bgcolor=‘white‘ style=‘font-family:SimSun; height:100%;‘ screen_capture_injected=‘true‘ ryt11773=‘1‘> "; printHtml +=" <h4 style=‘font-size:30px;font-family:SimSun;text-align: center;‘><b>3333333</b></h4>"; printHtml +=" <div style=‘padding-left:430px;‘><img style=‘position:relative;width:200px;height:60px;‘ alt=‘‘ src=‘${basePath}/face/QRCode/${CarInfo.carId}.png‘/></div>"; printHtml +=" <h4 style=‘font-size:22px;font-family:SimSun;padding-left: 45px;‘>车辆管理所:</h4> "; printHtml +=" <h4 style=‘font-size:22px;font-family:SimSun;padding-left: 130px;‘><span style=‘float:left;‘>兹有津</span><span style=‘padding-bottom: 5px; border-bottom: 1px solid #000;float:left;display:block;width:120px;‘> ${CarInfo.carNum} </span><span style=‘float:left;‘>车辆所有人</span><span style=‘padding-bottom: 5px; border-bottom: 1px solid #000;float:left;display:block;width:200px;‘><c:if test=‘${CarInfo.belongs==1}‘> ${CarInfo.manCompany}</c:if><c:if test=‘${CarInfo.belongs==2}‘> ${CarInfo.terrace}</c:if> <c:if test=‘${CarInfo.belongs==3}‘> ${CarInfo.manCompany}</c:if></span></h4><br/>"; printHtml +=" <h4 style=‘font-size:22px;font-family:SimSun;padding-left: 60px;margin-top:20px;‘><span style=‘float:left;‘>333</span><span style=‘padding-bottom: 5px; border-bottom: 1px solid #000;float:left;display:block;width:170px;‘> ${CarInfo.labels}</span><span style=‘float:left;‘> 33</span> <span style=‘padding-bottom: 5px; border-bottom: 1px solid #000;float:left;display:block;width:207px;‘> ${CarInfo.engineNum}</span></h4><br/>"; printHtml +=" <h4 style=‘font-size:22px;font-family:SimSun;padding-left: 60px;margin-top:20px;‘>33,33性质变更为“33”。</h4>"; printHtml +=" <h4 style=‘font-size:22px;font-family:SimSun;padding-left: 60px;‘><span style=‘float:left;‘>333:</span><span style=‘padding-bottom: 5px; border-bottom: 1px solid #000;float:left;display:block;width:270px;‘> 33。</span></h4>"; printHtml +=" <h4 style=‘font-size:20px;font-family:SimSun;padding-right:80px;‘><span style=‘padding-left: 460px;‘><span>(33)</span></span></h4>"; printHtml +=" <div style=‘padding-left:460px;margin-top:-70px;‘><img style=‘position:relative;margin-top:-100px;‘ width=‘140px;‘ height=‘140px;‘ src=‘${basePath}images/stamp.png‘/></div>"; printHtml +=" <h4 style=‘font-size:20px;font-family:SimSun;padding-right:80px;margin-top:-10px;‘><span style=‘padding-left: 70px;‘><span id=‘year‘>${time }</span></span></h4>"; printHtml +=" <hr style=‘height:1px;border:none;border-top:1px dashed black;‘ /><br/>"; printHtml +=" <h4 style=‘font-size:30px;font-family:SimSun;text-align: center;‘><b>33</b></h4>"; printHtml +=" <div style=‘padding-left:430px;‘><img style=‘position:relative;width:200px;height:60px;‘ alt=‘‘ src=‘${basePath}/face/QRCode/${CarInfo.carId}.png‘/></div>"; printHtml +=" <h4 style=‘font-size:22px;font-family:SimSun;padding-left: 45px;‘>33:</h4> "; printHtml +=" <h4 style=‘font-size:22px;font-family:SimSun;padding-left: 130px;‘><span style=‘float:left;‘>33</span><span style=‘padding-bottom: 5px; border-bottom: 1px solid #000;float:left;display:block;width:120px;‘> ${CarInfo.carNum} </span><span style=‘float:left;‘>33</span><span style=‘padding-bottom: 5px; border-bottom: 1px solid #000;float:left;display:block;width:200px;‘><c:if test=‘${CarInfo.belongs==1}‘> ${CarInfo.manCompany}</c:if><c:if test=‘${CarInfo.belongs==2}‘> ${CarInfo.terrace}</c:if> <c:if test=‘${CarInfo.belongs==3}‘> ${CarInfo.manCompany}</c:if></span></h4><br/>"; printHtml +=" <h4 style=‘font-size:22px;font-family:SimSun;padding-left: 60px;margin-top:20px;‘><span style=‘float:left;‘>33</span><span style=‘padding-bottom: 5px; border-bottom: 1px solid #000;float:left;display:block;width:170px;‘> ${CarInfo.labels}</span><span style=‘float:left;‘> 发动机号 </span> <span style=‘padding-bottom: 5px; border-bottom: 1px solid #000;float:left;display:block;width:207px;‘> ${CarInfo.engineNum}</span></h4><br/>"; printHtml +=" <h4 style=‘font-size:22px;font-family:SimSun;padding-left: 60px;margin-top:20px;‘>33,33性质变更为“33”。</h4>"; printHtml +=" <h4 style=‘font-size:22px;font-family:SimSun;padding-left: 60px;‘><span style=‘float:left;‘>备注:</span><span style=‘padding-bottom: 5px; border-bottom: 1px solid #000;float:left;display:block;width:270px;‘> 3333。</span></h4>"; printHtml +=" <h4 style=‘font-size:20px;font-family:SimSun;padding-right:80px;‘><span style=‘padding-left: 460px;‘><span>(333)</span></span></h4>"; printHtml +=" <div style=‘padding-left:460px;margin-top:-70px;‘><img style=‘position:relative;margin-top:-100px;‘ width=‘140px;‘ height=‘140px;‘ src=‘${basePath}images/stamp.png‘/></div>"; printHtml +=" <h4 style=‘font-size:20px;font-family:SimSun;padding-right:80px;margin-top:-10px;‘><span style=‘padding-left: 70px;‘><span id=‘year‘>${time }</span></span></h4>"; printHtml +=" </body>"; printHtml +="</html>"; var path = $("#path").val(); $.ajax({ type:"POST", url:"downPdf.action", data:{"printHtml":printHtml,"path":path}, success:function(data){ if(data == 1){ alert("下载成功"); } } }); }); }); function browseFolder(path) { try { var Message = "我的电脑"; //选择框提示信息 var Shell = new ActiveXObject("Shell.Application"); var Folder = Shell.BrowseForFolder(0, Message, 64, 17); //起始目录为:我的电脑 //var Folder = Shell.BrowseForFolder(0, Message, 0); //起始目录为:桌面 if (Folder != null) { Folder = Folder.items(); // 返回 FolderItems 对象 Folder = Folder.item(); // 返回 Folderitem 对象 Folder = Folder.Path; // 返回路径 if (Folder.charAt(Folder.length - 1) != "\\") { Folder = Folder + "\\"; } document.getElementById(path).value = Folder; return Folder; } } catch (e) { alert(e.message); } } function PageSetup_Null(){ try{ var RegWsh = new ActiveXObject("WScript.Shell") ; hkey_key="header" ; RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"") ; hkey_key="footer" ; RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"") ; } catch(e){} } </script> </head> <body> <div class="container" style="height:60%"> <div id="zhongxin" style="margin-left:10%"> <div style="padding-top:30px;"></div> <div class="panel panel-default" id="part1" style="border:none;"> <!-- 第一部分 --> <br> <div id="prin" class="noprint" style="margin-left:-400px"> <input id="path" type="text" name="path" size="30" style="float:right;" disabled="disabled"> <input type=button value="选择" onclick="browseFolder(‘path‘)" style="float:right;margin-right:-270px;"> <center><button id="stamp" class="noprint" style="float:right;margin-right:-370px;margin-top:-1px;" ><center>下载pdf</center></button></center> </div> </body> </html>
3.action
/** * html下载pdf * @param request * @return */ @RequestMapping("/downPdf") @ResponseBody public int downPdf(HttpServletRequest request) { try{ String printHtml = request.getParameter("printHtml"); String path = request.getParameter("path"); System.out.println("开始转换pdf"); PdfUtil.htmlToPdf(path+"content.pdf",printHtml); return 1; }catch (Exception e) { System.out.println(e.getMessage()); return 2; } }
4.工具类
//导入的包 import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.xhtmlrenderer.pdf.ITextFontResolver; import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagie.text.pdf.BaseFont; public class PdfUtil { /** * 把URL转换为PDF * * @param outputFile * , 示例:/data/fs/inspector/BJ20150522001.pdf * @param url * ,示例:http :xxxx * @return * @throws Exception */ public static boolean htmlToPdf(String outputFile, String url)throws Exception { File outFile = new File(outputFile); if (!outFile.exists()) { outFile.getParentFile().mkdirs(); } OutputStream os = new FileOutputStream(outputFile); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(new ByteArrayInputStream(url.getBytes("UTF-8"))); //Document document = new Document(PageSize.A4, 50, 50, 50, 50); ITextRenderer renderer = new ITextRenderer(); renderer.setDocument(doc, null); //renderer.setDocument(url); String fontPath = PdfUtil.class.getClassLoader().getResource("").toString().replaceAll("file:/", "")+ "simsun.ttc"; System.out.println(fontPath); // 解决中文支持问题 ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont(fontPath, BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); renderer.layout(); renderer.createPDF(os); os.flush(); os.close(); System.out.println("文件转换成功"); return true; } }
原文地址:https://www.cnblogs.com/itcx1213/p/9299367.html
时间: 2024-12-14 16:01:44