/**
* PDF生成工具
*
*/
public class PDFUtil {
private final static Logger logger = LoggerFactory.getLogger(PDFUtil.class);
public static <T extends PDFBaseModelBTO> String render(T model) {
String result = "";
try {
// 初始化并取得Velocity引擎
VelocityEngine velocityEngine = new VelocityEngine();
Properties properties = new Properties();
properties.setProperty("resource.loader", "class");
properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
velocityEngine.init(properties);
Template template = velocityEngine.getTemplate(model.getTemplatePath() + model.getTemplateName() + ".xml", model.getEncoding());
// 取得velocity的上下文context
VelocityContext context = new VelocityContext();
context.put(model.getRenderDataName(), model);
StringWriter writer = new StringWriter();
// 转换输出
template.merge(context, writer);
result = writer.toString();
} catch (Exception ex) {
logger.error(ex.toString());
}
return result;
}
public static void grneratePdf(String htmlContent, OutputStream out) {
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new ByteArrayInputStream(htmlContent.getBytes("UTF-8")));
ITextRenderer iTextRenderer = new ITextRenderer();
ITextFontResolver fontResolver = iTextRenderer.getFontResolver();
addFonts(fontResolver);
iTextRenderer.setDocument(doc, null);
iTextRenderer.layout();
iTextRenderer.createPDF(out);
} catch (Exception e) {
logger.error("grneratePdf error",e);
}
}
public static ITextFontResolver addFonts(ITextFontResolver fontResolver)
throws DocumentException, Exception {
fontResolver.addFont(getResource("template-font/ARIALUNI.TTF"), BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
return fontResolver;
}
public static String getResource(String resource) {
URL url = PDFUtil.class.getClassLoader().getResource("/");
File file = new File(url.toString());
String str = file.getParent() +"/"+ resource;
return str ;
}
}
本文介绍了一个用于生成PDF文件的工具类PDFUtil。该工具利用Velocity模板引擎将数据渲染成HTML,再通过IText将HTML转换为PDF。文章详细展示了如何初始化Velocity引擎、设置模板、填充数据以及最终生成PDF的过程。
5933

被折叠的 条评论
为什么被折叠?



