(亲测有效)world模板参数替换导出pdf

直接上效果

world模板(阴影部分是通过world文字窗体域设置的参数表单)

下载后的PDF文档(测试相关参数替换成功且转换格式未产生影响)
在这里插入图片描述

.

依赖包选型(1.Aspose包)

1.通过设置world模板里的文字型窗体域,然后用aspose包在后台读取替换参数,再将world转pdf导出;

2.通过Adobe crobat pro软件直接在pdf模板里设置表单文本域,然后在后台用itext依赖对pdf的文本域参数直接做替换后导出(这个方法试过了但是参数替换失效,不知道是Adobe crobat pro软件设置表单域失败的原因还是itext的问题)

3.通过easypoi对world模板参数做替换,然后再通过itext包把world转pdf导出(此方法试过了可以成功替换参数,但是导出的pdf格式异常)

.

引入Aspose

坑点: 网上查出来的开源免费包大多携带水印,去水印的破解包大多需要购买
手动破解水印的方法参考:手动去水印
已去水印依赖下载:已去水印依赖包

<!--aspose-words依赖,直接依赖本地仓库的jar-->
        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-words</artifactId>
            <version>20.4-jdk16</version>
        </dependency>

.

Controller

@ApiOperation("下载协议书")
    @PostMapping(value = "/export/downloadFile")
    @ResponseBody
    public void downloadFile(@RequestBody Map<String,Object> map
    , HttpServletResponse response) {
        fileService.downloadFile(map,response);
    }

.

Service

    /**
     * 协议书下载
     * @param map
     */
    public void downloadFile(Map<String,Object> map, HttpServletResponse response){
        log.info("下载协议书相关参数: [{}]",map.toString());
        try {
            File file=new File("src\\main\\resources\\十堰模板.docx");
            //此处必须传文件的绝对路径
            Document doc=new Document(file.getAbsolutePath());
            //获取world模板的文字窗体域
            Range range=doc.getRange();
            //对参数赋值
            for (Map.Entry<String,Object> entry:map.entrySet()){
                range.replace(entry.getKey(), entry.getValue().toString(), new FindReplaceOptions());
            }
            response.setCharacterEncoding("utf-8");
            response.setContentType("application/pdf");
            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("十堰市商品房预售资金监督使用管理协议书.pdf", "UTF-8"));
            //调用Aspose方法
            PdfUtil.docToPdfDownload(doc,response);
            log.info("下载协议书成功");
        } catch (Exception e) {
            log.error("导出协议书失败失败",e);
        }
    }

.

PdfUtil

import com.aspose.words.Document;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.util.Map;

/**
 * 2021-06-04-zh
 */
public class PdfUtil {

   /**
    * 写入至本地
    */
    public static void docToPdf(Document doc, String targetFile) throws Exception {
        AposeUtil.docToPdf(doc,targetFile);
    }
    
/**
    * 浏览器下载
    */
    public static void docToPdfDownload(Document doc, HttpServletResponse response) throws Exception {
        AposeUtil.docToPdfDownload(doc, response);
    }
}

.

AsposeUtil

import com.aspose.words.Document;
import com.aspose.words.SaveFormat;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

/**
 * 2021-06-04-zh
 */
public class AposeUtil {


    /**
     * 《《《写入本地》》》
     * aspose转换
     * Word转PDF操作
     * @param doc        源文件
     * @param targetFile 目标文件
     */
    public static void docToPdf(Document doc, String targetFile) throws Exception {
        //新建一个空白pdf文档
        File file = new File(targetFile);
        FileOutputStream os = new FileOutputStream(file);
        //全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
        doc.save(os, SaveFormat.PDF);
        os.close();
    }

    /**
     * 《《《浏览器下载》》》
     * aspose转换
     * Word转PDF操作
     * 写入本地
     */
    public static void docToPdfDownload(Document doc, HttpServletResponse response) throws Exception {
        OutputStream os = response.getOutputStream();
        //全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
        doc.save(os, SaveFormat.PDF);
        os.close();
    }

}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值