java基於maven專案將word模板轉成pdf下載
阿新 • • 發佈:2019-01-03
1、在poi.xml檔案下配置依賴
<!-- asponse讀取word檔案 --> <dependency> <groupId>com.aspose</groupId> <artifactId>aspose-words</artifactId> <version>13.9.0.0</version> </dependency> <!--讀取檔案 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
注意:有可能aspose-words的jar包maven下載失敗,可以網上下載對應jar包,放到對應的.m2\repository\com\aspose\aspose-words\13.9.0.0\aspose-words-13.9.0.0.jar,
jar包:https://pan.baidu.com/s/161W_pfGvr4nppkjbGhPKgg 密碼:56kj
2、在src/main/resources下面新建license.xml檔案,此檔案相當於aspose-words的破譯檔案
<?xml version="1.0" encoding="UTF-8"?> <License> <Data> <Products> <Product>Aspose.Total for Java</Product> <Product>Aspose.Words for Java</Product> </Products> <EditionType>Enterprise</EditionType> <SubscriptionExpiry>20991231</SubscriptionExpiry> <LicenseExpiry>20991231</LicenseExpiry> <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber> </Data> <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature> </License>
注意:此處的xml檔案轉載自https://www.cnblogs.com/geb515/p/7169587.html處,謝謝!!!
2、word模板裡需要替換的引數
public class Word2PdfModel {
private String idNo;
//get/set方法
}
3、controller層
//模板檔案,在src/main/resources下的model資料夾下xxx.doc檔案 @Value("classpath:model/xxx.doc") private org.springframework.core.io.Resource importModel; /**aspose-words.jar需要判斷水印,必須存在的破譯檔案,不然匯出的pdf會出現介紹文字,在src/main/resources下*/ @Value("classpath:license.xml") private org.springframework.core.io.Resource licensepath; @RequestMapping(value = "/word2PdfByParam", method = { RequestMethod.GET,RequestMethod.POST}) public void word2PdfByMoreParam(@RequestParam String idNo,//替換文字的引數 HttpServletResponse httpResponse,HttpServletRequest httpRequest) { Word2PdfModel param = null; OutputStream os = null; //word轉pdf的工具類 WordToPdfUtil util = new WordToPdfUtil(); try { param = new Word2PdfModel(idNo); //設定檔案水印 if (!util.getLicense(licensepath)) { // 驗證License 若不驗證則轉化出的pdf文件會有水印產生 return; } //更改word內容並修改為pdf File file = importModel.getFile();//獲得模板 com.aspose.words.Document doc = new com.aspose.words.Document(new FileInputStream(file)); // file是將要被轉化的word文件 //改變word內容 util.setReplaceWordInfo(doc,param); /*生成pdf下載*/ String fileName = new String(("xxx.pdf").getBytes("gbk"),"ISO8859-1"); util.downloadPdf(httpResponse,httpRequest,fileName,doc,os); } catch (Exception e) { e.printStackTrace(); } }
4、WordToPdfUtil 類
// 設定aspose的jar包去除水印
public boolean getLicense(Resource licensepath) {
boolean result = false;
try {
InputStream is = licensepath.getInputStream();
License aposeLic = new License();
aposeLic.setLicense(is);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
//替換檔案內容
public void setReplaceWordInfo(Document doc, Word2PdfModel param) throws Exception {
doc.getRange().replace("${idNo}", param.getIdNo(), false, false);
}
//在網頁上進行下載
public void downloadPdf(HttpServletResponse httpResponse, HttpServletRequest httpRequest, String fileName, Document doc, OutputStream os) throws Exception {
httpResponse.setStatus(200);
httpResponse.setHeader("content-type", "application/pdf");
httpResponse.setContentType("application/pdf");
httpResponse.setHeader("Content-Disposition", "attachment; filename=" + fileName);
os = httpResponse.getOutputStream();
doc.save(os, SaveFormat.PDF);
os.close();
}