freemarker+itext生成PDF

<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();
	}
}

猜你喜欢

转载自yizhaorong.iteye.com/blog/2157848