在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。