最近用aspose words做导出Word的功能,发现图片的导出有点难受,一开始是这样写的

 Document doc = new Document("D:\\Template.docx");
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
 
String imagePath = "D:\\employees.jpg";
//读取一个二进制图片 
FileInputStream fis = new FileInputStream(imagePath);
byte[] image = new byte[fis.available()];
fis.read(image);
fis.close();
record.put("PhotoBLOB", image); dataList.add(record);

这样写没错,就是待会会因为图片的大小而把表格撑开

​​

就是这样,所以,我们需要把图片压缩到我们想要的结果后再导出来

 String a = Global.getConfig("vfs.pr") + MapUtils.getString(map, "NEWFILESPATH");
File f = new File(a);
String newjpg = Global.getConfig("vfs.pr") + System.currentTimeMillis() + "." + f.getName().substring(f.getName().lastIndexOf(".") + 1);
FileOutputStream out = new FileOutputStream(newjpg);
thumbnail(f, out);//压缩图片的函数
out.close();
FileInputStream fileInputStream = new FileInputStream(newjpg);
byte[] image = new byte[fileInputStream.available()];
fileInputStream.read(image);
fileInputStream.close();
record.put("FILESPATH", image);
  /**
* 按照固定宽高原图压缩
*
* @param img
* @param out
* @throws IOException
*/
public static void thumbnail(File img, OutputStream out) throws IOException {
BufferedImage BI = ImageIO.read(img);
int width = 95;
int height = 65;
//文件后缀名
String a = img.getName().substring(img.getName().lastIndexOf(".") + 1);
Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH);
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); // 绘制处理后的图
g.dispose();
ImageIO.write(tag, a, out);
}

这样图片就会按照95, 65的场合宽压缩出来了,不过到这里需要注意的是,在这里图片后缀是jpg压缩出来顶多一般就是失真问题,png就不一样了,是直接黑底的。

所以我需要再添加对png图片的处理

  /**
* 按照固定宽高原图压缩
*
* @param img
* @param out
* @throws IOException
*/
public static void thumbnail(File img, OutputStream out) throws IOException {
BufferedImage BI = ImageIO.read(img);
int width = 95;
int height = 65;
//文件后缀名
String a = img.getName().substring(img.getName().lastIndexOf(".") + 1);
if (a.equalsIgnoreCase("jpg")) {
Image image = BI.getScaledInstance(width, height, Image.SCALE_SMOOTH);
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = tag.getGraphics();
g.drawImage(image, 0, 0, null); // 绘制处理后的图
g.dispose();
ImageIO.write(tag, a, out);
}
//对png的读取压缩
else if (a.equalsIgnoreCase("png")) {
BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = tag.createGraphics();
tag = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);
g2d.dispose();
g2d = tag.createGraphics();
Image image = BI.getScaledInstance(width, height, BI.SCALE_AREA_AVERAGING);
g2d.drawImage(image, 0, 0, null); // 绘制处理后的图
g2d.dispose();
ImageIO.write(tag, a, out);
}
}

这样就可以了

我前面有发过对aspose word导出word的简单介绍,可以结合这个和那篇一起了解。

简单介绍aspose-words-18.10-jdk16做导出word ,链接:

https://www.cnblogs.com/a874699615/p/10161842.html

csdn博客链接:

https://blog.csdn.net/qq_32003379/article/details/85255127

aspose words做插入压缩后图片到Word文档中的更多相关文章

  1. C# Word文档中插入、提取图片,文字替换图片

    Download Files:ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操作.图像会比阅读文字更有吸引力,而且图像是 ...

  2. aspose.words复制插入同一word文档中的某个页面

    选择word模板 Document doc = new Document(Server.MapPath("~\\templet") + "\\" + name. ...

  3. freemarker导出带图片的word文档

    最近做一个关于文档导出功能, 顺便学习了下freemarker,做了个关于导出带图片的word文档,模板并没有写全,只是验证代码的正确性 这只是做一个小功能,故只做了后台代码关于导出的代码,并未与前台 ...

  4. 在word文档中如何插入Mathtype公式

    将mathtype公式插入到word文档中,是mathtype公式编辑器最基本的操作.当在Mathtype数学公式编辑器中编辑好公式之后,点击文件->更新XXX文档(XXX为当前编辑的word文 ...

  5. PDFtoWORD_V1.1版本支持PDF文档中的文字和图片一起转化到word文档中了~

    ​    昨天菜鸟小白做了一个小软件——PDFtoWORD,作用就是将pdf文件中的文字提取出来自动转化为可编辑的word类型.但是这个软件目前也只能将文件PDF中的文字提取出来,还无法提取图片.为了 ...

  6. Aspose.Words:如何添加另一个WORD文档中的Node对象

    原文:Aspose.Words:如何添加另一个WORD文档中的Node对象 首先看一段代码,这段代码意图从docSource中获取第一个表格,并插入docTarget的末尾: , true); doc ...

  7. java 在MySQL中存储文件,读取文件(包括图片,word文档,excel表格,ppt,zip文件等)

    转自:https://blog.csdn.net/u014475796/article/details/49893261 在设计到数据库的开发中,难免要将图片或文档文件(如word)插入到数据库中的情 ...

  8. C#/VB.NET 在Word文档中插入分页符

    分页符是分页的一种符号,上一页结束以及下一页开始的位置.通查用于在指定位置强制分页.本文将分为两部分来介绍如何在Word文档中插入分页符.并附上C#/VB.NET以供参考,详情请阅读以下内容. 在特定 ...

  9. C# 提取Word文档中的图片

    C# 提取Word文档中的图片 图片和文字是word文档中两种最常见的对象,在微软word中,如果我们想要提取出一个文档内的图片,只需要右击图片选择另存为然后命名保存就可以了,今天这篇文章主要是实现使 ...

随机推荐

  1. 原生态js单个点击展开收缩

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. centos有两个版本的apache

    service服务链接更新 cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd

  3. [ActionScript 3.0] 动态链接库

    很多时候,我们为了项目和程序结构更加清晰,需要将发布好的swf放到一个固定的地方供主文件引用,这时就会出现发布好的swf所用的as类路径发生改变,为避免这个问题,需要用到动态链接库,以下做一个简单例子 ...

  4. [Swift实际操作]八、实用进阶-(4)通过protocol在两个对象中进行消息传递

    本文将演示如何借助协议,实现视图控制器对象和其内部的自定义视图对象之间的数据传递. 首先创建一个自定义视图对象.在项目名称文件夹点击鼠标右键New File ->Cocoa Touch Clas ...

  5. Arch下error: signature from "NAME<EMAIL ADD>"

    pacman的unknown trust问题错误消息类似于:error: signature from "NAME<EMAIL ADD>" is unknown tru ...

  6. springboot 搭建 简单 web项目 【springboot + freemark模板 + yml 配置文件 + 热修复 + 测试用例】附源码

    项目 地址:  https://gitee.com/sanmubird/springboot-simpleweb.git 项目介绍: 本项目主要有一下内容: 1: springboot yml 配置 ...

  7. js中一切都是对象

    <script> function cat(){} var cat = new cat(); console.log(cat.constructor) console.log(typeof ...

  8. 基础篇:3.2)规范化:3d零件建模

    本章目的:规范化零件建模,这是机械的基本功夫. 1.建模的总体原则和总体要求 1.1 建模总体原则 a)零件模型应能准确表达零件的设计信息:b)零件模型包含零件的几何要素.约束要素和工程要素:c)零件 ...

  9. ios模拟器安装测试包方法

    1. 使用ios-sim ios-sim是一个可以用命令空着ios模拟器的工具.利用这个命令,我们可以启动模拟器.安装app.启动app.查询ios sdk,它可以使我们像自动化测试一样打开xcode ...

  10. PIE SDK影像坏线修复

    1.算法功能简介 坏条带的由来:2003年5月31日,Landsat-7ETM+机载扫描行校正器(SLC) 故障,导致此后获取的影像出现了数据条带丢失,严重影响了Landsat ETM遥感影像的使用. ...