CSDN话题挑战赛第2期
参赛话题:学习笔记

学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?
你可以从以下几个方面着手(不强制),或者根据自己对话题主题的理解创作,参考如下:

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. java中把map转换成list

    private String key;     private String value;          //把map转换成list的公共方法     public static List map ...

  2. java 父类强制转换为子类_[java]Java中父类强制转换成子类的原则

    Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用. 例: public class Test { public static void main(Str ...

  3. java中文转简拼_如何将java中的汉字转换成简拼

    有不少小伙伴们在使用java的时候会在想如何将java中的汉字转换成简拼呢?其实将java中的汉字转换成简拼是一件很简单的事情,那么下面我们就和爱站小编一起去学习学习吧. public static ...

  4. java中带符号十六进制转换成十进制详解

    java中带符号十六进制转换成十进制详解 代码如下 代码如下 必须拿ffff进行测试,否则测不出异同 public void test1(){String strHex="ffff" ...

  5. C#技术分享【Word转换成图片和PDF——2种方案】

    上个工作完成之后,老大接着又布置一个任务,要求把Word转成图片,这次时间没有那么充裕,所以也没有研究的很深入,只跟大家分享2个很容易实现的方法. [Aspose.Words]第三方破解插件:其功能无 ...

  6. java 将base64字符串转换成图片

    package kf.ats.gvnsvr.client.taizhou.common; import java.io.OutputStream; import sun.misc.BASE64Deco ...

  7. java中父类强制转换成子类的错觉

    引言:父类引用指向子类对象在java中十分常见,比如: Object object=new a();//a是一个类名 但是有时候我们看见子类引用指向了父类对象,就是上边的反过来,比如 图片中圈1标识的 ...

  8. Java中windows路径转换成linux路径等工具类

    项目中发现别人写好的操作系统相关的工具类: 我总结的类似相关博客:http://www.cnblogs.com/DreamDrive/p/4289860.html 1 import java.net. ...

  9. java中汉字自动转换成拼音

    刚刚做完这样一个功能: 这是页面上的一小部分,主要是给选择的课程添加英文名称(约定是课程拼音的首字母组合),以方便后面其他操作.这个文本框实现起来还是需要不少控制的,需要异步查询.异步添加.需要js控 ...

  10. 使用Java实现,PDF转换成图片(每一页保存为一张图片)

    基于maven项目 1.引入jar包 <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox --> <de ...

最新文章

  1. openoj的一个小比赛(F题解题报告)poj3978(dp+素数筛选)
  2. 微信支付android不弹出支付密码窗口,微信支付没弹出支付窗口
  3. Linux系统之时间管理
  4. 域名与转发服务器ip指向不一致_域名映射到家庭网络(无公网IP)
  5. CentOS 7安装GitLab、汉化、配置邮件发送
  6. 在微信浏览器中 location.reload() 不刷新解决方案(直接调用方法)
  7. this调用语句必须是构造函数中的第一个可执行语句_详解-JavaScript 的 this 指向和绑定...
  8. leetcode 384 打乱数组
  9. golang刷Leetcode系列 --- 实现strStr()
  10. c#读写apk的 comment
  11. span 居中_H5元素的水平垂直居中布局总结
  12. 软件项目管理大作业_《软件工程》软件项目管理实验
  13. APP渗透技巧----------逆向app破解数据包sign值实现任意数据重放添加
  14. 优启通制作系统u盘_如何用优启通制作U盘启动盘
  15. MIPS指令 MIPS架构
  16. 数据拟合(excel)
  17. php mysql 博客_基于PHP+MySQL的个人博客系统
  18. 【 rbx1翻译 第七章、控制移动基座】第八节、使用里程计进行往返运动
  19. WIN10企业版系统安装(KB12特供版:采用大白菜启动盘)
  20. 应届生如何准备校招,用我这一年的校招经历告诉你

热门文章

  1. WT2003HX语音芯片IC在儿童玩具产品的应用设计方案
  2. android 手机开门,智灵开门(智灵开门app)V5.0.2 安卓版
  3. 免费高效的WhatsApp助手
  4. 图片alt属性添加方法
  5. 小米笔记本装linux教程视频教程,手把手教你加装SSD,让小米笔记本运行更加666!...
  6. 电脑可以登微信但是登不上网页
  7. 2021南京扬子中学高考成绩查询,2021年南京高考各高中成绩及本科升学率数据排名及分析...
  8. NOIP2016普及组复赛全国一等奖名单及排名(续表_919~1419名)
  9. GameFi市值飙升,详解N.Fans目前的发展现状以及未来前景
  10. 软件测试面试题(面试前准备篇)