直接上代码

word里面添加的图片不能浮动,这个很重要

package com.topic.util;import com.alibaba.fastjson.JSONObject;
import com.commons.util.date.DateUtil;
import net.arnx.wmf2svg.gdi.svg.SvgGdi;
import net.arnx.wmf2svg.gdi.wmf.WmfParser;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.PicturesTable;
import org.apache.poi.hwpf.usermodel.*;
import org.w3c.dom.Document;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.util.*;
import java.util.List;public class WordTest {public static List<Map<String,Object>> analysisWord(String  ipPath,String projectPath,FileInputStream is) throws Exception {List<Map<String,Object>> resultList=new ArrayList<>(16);HWPFDocument document = new HWPFDocument(is);Range range = document.getRange();StringBuffer data = new StringBuffer();// 创建图片容器PicturesTable pTable = document.getPicturesTable();for (int i = 0; i < range.numParagraphs(); i++) {Paragraph paragraph = range.getParagraph(i);//段落String text = paragraph.text();System.out.println(text);text = text.replaceAll("\u0013 EMBED Equation.DSMT4 \u0014\u0001\u0015", "\u0013");text = text.replaceAll("\u0013 EMBED Equation.KSEE3", "");text = text.replaceAll("\\* MERGEFORMAT \u0014\u0001\u0015", "\u0013");text = text.replaceAll("\u0001", "\u0013");text = text.replaceAll("\r", "<br/>");text = text.replaceAll("\t", "");text = text.replaceAll("\b", "");data.append(text);}List<String> picList = new ArrayList<>(16);String name = "";List<Picture> pic = pTable.getAllPictures();for (Picture img : pic) {String storePath="/word/"+DateUtil.getShortSystemDate()+"/";name = UUID.randomUUID().toString().replaceAll("-", "");String afileName = img.suggestFullFileName();String suffix = afileName.substring(afileName.lastIndexOf(".") + 1);try {File targetFile = new File(projectPath+storePath );if (!targetFile.exists()) {targetFile.mkdirs();}OutputStream out = new FileOutputStream(projectPath+storePath +"/"+name+ "." + suffix);img.writeImageContent(out);out.close();if(suffix.equals("wmf")){InputStream in = new FileInputStream(new File(projectPath  +storePath+"/"+ name + "." + suffix));WmfParser parser = new WmfParser();final SvgGdi gdi = new SvgGdi(false);parser.parse(in, gdi);Document doc = gdi.getDocument();OutputStream out1 = new FileOutputStream(new File(projectPath   +storePath+"/"+ name + "." + "svg"));output(doc, out1);picList.add(ipPath+"/"+storePath+name + "." + "svg");}else{Im4JavaUtils.copyImage(projectPath+storePath+"/"  + name + "." + suffix, projectPath   +storePath+"/"+ name + ".jpg");picList.add(ipPath+"/"+storePath+name + "." + "jpg");}} catch (Exception e) {System.out.println(e);}}String html=data.toString();for(String path:picList){path = "<img class='image' src='"+path+"'>";html= html.replaceFirst("\u0013",path);}String[] datas=html.split("【结束】");for(String word:datas){Map<String,Object> result=new HashMap<>(16);if(!word.contains("【题干】")){continue;}String xuhao= word.substring(word.indexOf("【序号】")+4,word.lastIndexOf("【所在页】"));//序号String suozaiye= word.substring(word.indexOf("【所在页】")+5,word.lastIndexOf("【题号】"));//所在页String tihao= word.substring(word.indexOf("【题号】")+4,word.lastIndexOf("【标题】"));//题号String  topic_name=word.substring(word.indexOf("【标题】") + 4, word.indexOf("【题干】"));//题目String topic_dry = word.substring(word.indexOf("【题干】") + 4, word.indexOf("【答案】"));//题干String answers= word.substring(word.indexOf("【答案】")+4,word.lastIndexOf("【解析】"));//答案String parsing=word.substring(word.indexOf("【解析】") + 4, word.indexOf("【题目来源】"));//解析String topic_source=word.substring(word.indexOf("【题目来源】") +6, word.indexOf("【教学目的】"));//题目来源String teaching_aims=word.substring(word.indexOf("【教学目的】") +6, word.indexOf("【备注】"));//教学目的String node=word.substring(word.indexOf("【备注】") + 4);//备注result.put("xuhao",xuhao);result.put("suozaiye",suozaiye);result.put("tihao",tihao);result.put("topic_name",topic_name);result.put("topic_dry",topic_dry);result.put("answers",answers);result.put("parsing",parsing);result.put("topic_source",topic_source);result.put("teaching_aims",teaching_aims);result.put("node",node);resultList.add(result);}System.out.println( JSONObject.toJSONString(resultList));return resultList;}public static void output(Document doc, OutputStream out) throws Exception {TransformerFactory factory = TransformerFactory.newInstance();Transformer transformer = factory.newTransformer();transformer.setOutputProperty(OutputKeys.METHOD, "xml");transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");transformer.setOutputProperty(OutputKeys.INDENT, "yes");transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC,"-//W3C//DTD SVG 1.0//EN");transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM,"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd");transformer.transform(new DOMSource(doc), new StreamResult(out));ByteArrayOutputStream bos = new ByteArrayOutputStream();transformer.transform(new DOMSource(doc), new StreamResult(bos));out.flush();out.close();}public static void main(String[] args)  throws Exception{
//        String aa="【所在页】办不办【教学目的】更杠【结束】【所在页】办不办【教学目的】更杠【结束】";
//        String[] datas=aa.split("【结束】");
//        for(String data:datas){
//           String hh=data.substring(data.indexOf("【教学目的】")+6);
//
//            System.out.println(data);
//        }
//        //aa=aa.substring(aa.indexOf("【所在页】")+5,aa.lastIndexOf("【教学目的】"));
//        System.out.println("1");analysisWord("http://api.xxx.com.cn/","D:\\home\\images\\",new FileInputStream(new File("D://test1.doc")));}
}
package com.topic.util;import org.im4java.core.ConvertCmd;
import org.im4java.core.IMOperation;
import org.im4java.core.IdentifyCmd;
import org.im4java.core.ImageCommand;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.File;
import java.util.ArrayList;
import java.util.List;public class Im4JavaUtils {private static final Logger logger = LoggerFactory.getLogger(Im4JavaUtils.class);/** 是否使用 GraphicsMagick (Windows下为true) **/private static final boolean USE_GRAPHICS_MAGICK_PATH = true;/** ImageMagick 安装目录 **/private static final String IMAGE_MAGICK_PATH = "D:\\Program Files\\ImageMagick-7.0.10-Q16-HDRI";/** GraphicsMagick 安装目录 **/private static final String GRAPHICS_MAGICK_PATH = "D:\\Program Files\\GraphicsMagick-1.3.35-Q16";/*** 获取 ImageCommand* @param comm 命令类型(convert, identify)* @return*/private static ImageCommand getImageCommand(String comm) {ImageCommand cmd = null;if ("convert".equalsIgnoreCase(comm)) {cmd = new ConvertCmd(USE_GRAPHICS_MAGICK_PATH);} else if ("identify".equalsIgnoreCase(comm)) {cmd = new IdentifyCmd(USE_GRAPHICS_MAGICK_PATH);} // else if....
//        Windows环境下需要配置应用路径if (cmd != null && System.getProperty("os.name").toLowerCase().indexOf("windows") != -1) {cmd.setSearchPath(USE_GRAPHICS_MAGICK_PATH ? GRAPHICS_MAGICK_PATH : IMAGE_MAGICK_PATH);}return cmd;}/*** 降低品质,以减小文件大小* @param path 原文件路径* @param des 目标文件路径* @param quality 保留品质(1-100)* @throws Exception*/public static void reduceQuality(String path, String des, double quality) throws Exception {createDirectory(des);IMOperation op = new IMOperation();op.addImage(path);op.quality(quality);op.addImage(des);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.run(op);}/*** 改变图片大小比例* @param path 原文件路径* @param des 目标文件路径* @param ratio 缩放比例* @throws Exception*/public static void resizeImage(String path, String des, String ratio) throws Exception {
//        创建目标文件createDirectory(des);IMOperation op = new IMOperation();op.addImage(path);op.addRawArgs(ratio);op.addImage(des);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.run(op);}/*** 等比缩放图片(如果width为空,则按height缩放; 如果height为空,则按width缩放)* @param path 原文件路径* @param des 目标文件路径* @param width 缩放后的宽度* @param height 缩放后的高度* @param sample 是否以缩放方式,而非缩略图方式* @throws Exception*/public static void scaleResizeImage(String path, String des, Integer width, Integer height, boolean sample) throws Exception {createDirectory(des);IMOperation op = new IMOperation();op.addImage(path);if (sample) op.resize(width, height);else op.sample(width, height);op.addImage(des);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.run(op);}/*** 从原图中裁剪出新图* @param path 原文件路径* @param des 目标文件路径* @param x 原图左上角* @param y 原图左上角* @param width 新图片宽度* @param height 新图片高度* @throws Exception*/public static void cropImage(String path, String des, int x, int y, int width, int height) throws Exception {createDirectory(des);IMOperation op = new IMOperation();op.addImage(path);op.crop(width, height, x, y);op.addImage(des);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.run(op);}/*** 将图片分割为若干小图* @param path 原文件路径* @param des 目标文件路径* @param width 指定宽度(默认为完整宽度)* @param height 指定高度(默认为完整高度)* @return 小图路径* @throws Exception*/public static List<String> subsectionImage(String path, String des, Integer width, Integer height) throws Exception {createDirectory(des);IMOperation op = new IMOperation();op.addImage(path);op.crop(width, height);op.addImage(des);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.run(op);return getSubImages(des);}/*** <pre>* <li>去除Exif信息</li>* <li>按指定的宽度等比缩放图片</li>* <li>降低图片品质</li>* <li>将图片分割分指定高度的小图</li>** @param path 原文件路径* @param des 目标文件路径* @param width 指定宽度* @param subImageHeight 指定高度* @param quality 保留品质* @return 小图路径* @throws Exception* </pre>*/public static List<String> resizeAndCropImage(String path, String des, int width, int subImageHeight, double quality) throws Exception {createDirectory(des);IMOperation op = new IMOperation();op.addImage(path);//        op.profile("*");op.resize(width, null);op.quality(quality);op.crop(null, subImageHeight);op.addImage(des);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.run(op);return getSubImages(des);}/**** 切图* @param source path       源图片路径* @param target            目标图片路径* @param width             限宽* @param subImageHeight    最终高度* @param quality           图片质量(0~100)* @throws Exception*/public static void cropImage(String source, String target, int width, int subImageHeight, double quality) throws Exception {createDirectory(target);IMOperation op = new IMOperation();op.addImage(source);op.resize(width, null);op.quality(quality);op.crop(null, subImageHeight, 0, 15);op.addImage(target);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.run(op);}/*** 拷贝图片 - 同步* @param source* @param target* @return* @throws Exception*/public static boolean copyImage(String source, String target) throws Exception {createDirectory(target);IMOperation op = new IMOperation();op.addImage(source);op.addImage(target);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.setAsyncMode(false);cmd.run(op);return true;}/*** 拷贝图片 - 异步* @param source* @param target* @return* @throws Exception*/public static void copyImageAsync(String source, String target) throws Exception {createDirectory(target);IMOperation op = new IMOperation();op.addImage(source);op.addImage(target);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.setAsyncMode(true);cmd.run(op);}/*** 创建目录* @param path*/private static void createDirectory(String path) {File file = new File(path);if (file.exists()){return;}file.getParentFile().mkdirs();}/*** 获取图片分割后的小图路径* @param des 目录路径* @return 小图路径*/private static List<String> getSubImages(String des) {String fileDir = des.substring(0, des.lastIndexOf(File.separatorChar)); // 文件所在目录String fileName = des.substring(des.lastIndexOf(File.separatorChar) + 1); // 文件名称String n1 = fileName.substring(0, fileName.lastIndexOf(".")); // 文件名(无后缀)String n2 = fileName.replace(n1, ""); // 后缀List<String> fileList = new ArrayList<String>();String path = null;for (int i = 0;; i++) {path = fileDir + File.separatorChar + n1 + "-" + i + n2;if (new File(path).exists()) fileList.add(path);else break;}return fileList;}/*** 获取GIF图片一帧图片 - 同步执行* @param src* @param target* @param frame* @throws Exception*/public static boolean getGifOneFrame(String src, String target, int frame) throws Exception {if(!src.endsWith(".gif")){return false;}createDirectory(target);IMOperation op = new IMOperation();op.addImage(src + "["+frame+"]");op.addImage(target);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.setAsyncMode(false);cmd.run(op);return true;}/*** 获取GIF图片一帧图片 - 异步执行* @param src* @param target* @param frame* @throws Exception*/public static void getGifOneFrameAsync(String src, String target, int frame) throws Exception {if(!src.endsWith(".gif")){return;}createDirectory(target);IMOperation op = new IMOperation();op.addImage(src + "["+frame+"]");op.addImage(target);ConvertCmd cmd = (ConvertCmd) getImageCommand("convert");cmd.setAsyncMode(true);cmd.run(op);}public static void main(String[] args) throws Exception {String src = "D:\\test\\0.emf";String target = "D:\\test\\0.jpg";copyImage(src, target);logger.info("处理完成");}
}
  <dependency><groupId>org.im4java</groupId><artifactId>im4java</artifactId><version>1.4.0</version></dependency><dependency><groupId>org.xhtmlrenderer</groupId><artifactId>core-renderer</artifactId><version>R8</version></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.9</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!-- https://mvnrepository.com/artifact/com.lowagie/itext --><dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>2.0.8</version><type>pom</type></dependency><!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian --><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.0.3</version></dependency>

处理图片主要参考这个https://blog.csdn.net/chwshuang/article/details/64921665

java解析wrod带公式带图片相关推荐

  1. Java解析excel表格中的图片的方式

    我们要用java解析首先得在项目中引入解析excel的相关包,我们这里使用的是apache的poi-3.12.jar来做开发. 首先获取excel文件,获取文件的方式这里就不细说了,获取到文件后,将文 ...

  2. Java解析PPT获取文本和图片

    需要引用的包 poi-ooxml-4.1.2.jar import org.apache.poi.xslf.usermodel.*; 主要实现方法 public static FileTextVo g ...

  3. java实现word导出(带图片)

    java实现word导出(带图片) 转载地址:https://www.jianshu.com/p/98ed03044fe1

  4. Office中数学公式用Java解析,java解析word公式

    公司正在做教育类产品,在遇到数学公式时,我们一般会使用latex表达式来做保存和渲染. 在其中一个项目上,遇到一个需求是要从office文档(Word或Excel)中导入题目内容至数据库,题目内容中就 ...

  5. poi处理word内容的公式_Office中数学公式用Java解析

    公司正在做教育类产品,在遇到数学公式时,我们一般会使用latex表达式来做保存和渲染. 在其中一个项目上,遇到一个需求是要从office文档(Word或Excel)中导入题目内容至数据库,题目内容中就 ...

  6. JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库

    转载自  JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库 开发环境:struts2+ spring + hibernate 数据库:oracle 需求:在HTML编 ...

  7. 一键批量将mathtype公式转换成word自带公式-vba/vbnet

    文章目录 实现效果 一.mathtype与word自带公式omaths 1.mathtype在word中的表现形式 2.实现原理 3.为什么要将mathtype转换成word自带公式? 二.代码实现方 ...

  8. java二级考试备考_2017计算机二级考试《JAVA》备考测试题「带答案」

    2017计算机二级考试<JAVA>备考测试题「带答案」 为确保同学们将所涉及的考点全面复习到位,让大家充满信心的步入考场,以下是百分网小编搜索整理的一份计算机二级考试<JAVA> ...

  9. Java EXCEL 表格导入导出(带下拉选-带VLOOKUP函数封装)

    Java EXCEL 表格导入导出(带下拉选-带VLOOKUP函数封装) 对于excel Java POI 使用 目前简单导出导入功能网上很多,但是对于有下拉选,样式等缺点却是最大硬伤,故此封装一个通 ...

最新文章

  1. 在ubuntu16.0403X64上安装海思交叉编译工具链
  2. 新方案-eclipse配置tomcat中文乱码另一种解决方案
  3. [R语言画图]气泡图symbols
  4. 爷青回!16年前“打球AI”意外走红,程序员留下了自己的ICQ和MSN
  5. F盘无法访问设备硬件出现致命错误,导致请求失败数据找回的方案
  6. kotlin 判断数字_Kotlin程序检查给定数字是正数,负数还是零
  7. Python使用pdfkit、wkhtmltopdf将html转换为pdf错误记录文档
  8. 离群点、异常点检测及Python实现(正态分布3∂,Z-score 异常值检测,基于MAD的Z-score 异常值检测,杠杆值点、DFFITS值、SR学生化残差、cook距离和covratio值)
  9. python小括号( )与中括号 [ ]
  10. 字符串类型日期时间转换为Date类型解析转换异常java.text.ParseException: Unparseable date: “2019-09-27T18:31:31+08:00”
  11. 监控服务器ssh登录,并发送报警邮件
  12. 4: Consolidating Datasets ( Challenge: Data Munging Using The Command Line)
  13. 浏览器 之 无头浏览器
  14. Windows Server 2003 (NT 5.2.3790.0) 操作系统源代码编译构建指南版本 10b,上次更新 2021/10/21
  15. OpenGL 中的 Render To Texture
  16. 【题解:洛谷4186||USACO18JAN Cow at Large G】
  17. MT6323详细芯片资料分享 MT6323设计原理图须知
  18. 书舟计划丨国鸿公益amp;MINI书箱漂流乡村公益行 为爱启程
  19. 北京休闲好去处 适合春游的地方
  20. JavaEE实现微博项目(含注册、登录、发表微博、评论微博、关注博主、阅读排行榜、评论排行榜等功能)

热门文章

  1. 针对小目标的目标增强算法
  2. 手机上pdf转换成word怎么转
  3. QT实现点击按钮,切换按钮图片
  4. 【Tensorflow教程笔记】常用模块 tf.train.Checkpoint :变量的保存与恢复
  5. buuctf:神秘的龙卷风
  6. QQ邮箱可以绑定自己的域名拉
  7. cloneNode(true)和cloneNode()的区别?(克隆节点)
  8. 南邮计算机学院院长肖甫,由我院牵头承担的国家自然科学基金重点项目启动会在三牌楼校区召开...
  9. 时代峰峻安利康师傅图片
  10. java中scheduler_Spring 中的Scheduler