最近用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);

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

aspose words做插入压缩后图片到Word文档中

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

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就不一样了,是直接黑底的。

aspose words做插入压缩后图片到Word文档中

所以我需要再添加对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 words做插入压缩后图片到Word文档中

这样就可以了

aspose words做插入压缩后图片到Word文档中aspose words做插入压缩后图片到Word文档中

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

如有什么需要改进的地方,请大佬们指点一下Thanks♪(・ω・)ノ

相关文章:

  • 2021-07-23
  • 2021-07-22
  • 2021-12-28
  • 2022-12-23
  • 2022-12-23
  • 2021-12-02
  • 2022-12-23
  • 2021-11-23
猜你喜欢
  • 2021-04-25
  • 2021-12-15
  • 2022-12-23
  • 2021-11-28
  • 2021-12-15
  • 2021-10-12
相关资源
相似解决方案