码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • excel导出图片中的单位问题


    参考文档

    Java POI excel 操作之图片导出 - 掘金 (juejin.cn)
    POI精确设置Excel的行高和列宽 - dts - 博客园 (cnblogs.com)
    Apache POI - Component Overview
    [译]Points、inches和EMUs:Office Open XML中的度量单位 - 知乎 (zhihu.com)

    excel 各种单位介绍

    1英寸=72磅=25.4毫米=1440缇
    1 cm = 360000 EMUs
    emu 是一种虚拟单位,便于

    操作方案

    居中计算工具类

     ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
     String path = "D://1.jpg";
     BufferedImage image = ImageIO.read(new File(path));
     InputStream is = new FileInputStream(new File(path));
     byte[] bytes = IOUtils.toByteArray(is);
    
     XSSFWorkbook  wb = new XSSFWorkbook();
     XSSFSheet sheet = wb.createSheet("测试生成图片");
     sheet.setDefaultRowHeightInPoints(80);
     sheet.setColumnWidth(1,80*256);
    
     XSSFRow row = sheet.createRow(1);
     XSSFCell cell = row.createCell(1);
     int[] anchorArray = calCellAnchorCenter(row.getHeightInPoints(),sheet.getColumnWidth(1),image);)
     final XSSFDrawing drawing = sheet.createDrawingPatriarch();
     XSSFClientAnchor anchor = new XSSFClientAnchor(10,10,10,10, (short) 1, 1, (short) 2, 2);
     anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_DONT_RESIZE);
     drawing.createPicture(anchor, wb.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG));
     fileOut = new FileOutputStream("23.xlsx");
     // 写入excel文件
     wb.write(fileOut);
    static Integer PADDING = Units.toEMU(10);
     /**
       *
       * @param height 单位磅 就是getPointheight
       * @param width  单位字符
       * @param image  
       * @return
       */
      public static int[] calCellAnchorCenter(float height, int width, BufferedImage image) {
          int cellWidthEMU = Units.columnWidthToEMU(width);
          int cellHeightEMU = Units.TwipsToEMU((short) (height * 20));
          boolean flag = image.getHeight()>image.getWidth();
          int realHeightEMU = 0;
          int realWidthEMU = 0;
          // 判断那边先碰上
          if(flag){
              // 按高度放大
              realWidthEMU = (int) (1.0*(cellHeightEMU-2*PADDING)*image.getWidth()/image.getHeight());
              int x = (int) ((cellWidthEMU-realWidthEMU)/2.0);
              return new int[]{x,PADDING,-x,-PADDING};
          }else{
              realHeightEMU = (int) (1.0*(cellWidthEMU-2*PADDING)*image.getHeight()/image.getWidth());
              int y = (int) ((cellHeightEMU-realHeightEMU)/2.0);
              return new int[]{PADDING,y,-PADDING,-y};
          }
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    官网导出类

    地址

    常见问题

    1. XSSFClientAnchor 前四个参数单位是像素
    2. POINT_DPI 常见于打印机 PIXEL_DPI 常见于电脑
    3. resize是放大或缩小的函数。用了这个函数后,HSSFClientAnchor构造函数中的图片显示的终了cell位置就不起作用了。
  • 相关阅读:
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java攀枝花学院学生宿舍管理系统491bh
    使用Python优雅的绘制甘特图
    网络安全进阶学习第二十课——CTF之文件操作与隐写
    漫画:程序员要不要去考证?
    【Manim CE】常用Mobject与使用
    渗透测试学习day2
    如何通过Java应用程序创建Word表格
    2022年非一线IT行业就业前景?
    初识OpenGL (-)api(待扩展)
    使用 Docker-compose 搭建lnmp
  • 原文地址:https://blog.csdn.net/weixin_38331049/article/details/127742127
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号