码农知识堂 - 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位置就不起作用了。
  • 相关阅读:
    《进阶篇第8章:vuex》包括理解vuex、安装vuex、搭建vuex环境、四个map方法的使用、模块化+名命空间
    博客系统中的加盐算法
    宠物寄养小程序实战教程(上篇)
    【python】懒人福利,通过Python的JIRA库操作JIRA,自动批量提交关闭bug,提高效率
    MMDetection训练自己的数据集
    KALILINUX MSF中kiwi(mimikatz)模块的使用
    优化理论笔记
    ThreadLocal
    stm32F103移植FreeRTOS V10.2.1打印任务堆栈信息和任务运行时间统计
    周记-20220827
  • 原文地址:https://blog.csdn.net/weixin_38331049/article/details/127742127
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号