`

freemarker+itext生成PDF

    博客分类:
  • 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();
	}
}

 

分享到:
评论

相关推荐

    freemarker+html生成pdf.zip

    `Freemarker`是一个强大的模板引擎,通常用于动态生成HTML、XML等文本格式,而将`Freemarker`与HTML模板结合生成PDF,可以充分利用HTML的易编辑性和富文本特性,为用户提供高质量的文档输出。下面我们将深入探讨如何...

    基于itext7+freemarker模板导出pdf

    在IT领域,生成PDF文档是常见的需求,尤其在报表、合同和文档自动化中。本教程将探讨如何使用iText7和FreeMarker库结合,来创建一个基于模板的PDF生成流程,确保中文支持和图片的正常显示。 首先,iText7是一款强大...

    SpringBoot集成Freemarker+FlyingSaucer实现pdf在线预览.pdf

    然后,创建一个 PdfUtils 工具类,用于生成PDF文档。 四、PDF工具类编写 PdfUtils工具类主要用于生成PDF文档。该类中包含了生成HTML模板、将HTML模板转换为PDF文档的方法。方法上有完整的注释,思路是利用模板引擎...

    java html模板 itext 生成pdf 页眉页脚 合并pdf列子

    搜索了好多篇例子,算是强拼硬凑成现在的样子,还算比较满意吧。 此包中包含可测试成功代码,关联模板、字体文件、jar等 希望能帮助到大家。 这篇文章的作者蛮厉害,有不少借鉴。 ...

    JAVA项目代码绘制PDF和通过freemarker动态生成PDF

    1. itextpdf(CreatePdf) 不太推荐需要在代码内部编写PDF格式,如果要使用,建议写个基类,将同一版本 或者同一类型的公共方法写入,差异化的抽象,一个模板一个子类,子类使用@Component命名,使用反射的方式获取...

    java根据动态模板生成pdf(包含柱状图)所需jar包

    java根据动态模板生成pdf(包含柱状图)所需jar包 iText+FreeMarker+JFreeChart生成可动态配置的PDF文档。 iText有很强大的PDF处理能力,但是样式和排版不好控制,直接写PDF文档,数据的动态渲染很麻烦。 FreeMarker...

    springboot使用itext生成pdf并保存到本地

    总结一下,要实现在Spring Boot应用中使用iText生成带有页眉、页码、水印、目录和二维码的PDF,你需要: 1. 引入iText及相关库。 2. 创建HTML页面并将其转换为PDF。 3. 定制PDF内容,包括添加页眉、页码和水印。 4. ...

    导出pdf的一种实现方式 freemark+itext

    总结起来,“freemark+itext”方案提供了一种灵活且强大的方式来生成PDF文档。FreeMarker允许我们使用模板语言来描述文档的结构,而iText则负责将这些结构转换为PDF格式。这种组合使得开发人员能够快速地根据业务...

    itext生成pdf所需的jar包

    iText支持动态生成PDF,包括添加文本、图像、表格、超链接、水印等元素。在处理复杂的PDF生成需求时,iText通常是一个可靠的选择。它不仅适用于Java环境,还有.NET平台的版本。 其次,我们要提到的是Freemarker。...

    基于iText和flying saucer结合freemark生成pdf 范例

    基于iText和flying saucer结合freemark生成pdf 范例 1. 使用maven构建,不含jar包,可以自行使用maven下载依赖包, 2. 使用前需要将C:/Windows/Fonts/ARIALUNI.TTF 复制到doc-render/src/test/resources/config/fonts...

    基于SpringBoot实现的生成工资条源代码,使用FreeMarker模板引擎, iTextPdf生成工资条PDF

    5. 使用iTextPdf生成PDF:将渲染后的HTML转换为PDF,可以利用iTextPdf提供的`Document`、`PdfWriter`、`HtmlConverter`等类完成这个过程。 6. 提供下载接口:在控制器层创建一个HTTP接口,当用户访问这个接口时,...

    Java中使用 FreeMarker 生成pdf盖章合同文件

    Java中使用FreeMarker生成PDF合同文件的过程主要包括配置FreeMarker环境、创建数据模型、解析模板、生成PDF以及添加图片盖章。通过结合FreeMarker的灵活性和Flying Saucer的转换能力,我们可以方便地将动态生成的...

    freemarker解析成pdf

    5. **生成PDF**:使用Freemarker的`process`方法将模板和数据模型结合,然后通过一个PDF库(如iText或Apache PDFBox)将结果转换为PDF。以下是一个使用iText的例子: ```java StringWriter writer = new ...

    itextpdf将html生成pdf所需要的全部jar

    它包含特定的字体和排版规则,确保在生成PDF时能正确显示这些语言的文字。 3. freemarker-2.3.23.jar:FreeMarker是一个模板引擎,常用于动态生成HTML、XML等格式的文档。在将HTML转换为PDF的场景中,FreeMarker...

    Java+电子签名,生成PDF格式的合同

    然后,将这些数据模型与模板结合,通过Freemarker的API生成PDF文档。 2. **插入电子签名**: 生成PDF后,我们需要找到合适的签名位置。这通常可以通过PDF坐标系统来实现,可以是预设的固定位置,也可以根据文档...

    html模板结合itextpdf生成pdf文档--demo

    在"html模板结合itextpdf生成pdf文档--demo"项目中,我们将HTML模板作为输入,将其内容转换为PDF格式。这个过程通常包括以下步骤: 1. 解析HTML:使用一个HTML解析器(如Jsoup)将HTML字符串转换为DOM结构。 2. ...

    iText-2.0.8.jar

    iText-2.0.8.jar,Freemarker+Flying sauser +Itext 整合生成PDF需要的JAR包,配合core-renderer.jar一起使用

    Flying-Saucer使用HTML或者FTL(Freemarker模板)生成PDF

    Flying-Saucer通过html生成pdf。。。项目中已经附带了jar包,放到项目中就可以运行了。亲测了,解决了中文不显示或者样式的问题,感觉蛮实用的。网上找了很久和下载其他资源用了好多积分,如果有需要的就下载吧!!...

    Freemarker导出 word 和 pdf 工具类

    Freemarker是一款强大的Java...总结,使用Freemarker导出Word和PDF文档是一种常见的技术手段,结合合适的库和精心设计的工具类,可以高效地实现动态文档生成。理解这些知识点对于提升开发效率和产品质量具有重要意义。

Global site tag (gtag.js) - Google Analytics