1. 程式人生 > >java基於maven專案將word模板轉成pdf下載

java基於maven專案將word模板轉成pdf下載

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();

}