分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

利用itext将html页面转成pdf(不模糊)

发布时间:2023-09-06 02:03责任编辑:白小东关键词:pdf

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")@ResponseBodypublic 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;}}

利用itext将html页面转成pdf(不模糊)

原文地址:https://www.cnblogs.com/itcx1213/p/9299367.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved