Java通过Html(ftl模板)生成PDF实战, 可支持商用
warning:
这篇文章距离上次修改已过193天,其中的内容可能已经有所变动。
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.WriterProperties;
import com.itextpdf.layout.element.IBlockElement;
import com.itextpdf.layout.property.UnitValue;
import com.itextpdf.licensing.base.LicenseKey;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class PdfGenerationUtil {
public static void main(String[] args) throws IOException, TemplateException {
// 设置FreeMarker配置
Configuration cfg = new Configuration(Configuration.VERSION_2_3_28);
cfg.setClassForTemplateLoading(PdfGenerationUtil.class, "/templates");
cfg.setDefaultEncoding("UTF-8");
// 创建数据模型
Map<String, Object> dataModel = new HashMap<>();
dataModel.put("name", "iText");
// 加载FreeMarker模板
Template template = cfg.getTemplate("example.ftl");
// 将模板与数据模型合并
Writer out = new StringWriter();
template.process(dataModel, out);
String htmlContent = out.toString();
// 初始化iText库的商业许可证
LicenseKey.loadLicenseFile("path/to/itextkey.xml");
// 将HTML转换为PDF
PdfWriter writer = new PdfWriter("output.pdf", new WriterProperties().setPdfVersion(PdfWriter.PDF_2_0));
PdfDocument pdfDoc = new PdfDocument(writer);
pdfDoc.setDefaultPageSize(new PageSize(PageSize.A4).rotate());
// 解决HTML中的图片路径问题
HtmlConverter.convertToPdf(htmlContent, pdfDoc, new ResourceProvider());
// 关闭文档
pdfDoc.close();
writer.close();
}
// 自定义的ResourceProvider用于解决图片路径问题
public static class ResourceProvider implements IResourceProvider {
@Override
public boolean isResourceAvailable(String resourceName) {
// 实现逻辑检查资源是否可用
return false;
}
@Override
public InputStream getResourceStream(String resourceName) throws IOException {
// 实现逻辑获取资源输入流
return null;
}
}
}
这个代码实例展示了如何使用FreeMarker模板引擎生成HTML内容,并使用iText 7的HtmlConverter类将HTML转换为PDF。代码中包含了初始化iText商业许可证的关键步骤,并且提供了一个简单的ResourceProvider实现来解决HTML中图片资源的路径问题。这个实例可以作为开发者在实际项目中生成带有复杂布局和多媒体内容的PDF文档的参考。
评论已关闭