RTF模板+XML模板 => PDF文件
一:tomcat配置
catalina.bat
if not "%JSSE_OPTS%" == "" goto gotJsseOpts
set JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
:gotJsseOpts
set "JAVA_OPTS=%JAVA_OPTS% %JSSE_OPTS% -Dfile.encoding=UTF-8"
logging.properties
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
;; 解决日志乱码
java.util.logging.ConsoleHandler.encoding = GBK
字体
ALBANWTJ.ttf
ALBANWTK.ttf
ALBANWTS.ttf
ALBANWTT.ttf
ALBANYWT.ttf
二、word中编辑rtf模板
1:快速功能区调出窗体域
2:编辑文字域
3:语法:https://www.cnblogs.com/eastsea/p/3762380.html
三、生成文件
private void buildReport(OutputStream outputStream, String templatePath, String xml) throws Exception {
// 使用 RTF 模板文件生成 xsl 文件,并将其写入到 xslOutputStream,避免生成临时文件
InputStream fIs = new URL(templatePath).openStream();
OutputStream xslOutputStream = new ByteArrayOutputStream();
RTFProcessor rtfProcessor = new RTFProcessor(fIs);
rtfProcessor.setOutput(xslOutputStream);
rtfProcessor.process();
// xsl 临时文件(模板文件) + 数据文件 => PDF 文件
FOProcessor foProcessor = new FOProcessor();
foProcessor.setData(IOUtils.toInputStream(xml));
foProcessor.setTemplate(IOUtils.toInputStream(xslOutputStream.toString()));
// 设置 PDF 文件保存位置,setOutput 方法也支持输出流作为参数
foProcessor.setOutput(outputStream);
foProcessor.setOutputFormat(FOProcessor.FORMAT_PDF);
foProcessor.generate();
}