java根据word模板生成word,并转pdf

本文介绍了一种使用Java通过替换Word模板中的变量来生成新的Word文档,并进一步将生成的Word文档转换为PDF的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java根据word模板生成word,并转pdf

思路:

代码替换word变量生成新的word,再将生成的word转成pdf

在这里插入图片描述
在这里插入图片描述

代码

    String fileType = "pdf.jpg";
        //显示图标
        File thumbnail = ResourceUtils.getFile("classpath:static" + File.separator + "images" + File.separator + fileType);
        byte[] data = ImageUtil.getFilesByteArray(thumbnail);
        ImageUtil.saveFiles(filepath + "_.jpg", data);


        for (int i = 0; i < electronicRequests.getItems().size(); i++) {
            String LINE_DESC = electronicRequests.getItems().get(i).getLINE_DESC();
            String CF_ACCOUNT_DESC = electronicRequests.getItems().get(i).getCF_ACCOUNT_DESC();
            String CF_ACCOUNT_VALUE = electronicRequests.getItems().get(i).getCF_ACCOUNT_VALUE();
            String KM = CF_ACCOUNT_DESC +"\r"+ CF_ACCOUNT_VALUE;
            String ENTERED_DR = electronicRequests.getItems().get(i).getENTERED_DR();
            if(ENTERED_DR.equals(".00")){
                ENTERED_DR="0.00";
            }
            String ACCOUNTED_DR = electronicRequests.getItems().get(i).getACCOUNTED_DR();
            if(ACCOUNTED_DR.equals(".00")){
                ACCOUNTED_DR="0.00";
            }
            String ENTERED_CR = electronicRequests.getItems().get(i).getENTERED_CR();
            if(ENTERED_CR.equals(".00")){
                ENTERED_CR="0.00";
            }
            String ACCOUNTED_CR = electronicRequests.getItems().get(i).getACCOUNTED_CR();
            if(ACCOUNTED_CR.equals(".00")){
                ACCOUNTED_CR="0.00";
            }
            //借方在上 贷方在下
            if(!ENTERED_DR.equals("") || !ACCOUNTED_DR.equals("")){
                JList.add(new String[]{LINE_DESC, KM, ENTERED_DR, ACCOUNTED_DR, ENTERED_CR, ACCOUNTED_CR});
            }else{
                DList.add(new String[]{LINE_DESC, KM, ENTERED_DR, ACCOUNTED_DR, ENTERED_CR, ACCOUNTED_CR});
            }



	       if(JList.size() == 0){
	                 word = WorderToNewWordUtils.changWord(inputUrl, outpath, testMap, JList,DList);
	            }else{
	
	               word = WorderToNewWordUtils.changWord(inputUrltwo, outpath, testMap, JList,DList);
	            }
	
	
	            if (word) {
	                //生成pdf
	                Doc2Pdf.doc2pdf(outpath, filepath + "_PDF");
	            }

工具类:

import org.apache.poi.POIXMLDocument;
import org.apache.poi.xwpf.usermodel.*;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 * 通过word模板生成新的word工具类
 *
 * @author zhiheng
 */
public class WorderToNewWordUtils {
   

    /**
     * 根据模板生成新word文档
     * 判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入
     *
     * @param inputUrl  模板存放地址
     * @param textMap   需要替换的信息集合
     * @param JList 需要插入的表格信息集合
     * @return 成功返回true, 失败返回false
     */
    public static boolean changWord(String inputUrl, String outputUrl,
                                    Map<String, String> textMap, List<String[]> JList,List<String[]> DList) {
   

        //模板转换默认成功
        boolean changeFlag = true;
        try {
   
            //获取docx解析对象
            XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(inputUrl));
            //解析替换文本段落对象
            WorderToNewWordUtils.changeText(document, textMap);
            //解析替换表格对象
            WorderToNewWordUtils.changeTable(document, textMap, JList,DList);

            //生成新的word
            File file = new File(outputUrl);
            FileOutputStream stream = new FileOutputStream(file);
            document.write(stream);
            stream.close();

        } catch (IOException e) {
   
            e.printStackTrace();
            changeFlag = false;
        }

        return changeFlag;

    }

    /**
     * 替换段落文本
     *
     * @param document docx解析对象
     * @param textMap  需要替换的信息集合
     */
    public static void changeText(XWPFDocument document, Map<String, String
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值