java使用freemarker模板生成html,再生成pdf
    		       		warning:
    		            这篇文章距离上次修改已过440天,其中的内容可能已经有所变动。
    		        
        		                
                在Java中,可以使用FreeMarker来生成HTML,然后使用iText或者Apache PDFBox来将HTML转换为PDF。以下是一个简单的例子:
- 添加依赖到你的pom.xml中:
<dependencies>
    <!-- FreeMarker -->
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.31</version>
    </dependency>
    <!-- iText -->
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itext7-core</artifactId>
        <version>7.1.15</version>
        <type>pom</type>
    </dependency>
</dependencies>- 使用FreeMarker生成HTML:
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.Version;
 
import java.io.*;
import java.util.HashMap;
import java.util.Map;
 
public class FreeMarkerUtil {
    public static void generateHtml(String templateName, Map<String, Object> dataModel, Writer out) throws IOException, TemplateException {
        Configuration cfg = new Configuration(new Version("2.3.31"));
        cfg.setClassLoaderForTemplateLoading(FreeMarkerUtil.class.getClassLoader(), "templates");
        Template template = cfg.getTemplate(templateName);
        template.process(dataModel, out);
    }
 
    public static void main(String[] args) throws IOException, TemplateException {
        Map<String, Object> dataModel = new HashMap<>();
        dataModel.put("title", "Hello World");
 
        Writer out = new OutputStreamWriter(new FileOutputStream("output.html"), "UTF-8");
        generateHtml("hello.ftl", dataModel, out);
        out.close();
    }
}- 使用iText将HTML转换为PDF:
import com.itextpdf.html2pdf.HtmlConverter;
 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
 
public class HtmlToPdfConverter {
    public static void convertToPdf(String htmlFilePath, String pdfFilePath) throws IOException {
        HtmlConverter.convertToPdf(new FileInputStream(htmlFilePath), new FileOutputStream(pdfFilePath));
    }
 
    public static void main(String[] args) throws IOException {
        convertToPdf("output.html", "output.pdf");
    }
}确保你有一个FreeMarker模板文件hello.ftl放在src/main/resources/templates目录下。以上代码假设你的FreeMarker模板生成了一个简单的HTML文档,然后使用HtmlConverter类将其转换为PDF。
评论已关闭