<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.0.8</version> </dependency> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>core-renderer</artifactId> <version>R8</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.21</version> </dependency> </dependencies>
以上是依赖包
HtmlToPdf.java
package org.yzr.pdf.html2pdf; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import org.junit.Test; import org.xhtmlrenderer.pdf.ITextFontResolver; import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagie.text.Image; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfReader; import com.lowagie.text.pdf.PdfStamper; public class HtmltoPDF { private static String logopath = "car.jpg"; @Test public void htmlToPdf() throws Exception { String prefix = "temp"; String suffix = ".pdf"; File file = File.createTempFile(prefix, suffix); OutputStream os = null; os = new FileOutputStream(file); ITextRenderer renderer = new ITextRenderer(); ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont(HtmltoPDF.class.getClassLoader().getResource("SIMSUN.TTC").toString(), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); Map<String, Object> dataModel = new HashMap<String, Object>(); dataModel.put("username", "张三"); renderer.setDocumentFromString(FreeMarkerHelper.getContract("test", dataModel)); renderer.layout(); renderer.createPDF(os); os.close(); addWater(file); } /** * @param file * * addWater添加水印 * * @throws Exception * void * @exception */ public void addWater(File file) throws Exception { try { PdfReader reader = new PdfReader(file.getAbsolutePath()); PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("F:/test.pdf")); Image image = Image.getInstance(HtmltoPDF.class.getResource("/") + logopath); // 图片位置 image.setAbsolutePosition(1, 1); int total = reader.getNumberOfPages(); for (int i = 1; i <= total; i++) { PdfContentByte under = stamp.getUnderContent(i); under.addImage(image); } stamp.close();// 关闭 if (file.exists()) { file.delete(); } } catch (Exception e) { e.printStackTrace(); } } }
FreeMakerHelper.java
/* * 描述:〈描述〉 * 创建人:yizhaorong * 创建时间:2014-10-28 */ package org.yzr.pdf.html2pdf; import java.io.BufferedReader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.Version; /** * 用于生成手机端合同模板 */ public class FreeMarkerHelper { /** * 后缀为html */ private static final String HTML = ".html"; /** * * generateContract生成合同 * * @param code * @return * @throws Exception * String * @exception */ public static String getContract(String code, Map<String, Object> dataModel) throws Exception { Writer out = null; StringReader reader = null; try { out = new StringWriter(); Configuration cfg = new Configuration(new Version(2, 3, 21)); cfg.setDefaultEncoding("UTF-8"); cfg.setClassForTemplateLoading(FreeMarkerHelper.class, "/templete"); Template template = cfg.getTemplate(code + HTML); template.process(dataModel, out); reader = new StringReader(out.toString()); out.flush(); } catch (Exception e) { e.printStackTrace(); throw e; } finally { if (out != null) { out.close(); } } BufferedReader br = new BufferedReader(reader); StringBuilder content = new StringBuilder(); String str = null; while ((str = br.readLine()) != null) { content.append(str); } return content.toString(); } }