思路:
代码替换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