java word转pdf、word中关键字位置插入图片 工具类
创始人
2025-01-15 23:05:26
0次

java word转pdf、word中关键字位置插入图片 工具类

1.pom依赖

 		 			org.apache.poi 			poi 			3.15 		 		 			org.apache.poi 			poi-ooxml 			3.15 		 		 			org.apache.poi 			poi-scratchpad 			3.15 		 		 			org.apache.poi 			ooxml-schemas 			1.4 		  		 			org.apache.poi 			poi-ooxml-schemas 			3.15 

2.依赖jar包

		 			com.aspose 			aspose-words 			15.8.0 			system 			${pom.basedir}/src/main/webapp/WEB-INF/lib/aspose-words-15.8.0-jdk16.jar 		 

aspose-words是需要在我们项目中引入的,并且使用时要在resouces目录下导入license.xml文件,否则生成的文件抬头会有红色的license信息。

aspose-words-15.8.0-jdk16.jar 与license.xml

3.工具类

import com.aspose.words.*; import com.aspose.words.Document;  import org.apache.poi.xwpf.usermodel.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Iterator; import java.util.List; import java.util.Map;  /**  * @author dume  * @ClassName WordToPdf  * @description: TODO  * @date 2024年07月02日  * @version: 1.0  */  public class WordUtils {     private static Logger logger = LoggerFactory.getLogger(WordUtils.class);     private static final String BASE_PATH = WordUtils.class.getClassLoader().getResource("").getPath();      /**      *  Word转Pdf      * @param sourcePath 原路径      * @param targetPath 转出路径      * @return      */     public static boolean  WordToPdf(String sourcePath,String targetPath){         FileOutputStream os = null;         try{             // 验证License 若不验证则转化出的pdf文档会有水印产生         if (!getLicense()) {             logger.info("license验证失败");             return false;         }          File file = new File(targetPath);          os = new FileOutputStream(file);         FontSettings.setFontsFolder(BASE_PATH, true);         FontSettings.setDefaultFontName("STFANGSO");         Document doc = new Document(sourcePath);         doc.save(os, SaveFormat.PDF);         os.flush();         os.close();         }catch (Exception e){             e.printStackTrace();             logger.error(e.getMessage());             return false;         }finally {             if(os!=null){                try{                    os.close();                }catch (Exception e){                 }             }         }        return true;     }      /**      *  word中插入图片方法      * @param sourcePath  word路径      * @param imgPath     图片路径      * @param keyWords    关键字      * @return   插入是否成功      */     public static boolean InsertImg(String sourcePath,String imgPath,String keyWords){         try{             // 验证License 若不验证则转化出的pdf文档会有水印产生             if (!getLicense()) {                 logger.info("license验证失败");                 return false;             }             Document doc = new Document(sourcePath);             DocumentBuilder builder = new DocumentBuilder(doc);              //插入图片的方法             NodeCollection runs = doc.getChildNodes(NodeType.PARAGRAPH, true);             for (int i = 0; i < runs.getCount(); i++) {                 Node r = runs.get(i);                 String text = r.getText();                 //获取键                 if(text.contains(keyWords)){                     //锁定到当前段落即实现页面变换                     builder.moveTo(r);                     builder.insertImage(imgPath, RelativeHorizontalPosition.PAGE, 205, RelativeVerticalPosition.PAGE, 0, 20, 7, WrapType.INLINE);                     break;                 }             }             doc.save(sourcePath);         }catch (Exception e){             e.printStackTrace();             logger.error(e.getMessage());             return false;         }         return true;     }          public static boolean getLicense() {         boolean result = false;         try {             FileInputStream is = new FileInputStream (BASE_PATH+"license.xml");             License asposeLicense = new License();             asposeLicense.setLicense(is);             result = true;         } catch (Exception e) {             e.printStackTrace();         }         return result;     }       /***      * @Description :替换段落文本      * @param document docx解析对象      * @param textMap  需要替换的信息集合      * @return void      */     public static void changeText(XWPFDocument document, Map textMap) {         // 获取段落集合         Iterator iterator = document.getParagraphsIterator();         XWPFParagraph paragraph = null;         while (iterator.hasNext()) {             paragraph = iterator.next();             // 判断此段落是否需要替换             if (checkText(paragraph.getText())) {                 replaceValue(paragraph, textMap);             }         }     }      /***      * @Description :替换表格内的文字      * @param document      * @param data      * @return void      */     public static void changeTableText(XWPFDocument document, Map data) {         // 获取文件的表格         Iterator tableList = document.getTablesIterator();         XWPFTable table;         List rows;         List cells;         // 循环所有需要进行替换的文本,进行替换         while (tableList.hasNext()) {             table = tableList.next();             if (checkText(table.getText())) {                 rows = table.getRows();                 // 遍历表格,并替换模板                 for (XWPFTableRow row : rows) {                     cells = row.getTableCells();                     for (XWPFTableCell cell : cells) {                         // 判断单元格是否需要替换                         if (checkText(cell.getText())) {                             List paragraphs = cell.getParagraphs();                             for (XWPFParagraph paragraph : paragraphs) {                                 replaceValue(paragraph, data);                             }                         }                     }                 }             }         }     }      /***      * @Description :检查文本中是否包含指定的字符(此处为“$”)      * @param text      * @return boolean      */     public static boolean checkText(String text) {         boolean check = false;         if (text.contains("$")) {             check = true;         }         return check;     }      /***      * @Description :替换内容      * @param paragraph      * @param textMap      * @return void      */     public static void replaceValue(XWPFParagraph paragraph, Map textMap) {         XWPFRun run, nextRun;         String runsText;         List runs = paragraph.getRuns();         for (int i = 0; i < runs.size(); i++) {             run = runs.get(i);             runsText = run.getText(0);             if (runsText.contains("${") || (runsText.contains("$") && runs.get(i + 1).getText(0).substring(0, 1).equals("{"))) {                 while (!runsText.contains("}")) {                     nextRun = runs.get(i + 1);                     runsText = runsText + nextRun.getText(0);                     //删除该节点下的数据                     paragraph.removeRun(i + 1);                 }                 Object value = changeValue(runsText, textMap);                 //判断key在Map中是否存在                 String replaceText = runsText.replace("${", "").replace("}", "");                 if (textMap.containsKey(replaceText)) {                     run.setText(value.toString(), 0);                 } else {                     //如果匹配不到,则不修改                     run.setText(runsText, 0);                 }             }         }     }      /***      * @Description :匹配参数      * @param value      * @param textMap      * @return java.lang.Object      */     public static Object changeValue(String value, Map textMap) {         Object valu = "";         for (Map.Entry textSet : textMap.entrySet()) {             // 匹配模板与替换值 格式${key}             String key = textSet.getKey();             if (value.contains(key)) {                 valu = textSet.getValue();             }         }         return valu;     }  }  

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...