Protect/freeze xslx 中图像的位置和大小 sheet 使用 apache POI
Protect/freeze the position and size of image in xslx sheet using apache POI
我正在使用 Apache POI 创建一个 xlsx 文件,其中在左上角插入了一个徽标。问题是,当单元格的大小增加时,图像也会扩展。如何冻结或保护图像的大小和位置,以便当单元格大小增加时,图像保持不变(不展开)。
以下是插入图片的代码。
rowNo = 1;
row = sheet.createRow(rowNo);
//For Adding sample Logo
addImage(1, 1, 3, 4, appPath + "/images/sample_logo.png");
public boolean addImage(int col1, int row1, int col2, int row2, String FileName) {
try {
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(FileName);
} catch (FileNotFoundException e) {
return false;
}
ByteArrayOutputStream imgBytes = new ByteArrayOutputStream();
int b;
try {
while ((b = fileInputStream.read()) != -1) {
imgBytes.write(b);
}
fileInputStream.close();
} catch (IOException e) {
return false;
}
sheet.addMergedRegion(new CellRangeAddress(row1, row2 - 1, col1, col2 - 1));
// sheet.addMergedRegion(new CellRangeAddress(1, 3, 1, 2));
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, col1, row1, col2, row2);
int index = workBook.addPicture(imgBytes.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG); //index = 4
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
patriarch.createPicture(anchor, index);
anchor.setAnchorType(2);
} catch (Exception ex) {
LOGGER.error(ex);
}
return true;
}
请帮帮我。
设置 Format Picture
- Size and Properties
- Don't move or size with cells
将使用 XSSFClientAnchor.setAnchorType set to ClientAnchor.AnchorType DONT_MOVE_AND_RESIZE
.
在 apache poi
中设置
示例:
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.util.IOUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.xssf.usermodel.*;
class CreateExcelPictures {
static String excelPath = "./ExcelWithLogo.xlsx";
static String appPath = "./";
static XSSFWorkbook workbook;
static XSSFSheet sheet;
static void addImage(int col1, int row1, int col2, int row2, String imageFileName, ClientAnchor.AnchorType anchorType) throws Exception {
InputStream imageInputStream = new FileInputStream(imageFileName);
byte[] bytes = IOUtils.toByteArray(imageInputStream);
int pictureId = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
imageInputStream .close();
XSSFClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
anchor.setAnchorType(anchorType);
anchor.setCol1(col1);
anchor.setRow1(row1);
anchor.setCol2(col2);
anchor.setRow2(row2);
XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFPicture picture = drawing.createPicture(anchor, pictureId);
}
public static void main(String args[]) throws Exception {
workbook = new XSSFWorkbook();
sheet = workbook.createSheet();
addImage(1, 1, 3, 4, appPath + "sample_logo.png", ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
FileOutputStream fos = new FileOutputStream(excelPath);
workbook.write(fos);
fos.close();
workbook.close();
}
}
之后锚定在 B4:C4
中的图片 sample_logo.png
将不会移动 and/or 通过更改单元格大小调整大小。
我正在使用 Apache POI 创建一个 xlsx 文件,其中在左上角插入了一个徽标。问题是,当单元格的大小增加时,图像也会扩展。如何冻结或保护图像的大小和位置,以便当单元格大小增加时,图像保持不变(不展开)。
以下是插入图片的代码。
rowNo = 1;
row = sheet.createRow(rowNo);
//For Adding sample Logo
addImage(1, 1, 3, 4, appPath + "/images/sample_logo.png");
public boolean addImage(int col1, int row1, int col2, int row2, String FileName) {
try {
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(FileName);
} catch (FileNotFoundException e) {
return false;
}
ByteArrayOutputStream imgBytes = new ByteArrayOutputStream();
int b;
try {
while ((b = fileInputStream.read()) != -1) {
imgBytes.write(b);
}
fileInputStream.close();
} catch (IOException e) {
return false;
}
sheet.addMergedRegion(new CellRangeAddress(row1, row2 - 1, col1, col2 - 1));
// sheet.addMergedRegion(new CellRangeAddress(1, 3, 1, 2));
XSSFClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, col1, row1, col2, row2);
int index = workBook.addPicture(imgBytes.toByteArray(), HSSFWorkbook.PICTURE_TYPE_JPEG); //index = 4
XSSFDrawing patriarch = sheet.createDrawingPatriarch();
patriarch.createPicture(anchor, index);
anchor.setAnchorType(2);
} catch (Exception ex) {
LOGGER.error(ex);
}
return true;
}
请帮帮我。
设置 Format Picture
- Size and Properties
- Don't move or size with cells
将使用 XSSFClientAnchor.setAnchorType set to ClientAnchor.AnchorType DONT_MOVE_AND_RESIZE
.
apache poi
中设置
示例:
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.util.IOUtils;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.ClientAnchor;
import org.apache.poi.xssf.usermodel.*;
class CreateExcelPictures {
static String excelPath = "./ExcelWithLogo.xlsx";
static String appPath = "./";
static XSSFWorkbook workbook;
static XSSFSheet sheet;
static void addImage(int col1, int row1, int col2, int row2, String imageFileName, ClientAnchor.AnchorType anchorType) throws Exception {
InputStream imageInputStream = new FileInputStream(imageFileName);
byte[] bytes = IOUtils.toByteArray(imageInputStream);
int pictureId = workbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
imageInputStream .close();
XSSFClientAnchor anchor = workbook.getCreationHelper().createClientAnchor();
anchor.setAnchorType(anchorType);
anchor.setCol1(col1);
anchor.setRow1(row1);
anchor.setCol2(col2);
anchor.setRow2(row2);
XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFPicture picture = drawing.createPicture(anchor, pictureId);
}
public static void main(String args[]) throws Exception {
workbook = new XSSFWorkbook();
sheet = workbook.createSheet();
addImage(1, 1, 3, 4, appPath + "sample_logo.png", ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
FileOutputStream fos = new FileOutputStream(excelPath);
workbook.write(fos);
fos.close();
workbook.close();
}
}
之后锚定在 B4:C4
中的图片 sample_logo.png
将不会移动 and/or 通过更改单元格大小调整大小。