Commit 1e7edc13 authored by fangxinjiang's avatar fangxinjiang

excel to image -fxj

parent 34f652a7
...@@ -632,4 +632,6 @@ public interface CommonConstants { ...@@ -632,4 +632,6 @@ public interface CommonConstants {
List<String> socialInfoStatus = Stream.of("1","3","5","7").collect(Collectors.toList()); List<String> socialInfoStatus = Stream.of("1","3","5","7").collect(Collectors.toList());
String USER_DIR = "user.dir";
String DOUBLE_LINE = "//";
} }
...@@ -153,4 +153,12 @@ public class SocialHandleSearchVo extends TDispatchInfo { ...@@ -153,4 +153,12 @@ public class SocialHandleSearchVo extends TDispatchInfo {
@Schema(description ="社保ID") @Schema(description ="社保ID")
@ExcelIgnore @ExcelIgnore
private String socialId; private String socialId;
/**
* 税友自动化办理,此标识区分于页面的导出功能,值为1 时 默认取值派单审核通过 且 未办理的派单数据
*/
@ExcelAttribute(name = "税友自动化办理")
@ExcelIgnore
@Schema(description = "税友自动化办理")
private String syFlag;
} }
...@@ -99,22 +99,7 @@ ...@@ -99,22 +99,7 @@
<version>1.0.0</version> <version>1.0.0</version>
</dependency> </dependency>
<!-- Apache POI --> <!-- excel to image -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.12.0</version>
</dependency>
<dependency> <dependency>
<groupId>spire.xls</groupId> <groupId>spire.xls</groupId>
<artifactId>spire.xls</artifactId> <artifactId>spire.xls</artifactId>
......
package com.yifu.cloud.plus.v1.yifu.social.util; package com.yifu.cloud.plus.v1.yifu.social.util;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.compress.utils.IOUtils; import org.apache.commons.compress.utils.IOUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.imageio.ImageIO; import java.io.FileInputStream;
import java.awt.Color; import java.io.FileOutputStream;
import java.awt.*; import java.io.IOException;
import java.awt.image.BufferedImage; import java.io.InputStream;
import java.io.*;
/** /**
* @Author fxj * @Author fxj
...@@ -18,74 +18,10 @@ import java.io.*; ...@@ -18,74 +18,10 @@ import java.io.*;
* @Description * @Description
* @Version 1.0 * @Version 1.0
*/ */
@Log4j2
@Component @Component
public class ExcelMergeImage { public class ExcelMergeImage {
public static void main(String[] args) throws IOException {
String excelFilePath = "E:\\test\\11\\1.xls";
String imageFilePath = "E:\\test\\11\\1.png";
//convertExcelToImage(excelFilePath, imageFilePath);
//stampAdder();
}
public static void convertExcelToImage(String excelFilePath, String imageFilePath) throws IOException {
FileInputStream fis = new FileInputStream(new File(excelFilePath));
Workbook workbook;
if (excelFilePath.endsWith(".xls")) {
workbook = new HSSFWorkbook(fis); // For Excel 97-2003 (.xls) format
} else if (excelFilePath.endsWith(".xlsx")) {
workbook = new XSSFWorkbook(fis); // For Excel 2007 and later (.xlsx) format
} else {
throw new IllegalArgumentException("Unsupported file type");
}
Sheet sheet = workbook.getSheetAt(0);
int rowCount = 16; //sheet.getPhysicalNumberOfRows();
int colCount = 25;//sheet.getRow(0).getPhysicalNumberOfCells();
BufferedImage image = new BufferedImage(896, 424, BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = image.createGraphics();
for (int i = 0; i < rowCount; i++) {
Row row = sheet.getRow(i);
for (int j = 0; j < colCount; j++) {
Cell cell = row.getCell(j);
if (cell != null) {
graphics.fillRect(j*150, i*47, 896, 424);
graphics.setColor(Color.black); // 设置边框颜色
graphics.drawRect(j*150, i*47, 896, 424);
String cellValue = getCellValueAsString(cell);
graphics.drawString(cellValue, j * 150+10, i * 45+30);
}
}
}
graphics.dispose();
ImageIO.write(image, "png", new File(imageFilePath));
workbook.close();
fis.close();
}
private static String getCellValueAsString(Cell cell) {
String cellValue = "";
if (cell != null) {
switch (cell.getCellType()) {
case STRING:
cellValue = cell.getStringCellValue();
break;
case NUMERIC:
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
case FORMULA:
cellValue = cell.getCellFormula();
break;
default:
cellValue = "";
}
}
return cellValue;
}
/** /**
* @Author fxj * @Author fxj
* @Description 03格式excel添加电子印章或图片 * @Description 03格式excel添加电子印章或图片
...@@ -93,10 +29,10 @@ public class ExcelMergeImage { ...@@ -93,10 +29,10 @@ public class ExcelMergeImage {
* @Param * @Param
* @return * @return
**/ **/
public FileOutputStream addPictureToExcel(FileInputStream fis, public void addPictureToExcel(FileInputStream fis,
InputStream imageIs, InputStream imageIs,
FileOutputStream fileOut, FileOutputStream fileOut,
int SheetNum){ int SheetNum,String type){
Workbook workbook = null; Workbook workbook = null;
try { try {
workbook = new HSSFWorkbook(fis); workbook = new HSSFWorkbook(fis);
...@@ -107,14 +43,24 @@ public class ExcelMergeImage { ...@@ -107,14 +43,24 @@ public class ExcelMergeImage {
ClientAnchor anchor = helper.createClientAnchor(); ClientAnchor anchor = helper.createClientAnchor();
anchor.setCol1(2); anchor.setCol1(2);
anchor.setRow1(0); anchor.setRow1(0);
// 按花名册类型特殊处理对应印章的效果
if (CommonConstants.TWO_STRING.equals(type)){
anchor.setCol2(5);
anchor.setRow2(6);
}else if (CommonConstants.FOUR_STRING.equals(type) || CommonConstants.THREE_STRING.equals(type)){
anchor.setCol2(5);
anchor.setRow2(8);
}else {
anchor.setCol2(4); anchor.setCol2(4);
anchor.setRow2(7); anchor.setRow2(7);
}
// 添加印章图片 // 添加印章图片
int pictureIdx = workbook.addPicture(IOUtils.toByteArray(imageIs), Workbook.PICTURE_TYPE_PNG); int pictureIdx = workbook.addPicture(IOUtils.toByteArray(imageIs), Workbook.PICTURE_TYPE_PNG);
drawing.createPicture(anchor, pictureIdx); drawing.createPicture(anchor, pictureIdx);
workbook.write(fileOut); workbook.write(fileOut);
}catch (Exception e){ }catch (Exception e){
e.printStackTrace(); log.error("excel插入电子印章异常:{}",e.getMessage());
}finally { }finally {
try { try {
if (null != fis){ if (null != fis){
...@@ -123,10 +69,15 @@ public class ExcelMergeImage { ...@@ -123,10 +69,15 @@ public class ExcelMergeImage {
if (null != workbook){ if (null != workbook){
workbook.close(); workbook.close();
} }
if (null != imageIs){
imageIs.close();
}
if (null != fileOut){
fileOut.close();
}
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
return fileOut;
} }
} }
...@@ -6,9 +6,11 @@ import com.spire.xls.Worksheet; ...@@ -6,9 +6,11 @@ import com.spire.xls.Worksheet;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.OSSUtil; import com.yifu.cloud.plus.v1.yifu.common.core.util.OSSUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import groovyjarjarpicocli.CommandLine;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URL; import java.net.URL;
...@@ -22,7 +24,10 @@ import java.net.URL; ...@@ -22,7 +24,10 @@ import java.net.URL;
public class ExcelToImage { public class ExcelToImage {
public R<URL> excelToImg(InputStream inputStream ,OSSUtil ossUtil){ public R<URL> excelToImg(InputStream inputStream ,OSSUtil ossUtil){
String projectRoot = System.getProperty("user.dir"); if (null == inputStream || null == ossUtil){
return R.failed(CommonConstants.RESULT_DATA_FAIL+":带印章excel生成图片传参异常");
}
String projectRoot = System.getProperty(CommonConstants.USER_DIR);
//加载Excel工作表 //加载Excel工作表
Workbook wb = new Workbook(); Workbook wb = new Workbook();
wb.loadFromHtml(inputStream); wb.loadFromHtml(inputStream);
...@@ -42,12 +47,18 @@ public class ExcelToImage { ...@@ -42,12 +47,18 @@ public class ExcelToImage {
} }
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
return R.failed(CommonConstants.RESULT_DATA_FAIL+":ExcelToImage转换异常-"+e.getMessage()); return R.failed(CommonConstants.RESULT_DATA_FAIL+":ExcelToImage转换异常-"+e.getMessage());
} finally { } finally {
if (file.exists()){ if (file.exists()){
file.delete(); file.delete();
} }
if (null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} }
return R.failed(CommonConstants.RESULT_DATA_FAIL); return R.failed(CommonConstants.RESULT_DATA_FAIL);
//调用方法,将指定Excel单元格数据范围保存为图片 //调用方法,将指定Excel单元格数据范围保存为图片
......
...@@ -2260,10 +2260,12 @@ ...@@ -2260,10 +2260,12 @@
a.DELETE_FLAG = 0 a.DELETE_FLAG = 0
AND a.social_id is not null AND a.social_id is not null
<if test='tDispatchInfo.socialId != null and tDispatchInfo.socialId.trim() == "0" '> <if test="tDispatchInfo.socialId != null and tDispatchInfo.socialId.trim() != ''">
AND a.social_id = #{tDispatchInfo.socialId} AND a.SOCIAL_ID = #{tDispatchInfo.socialId}
</if>
<if test="tDispatchInfo.syFlag != null and tDispatchInfo.syFlag.trim() == '1'">
AND a.STATUS = '2'
</if> </if>
<!-- dispatch-status 未提交1待审核2审核通过3审核不通过4办理完成5待SSC审核 --> <!-- dispatch-status 未提交1待审核2审核通过3审核不通过4办理完成5待SSC审核 -->
<if test='tDispatchInfo.auditStatus != null and tDispatchInfo.auditStatus.trim() == "0" '> <if test='tDispatchInfo.auditStatus != null and tDispatchInfo.auditStatus.trim() == "0" '>
AND a.STATUS in ('2','4') AND a.STATUS in ('2','4')
...@@ -2360,9 +2362,13 @@ ...@@ -2360,9 +2362,13 @@
<sql id="where_getSocialPersionDisRecord"> <sql id="where_getSocialPersionDisRecord">
a.DELETE_FLAG = 0 a.DELETE_FLAG = 0
AND a.social_id is not null AND a.social_id is not null
<if test='tDispatchInfo.socialId != null and tDispatchInfo.socialId.trim() == "0" '> <if test="tDispatchInfo.socialId != null and tDispatchInfo.socialId.trim() != ''">
AND a.social_id = #{tDispatchInfo.socialId} AND a.SOCIAL_ID = #{tDispatchInfo.socialId}
</if> </if>
<if test="tDispatchInfo.syFlag != null and tDispatchInfo.syFlag.trim() == '1'">
AND a.STATUS = '2'
</if>
<!-- dispatch-status 未提交1待审核2审核通过3审核不通过4办理完成5待SSC审核 --> <!-- dispatch-status 未提交1待审核2审核通过3审核不通过4办理完成5待SSC审核 -->
<if test='tDispatchInfo.auditStatus != null and tDispatchInfo.auditStatus.trim() == "0"'> <if test='tDispatchInfo.auditStatus != null and tDispatchInfo.auditStatus.trim() == "0"'>
AND a.STATUS in ('2','4') AND a.STATUS in ('2','4')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment