根据模板生成word,然后转为pdf预览,并删除word

Pom
第一个jar包得自己下载第一个jar包下载地址

  <dependency>
                <groupId>com.aspose</groupId>
                <artifactId>aspose-words-jdk16</artifactId>
                <version>18.6</version>
                <scope>system</scope>
                <systemPath>${project.basedir}/lib/wordZpdf/aspose-words-18.6-jdk16-crack.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-parsers</artifactId>
            <version>1.20</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.15</version>
        </dependency>

工具类

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfCopy;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.framework.config.RuoYiConfig;
import com.ruoyi.project.utils.wordZpdf.WordIsPdf;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

public class FreemarkerUtil {
	private static final Object LOCK = new Object();
	 /**
	  * word文件
	  */
	 public static final int WORD_FILE = 1;
	 /**
	  * excel文件
	  */
	 public static final int EXCEL_FILE = 2;
	 
	 private static Configuration cfg;

	private static FreemarkerUtil ftl ;

	private FreemarkerUtil(String templateFolder) throws IOException {
		cfg = new Configuration();
		cfg.setDirectoryForTemplateLoading(new File(templateFolder));
		cfg.setObjectWrapper(new DefaultObjectWrapper());
		cfg.setClassicCompatible(true);
	}

	private static void check(HttpServletRequest request) {
		if (ftl == null) {
			synchronized (LOCK) {
				try {
					File directory = new File("");// 参数为空
        			String courseFile = directory.getCanonicalPath();
        			String uploadDir = courseFile + "\\" + "src\\main\\resources\\ftl";
					ftl = new FreemarkerUtil(uploadDir);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	//下载
	public static void createFile(String templateName, String docFileName, Map<String,Object> rootMap, HttpServletRequest request, HttpServletResponse response, int fileType) throws IOException {
		//设置导出
		response.addHeader("Cache-Control","no-cache");
		response.setCharacterEncoding("UTF-8");
		if( WORD_FILE == fileType){
			response.setContentType("application/vnd.ms-word;charset=UTF-8");
		}else if(EXCEL_FILE == fileType){
			response.setContentType("application/octet-stream;charset=UTF-8");
		}else{
			response.setContentType("application/octet-stream");
		}
		String ua = request.getHeader("user-agent");
		ua = ua == null ? null : ua.toLowerCase();
		if(ua != null && (ua.indexOf("firefox") > 0 || ua.indexOf("safari")>0)){
			try {
				docFileName = new String(docFileName.getBytes(),"ISO8859-1");
				response.addHeader("Content-Disposition","attachment;filename=" + docFileName);
			} catch (Exception e) {
			}
		}else{
			try {
				docFileName = URLEncoder.encode(docFileName, "utf-8");
				response.addHeader("Content-Disposition","attachment;filename=" + docFileName);
			} catch (Exception e) {
			}
		}
		check(request);
		//解析模版
		Template temp = cfg.getTemplate(templateName, "UTF-8");


		String filePath = "D:/pdf"+"/";
		String ml = filePath+"word.doc";
		File file = new File(ml);
		if (!file.exists()) {
			if (!file.getParentFile().exists()) {
				file.getParentFile().mkdirs();
			}
		}
		PrintWriter writes = new PrintWriter(file);

		PrintWriter write = response.getWriter();
		try {
//			temp.process(rootMap, write);
			temp.process(rootMap, writes);
		} catch (TemplateException e) {
			e.printStackTrace();
		}finally {
			if(write != null){
				write.flush();
				write.close();
			}
		}
	}

	//word转pdf并预览,(word文件删除,pdf定时删除)
	public static void createFiles(String templateName, String orderCode, Map<String,Object> rootMap, HttpServletRequest request,HttpServletResponse response,int fileType) throws IOException {
		check(request);
		//解析模版
		Template temp = cfg.getTemplate(templateName, "UTF-8");
		//word文件名称
		String filePath = RuoYiConfig.getPdfLj()+"/"+orderCode+"/"+DateUtils.datePath()+"/";
		SimpleDateFormat df=new SimpleDateFormat("yyyyMMddHHmmss");
		String sj = df.format(new Date());
		String wj = filePath+sj+".doc";
		File file = new File(wj);
		if (!file.exists()) {
			if (!file.getParentFile().exists()) {
				file.getParentFile().mkdirs();
			}
		}
		PrintWriter writes = new PrintWriter(file);
		try {
			//生成word
			long startTime = System.currentTimeMillis();
			temp.process(rootMap, writes);
			long endTime = System.currentTimeMillis(); // 获取结束时间
			System.out.println("程序运行时间: " + (endTime - startTime) + "ms");

			//转pdf
			long startTimes = System.currentTimeMillis();
			String pdf = filePath+sj+".pdf";
			WordIsPdf.docToPdf(wj,pdf);
			long endTimes = System.currentTimeMillis(); // 获取结束时间
			System.out.println("程序运行时间: " + (endTimes - startTimes) + "ms");

			//pdf换流显示,并删除word
			FileInputStream in = new FileInputStream(pdf);
			//设置导出
			response.setHeader("Content-Disposition", "inline;filename="
					+ "pz.pdf");
			OutputStream out = response.getOutputStream();
			byte[] b = new byte[1024];
			while ((in.read(b))!=-1) {
				out.write(b);
			}
			out.flush();
			in.close();
			out.close();

		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			if(writes != null){
				writes.flush();
				writes.close();
			}
		}
		//删除word
		file.delete();
	}
}

上面调用pdf代码

import java.io.File;
import java.io.FileOutputStream;
import com.aspose.words.Document;
import com.aspose.words.FontSettings;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;

import java.io.*;


public class WordIsPdf {

    public static void main(String[] args) {
        try {
            long startTime = System.currentTimeMillis();
            docToPdf("D:\\pdf\\wpxx.doc",
                    "D:\\pdf\\wpxx.pdf");
            long endTime = System.currentTimeMillis(); // 获取结束时间
            System.out.println("程序运行时间: " + (endTime - startTime) + "ms");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void docToPdf(String inPath, String outPath) throws Exception {
        if (!getLicense()) { // match License if not marks on document
            throw new Exception("license not correct!");
        }
        System.out.println(inPath + " -> " + outPath);
        try {
            File file = new File(outPath);
            FileOutputStream os = new FileOutputStream(file);
            Document doc = new Document(inPath); // doc/docx
            FontSettings.getDefaultInstance().setFontsFolders(new String[]{"/usr/share/fonts/truetype/chinese", "C:\\Windows\\Fonts"}, true);
            doc.save(os, SaveFormat.PDF);
            os.close();  //关闭文件
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /*
 证书有效性验证
 */
    public static boolean getLicense() {
        boolean result = false;
        try {
            InputStream is = Document.class.getResourceAsStream("/com.aspose.words.lic_2999.xml");
            License asposeLic = new License();
            asposeLic.setLicense(is);
            result = true;
            is.close();
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return result;
        }
    }
}

方法调用 String zdybs是

 /**
     * 打印登记表(先生成word,后word转pdf)
     *
     * @return
     */
    @GetMapping("/daYinPdf")
    public void daYinPdf(HttpServletResponse response,HttpServletRequest request) throws IOException, DocumentException {
        Map<String,Object> map = new HashMap();
        //下面map这个只是为了给模板赋值,替换成现有map即可
        map = dayin(map, zdybs, orderCode);
        //主要调用
        FreemarkerUtil.createFiles("djb.ftl", orderCode, map, request, response,FreemarkerUtil.WORD_FILE);
    }

djb.ftl说明:
是wps生成的xml改了后缀名得到的
该文件我放在项目String uploadDir = courseFile + “\” + “src\main\resources\ftl”;该路径下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值