网上尝试了一些方案,这个最好用(用到了jar包是aspose-words-15.8.0-jdk16.jar)

jar附下载链接,链接: https://pan.baidu.com/s/1lwaHKw2AqsCKb_UnUoSFhg 提取码: rhku

话不多说,直接上代码(最下面main函数测试结果):

package com.util;import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageInputStream;
import com.aspose.words.Document;
import com.aspose.words.ImageSaveOptions;
import com.aspose.words.SaveFormat;public class OfficeUtils {/*** 验证aspose.word组件是否授权:无授权的文件有水印标记* 需要使用(aspose-words-15.8.0-jdk16.jar),版本要对应。无水印* @return*/public static boolean isWordLicense(){boolean result = false;try {String s = "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>";ByteArrayInputStream inputStream = new ByteArrayInputStream(s.getBytes());com.aspose.words.License license = new com.aspose.words.License();license.setLicense(inputStream);result = true;} catch (Exception e) {e.printStackTrace();}return result;}//outputStream转inputStreampublic static ByteArrayInputStream parse(OutputStream out) throws Exception{ByteArrayOutputStream baos = new ByteArrayOutputStream();baos = (ByteArrayOutputStream) out;ByteArrayInputStream swapStream = new ByteArrayInputStream(baos.toByteArray());return swapStream;}/*** word和txt文件转换图片* @param inputStream* @param* @return* @throws Exception*/private static List<BufferedImage> wordToImg(InputStream inputStream) throws Exception{if (!isWordLicense()){return null;}try {Date start = new Date();Document doc = new Document(inputStream);ImageSaveOptions options = new ImageSaveOptions(SaveFormat.PNG);options.setPrettyFormat(true);options.setUseAntiAliasing(true);options.setUseHighQualityRendering(true);int pageCount = doc.getPageCount();//生成前pageCount张,这可以限制输出长图时的页数(方法入参可以传值pageNum)/*if (pageCount > pageNum) {pageCount = pageNum;}*/List<BufferedImage> imageList = new ArrayList<BufferedImage>();for (int i = 0; i < pageCount; i++){OutputStream output = new ByteArrayOutputStream();options.setPageIndex(i);doc.save(output, options);ImageInputStream imageInputStream = javax.imageio.ImageIO.createImageInputStream(parse(output));imageList.add(javax.imageio.ImageIO.read(imageInputStream));}List<BufferedImage> imageList2 = new ArrayList<BufferedImage>();//这个重新生成新的图片是因为直接输出的图片底色为红色for(int j=0; j<imageList.size(); j++){// 生成新图片BufferedImage destImage = imageList.get(j);int w1 = destImage.getWidth();int h1 = destImage.getHeight();destImage = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_RGB);Graphics2D g2 = (Graphics2D) destImage.getGraphics();g2.setBackground(Color.LIGHT_GRAY);g2.clearRect(0, 0, w1, h1);g2.setPaint(Color.RED);// 从图片中读取RGBint[] ImageArrayOne = new int[w1 * h1];ImageArrayOne = imageList.get(j).getRGB(0, 0, w1, h1, ImageArrayOne, 0, w1); // 逐行扫描图像中各个像素的RGB到数组中destImage.setRGB(0, 0, w1, h1, ImageArrayOne, 0, w1); // 设置上半部分或左半部分的RGBimageList2.add(destImage);}Date end = new Date();long l=end.getTime()-start.getTime();long hour= l / (1000 * 60 * 60);long min=  (l-hour*(1000 * 60 * 60 ))/(1000* 60);long s= (l-hour*(1000 * 60 * 60 )-min*1000*60)/(1000);long ss= (l-hour*(1000 * 60 * 60 )-min*1000*60 -s*1000)/(1000/60);System.out.println("word转图片时间:"+min+"分"+s+"秒" + ss + "毫秒");//hour+"小时"+return imageList2;} catch (Exception e) {e.printStackTrace();throw e;}}/*** 合并任数量的图片成一张图片* @param isHorizontal true代表水平合并,fasle代表垂直合并* @param imgs 待合并的图片数组* @return* @throws IOException*/public static BufferedImage mergeImage(boolean isHorizontal, List<BufferedImage> imgs) throws IOException{// 生成新图片BufferedImage destImage = null;// 计算新图片的长和高int allw = 0, allh = 0, allwMax = 0, allhMax = 0;// 获取总长、总宽、最长、最宽for (int i = 0; i < imgs.size(); i++){BufferedImage img = imgs.get(i);allw += img.getWidth();if (imgs.size() != i + 1){allh += img.getHeight() + 5;} else {allh += img.getHeight();}if (img.getWidth() > allwMax){allwMax = img.getWidth();}if (img.getHeight() > allhMax){allhMax = img.getHeight();}}// 创建新图片if (isHorizontal){destImage = new BufferedImage(allw, allhMax, BufferedImage.TYPE_INT_RGB);} else {destImage = new BufferedImage(allwMax, allh, BufferedImage.TYPE_INT_RGB);}Graphics2D g2 = (Graphics2D) destImage.getGraphics();g2.setBackground(Color.LIGHT_GRAY);g2.clearRect(0, 0, allw, allh);g2.setPaint(Color.RED);// 合并所有子图片到新图片int wx = 0, wy = 0;for (int i = 0; i < imgs.size(); i++){BufferedImage img = imgs.get(i);int w1 = img.getWidth();int h1 = img.getHeight();// 从图片中读取RGBint[] ImageArrayOne = new int[w1 * h1];ImageArrayOne = img.getRGB(0, 0, w1, h1, ImageArrayOne, 0, w1); // 逐行扫描图像中各个像素的RGB到数组中if (isHorizontal) { // 水平方向合并destImage.setRGB(wx, 0, w1, h1, ImageArrayOne, 0, w1); // 设置上半部分或左半部分的RGB} else { // 垂直方向合并destImage.setRGB(0, wy, w1, h1, ImageArrayOne, 0, w1); // 设置上半部分或左半部分的RGB}wx += w1;wy += h1 + 5;}return destImage;}// 测试工具类public static void main(String[] args){//word转图片格式try {File file = new File("G:\\test\\test22.docx");InputStream inStream = new FileInputStream(file);List<BufferedImage> wordToImg = wordToImg(inStream);//for(int i=0; i<wordToImg.size(); i++){ //可以保存图片(每页保存为一张)//    ImageIO.write(wordToImg.get(i), "jpg", new File("G:\\test\\"+ i +".png")); //将其保存在C:/imageSort/targetPIC/下//}BufferedImage mergeImage = mergeImage(false, wordToImg);//保存图片(长图)ImageIO.write(mergeImage, "jpg", new File("G:\\test\\test.png"));} catch (Exception e) {e.printStackTrace();}}}

java word文件转图片相关推荐

  1. 【CTF】CTFHub------历年真题-暴力破解/word文件本质/图片修复/数据包分析一/滴答滴答/栅栏解救/磁盘恢复

    文章目录 历年真题 暴力破解 word文件本质 图片修复 好孩子看不见 数据包分析一 滴答滴答 栅栏解救 磁盘恢复 相关知识 CTF中常见的文件头和文件尾 历年真题 暴力破解 1.下载题目附件,发现加 ...

  2. 这篇文章教你把word文件转为图片

    把word文件转为图片,一下子是没法转成的,需要先转成pdf,再转成图片,就可以达到目的,话不多说,直接上代码 //先将word转成pdf并放在字节数组流里面FileInputStream fileI ...

  3. PHP将word文件转为图片之二

    0804记录安装php将Word转为pdf过程 一.安装宝塔 这一步就略过了 二.安装php相关扩展 Fileinfo Redis Mcrypt Imagemagick Exif 三.Linux安装需 ...

  4. java 在线给word 文件插入图片,并设置图片大小

    一.前言: 有时我们想在一篇word文档中的指定位置添加一张服务器上的图片,并且并且设置图片大小.这个对文档的操作一定是需要第三方api的.市面上对文档处理的插件有POI以及openoffice等等, ...

  5. PHP将word文件转为图片预览

    开发中遇到一个需求,需要在线预览word文件,在网上找到的解决方案有几种,在些做一下归类. 一.在线调用API接口直接预览 1.  微软的接口 https://view.officeapps.live ...

  6. java判断文件是否图片_java怎么判断文件是否是图片

    java判断文件是否是图片的方法: 1.通过判断文件后缀名String extension = ""; int i = fileName.lastIndexOf('.'); if ...

  7. java实现word文件转图片,支持分页

    项目有使用到,就做个记录,可直接使用以下工具类 前提pom文件需要引入相关的jar包 <!-- spire doc for java --><dependency><gr ...

  8. java word添加图片_JAVA编辑WORD文件插入图片

    展开全部 试试这个代码62616964757a686964616fe59b9ee7ad9431333431353936,需要添加spire.doc jar依赖import com.spire.doc. ...

  9. java ppt文件转图片,ppt转PDF

    先上图,有图有真相.本人亲测,可以通过 因为android没办法直接加载ppt文件,需要借助第三方的软件,比如office,这就涉及一个文件保密的问题,只能使用自己的软件加载,android 可以直接 ...

  10. java word excel ppt 图片转pdf

    第一步将jar导入mvn库 下载地址 0积分 https://download.csdn.net/download/qq_35908944/18549670 mvn install:install-f ...

最新文章

  1. OpenFeign的9个坑,每个都能让你的系统奔溃 OpenFeign
  2. 将客户端计算机加入域前建立计算机账户的必要性
  3. 基于Windows 2008 R2 Core的SQL Server 2008 R2 Cluster部署(Step by Step)
  4. MyBatis Generator:代码生成器
  5. python 相关系数_python如何计算相关系数与协方差
  6. bootstrap快速入门_在5分钟内学习Bootstrap 4-快速入门指南
  7. [文摘20071127]推销场上的十种失败的推销员
  8. ObjectDataProvider
  9. 严蔚敏数据结构习题第七章
  10. android程序无法安装,安卓手机安装不了软件怎么办 手机无法安装软件原因和方法...
  11. 维修电工技师技能实训考核装置QY-W05
  12. “单细胞”中研究APC/CCDH1失活调控细胞周期起始的分子机制
  13. 超声波测距模块工作原理
  14. 利用python,20行代码即可实现照片墙,还可以生成爱心形状哟
  15. dll修复精灵无法链接服务器,教你一键dll修复精灵怎么使用
  16. 高通平台开发系列讲解(AtCoP篇)AtCoP架构简介
  17. 最小二乘法(Ordinary Least Squares)
  18. IP协议协议--IP分片
  19. Ubuntu显示WiFi信号强度
  20. SCI和国自然标书的难度对比,谁更难?

热门文章

  1. 射频信号采集记录回放系统
  2. icon图标在线生成教程(svg转icon)
  3. 计算机在机械工程中的应用英语作文,关于机械工程英语作文
  4. 华为路由器配置备忘录
  5. spring cloud学习-什么是Spring Cloud Eureka?
  6. NOIP2016排名(919~1419)
  7. 2022福大数学建模赛题B题-主成分分析和单因素方差分析-附python代码
  8. 一定要计算机专业才能进华为吗,想去华为一定要报考这三所大学
  9. 高德地图 根据经纬度获取地理位置信息
  10. 破解使用radius实现802.1x认证的企业无线网络