Commit 80a47e5121c8ade7be15e3b1389bc7ab59847c1d

Authored by 杨鸣坤
1 parent f02036f9

楚江ERP:规格展示优化

... ... @@ -13,6 +13,7 @@ import javax.swing.*;
13 13 import java.awt.*;
14 14 import java.awt.Color;
15 15 import java.awt.image.BufferedImage;
  16 +import java.io.ByteArrayInputStream;
16 17 import java.io.ByteArrayOutputStream;
17 18 import java.io.IOException;
18 19 import java.math.BigDecimal;
... ... @@ -138,34 +139,51 @@ public class LatexFormulaExcelExporterUtil {
138 139 * 将LaTeX公式作为图片插入到指定单元格
139 140 */
140 141 public static void insertLatexImageToCell(Workbook workbook, Sheet sheet, String latex, int rowIndex, int colIndex) throws IOException {
141   - // 1. 将LaTeX渲染为图片字节
  142 + // 设置固定30像素行高
  143 + Row row = sheet.getRow(rowIndex);
  144 + if (row == null) {
  145 + row = sheet.createRow(rowIndex);
  146 + }
  147 +
  148 + row.setHeightInPoints(22.5f); // 30像素
  149 +
142 150 byte[] imageBytes = latexToImageBytes(latex, 48);
  151 + ByteArrayInputStream bais = new ByteArrayInputStream(imageBytes);
  152 + BufferedImage image = ImageIO.read(bais);
  153 + bais.close();
  154 +
  155 + // 如果图片高度超过30像素,按比例缩小
  156 + double scale = 1.0;
  157 + if (image.getHeight() > 30) {
  158 + scale = 30.0 / image.getHeight();
  159 + System.out.println("图片需要缩放: " + scale);
  160 + }
143 161
144   - // 2. 将图片添加到工作簿
145 162 int pictureIdx = workbook.addPicture(imageBytes, Workbook.PICTURE_TYPE_PNG);
146   -
147   - // 3. 创建绘图对象
148 163 Drawing<?> drawing = sheet.createDrawingPatriarch();
149 164
150   - // 4. 创建锚点,确定图片位置
151 165 ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
152   - anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
153   - anchor.setCol1(colIndex); // C列 (从0开始计数)
154   - anchor.setRow1(rowIndex); // 当前数据行 (表头在第0行)
155   - anchor.setCol2(colIndex + 1); // 结束于D列
156   - anchor.setRow2(rowIndex + 1); // 结束于下一行
157   -
158   - // 设置较小的起始偏移
159   - anchor.setDx1(50); // 水平偏移(建议值:10-100)
160   - anchor.setDy1(25); // 垂直偏移(建议值:10-50)
  166 + anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_DONT_RESIZE);
  167 +
  168 + anchor.setCol1(colIndex);
  169 + anchor.setRow1(rowIndex);
  170 + anchor.setCol2(colIndex);
  171 + anchor.setRow2(rowIndex);
  172 +
  173 + int scaledWidth = (int) (image.getWidth() * scale);
  174 + int rate = 1;
  175 + if (scaledWidth >= 60 && scaledWidth <= 150) {
  176 + rate = 2;
  177 + } else if (scaledWidth > 150) {
  178 + rate = 3;
  179 + }
161 180
  181 + anchor.setDx1(25);
  182 + anchor.setDy1(25);
  183 + anchor.setDx2(330 * rate);
  184 + anchor.setDy2(235);
162 185
163   - // 5. 创建图片并插入
164   - Picture pict = drawing.createPicture(anchor, pictureIdx);
165   -
166   - // 6. 自动调整图片大小以适应单元格 (可选)
167   - // 取消注释此行使图片自动适应锚点区域
168   -// pict.resize(0.95); // 缩小到90%,自然产生边距
  186 + drawing.createPicture(anchor, pictureIdx);
169 187 }
170 188
171 189 /**
... ...