实际工作中我们常常会遇到这样的业务需求,比如说:根据模板生成文件,将生成的文档发送邮件到指定的邮箱。实现这一需求我们可以采用根据模板生成word文档(参照前一篇文章),然后再将word文档转为PDF文档。
到这里就用到我今天要说的知识了,其实已经有很多优秀的博客写过了,所以这篇文章的主要目的还是借鉴、学习,掌握这个方法,用到自己的实际业务中去。
前置条件:准备aspose-words-15.8.0-jdk16.jar 、 license.xml 文件(破解版)
1、需要在项目中引入该jar包,如果要是本地使用的话可以直接将jar放在/WEB-INF/lib/ 目录下。
2、另一种方式是在pom文件中配置本地依赖;在项目中新建pom文件平级的文件夹lib,将aspose-words-15.8.0-jdk16.jar放入lib中,然后在pom文件中加入如下依赖
<dependency> <groupId>com.aspose</groupId> <artifactId>aspose-words</artifactId> <version>15.8.0-jdk16</version> <scope>system</scope> <systemPath>${project.basedir}/lib/aspose-words-15.8.0-jdk16.jar</systemPath> </dependency>
PS:POM文件里面可以引用一些内置属性(Maven预定义可以直接使用)
${basedir} 项目根目录
${version}表示项目版本;
${project.basedir}同${basedir};
${project.version}表示项目版本,与${version}相同;
${project.build.directory} 构建目录,缺省为target
${project.build.sourceEncoding}表示主源码的编码格式;
${project.build.sourceDirectory}表示主源码路径;
${project.build.finalName}表示输出文件名称;
${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
代码结构:
/*** * 去除生成PDF的水印 * @return */ public static boolean getLicense() { boolean result = false; try { // license.xml应放在..\WebRoot\WEB-INF\classes路径下 InputStream is = FreeMarkerWordUtil.class.getClassLoader().getResourceAsStream("license.xml"); log.info("InputStreamInputStreamInputStream=======" + is); License aposeLic = new License(); aposeLic.setLicense(is); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } /*** * word转pdf * @param wordPath * @param pdfPath */ public static boolean word2Pdf(String wordPath, String pdfPath) { boolean flag = false; // 验证License 若不验证则转化出的pdf文档会有水印产生 if (!getLicense()) { return false; } try { //新建一个pdf文档 File file = new File(pdfPath); FileOutputStream os = new FileOutputStream(file); //Address是将要被转化的word文档 Document doc = new Document(wordPath, null); //全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换 doc.save(os, SaveFormat.PDF); os.close(); flag = true; } catch (Exception e) { e.printStackTrace(); flag = false; } return flag; }
实际遇到的问题:
1)license.xml 要用破解版,否则会在 aposeLic.setLicense(is);这块代码出行异常。