下面列出了org.apache.poi.ss.usermodel.Drawing#createPicture ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private void setImageValue(CellData cellData, Cell cell) {
Sheet sheet = cell.getSheet();
int index = sheet.getWorkbook().addPicture(cellData.getImageValue(), HSSFWorkbook.PICTURE_TYPE_PNG);
Drawing drawing = sheet.getDrawingPatriarch();
if (drawing == null) {
drawing = sheet.createDrawingPatriarch();
}
CreationHelper helper = sheet.getWorkbook().getCreationHelper();
ClientAnchor anchor = helper.createClientAnchor();
anchor.setDx1(0);
anchor.setDx2(0);
anchor.setDy1(0);
anchor.setDy2(0);
anchor.setCol1(cell.getColumnIndex());
anchor.setCol2(cell.getColumnIndex() + 1);
anchor.setRow1(cell.getRowIndex());
anchor.setRow2(cell.getRowIndex() + 1);
anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
drawing.createPicture(anchor, index);
}
@Test
public void test2() throws IOException {
//create a new workbook
XSSFWorkbook wb = new XSSFWorkbook(); //or new HSSFWorkbook();
String imgPath = "D:\\Xiaoi\\logo\\logo.png";
//add picture data to this workbook.
InputStream is = new FileInputStream(imgPath);
byte[] bytes = IOUtils.toByteArray(is);
int pictureIdx = wb.addPicture(bytes, XSSFWorkbook.PICTURE_TYPE_PNG);
is.close();
CreationHelper helper = wb.getCreationHelper();
//create sheet
Sheet sheet = wb.createSheet();
// Create the drawing patriarch. This is the top level container for all shapes.
Drawing drawing = sheet.createDrawingPatriarch();
//add a picture shape
ClientAnchor anchor = helper.createClientAnchor();
//set top-left corner of the picture,
//subsequent call of Picture#resize() will operate relative to it
anchor.setCol1(3);
anchor.setRow1(2);
anchor.setAnchorType(AnchorType.DONT_MOVE_AND_RESIZE);
Picture pict = drawing.createPicture(anchor, pictureIdx);
//auto-size picture relative to its top-left corner
pict.resize();
//save workbook
String file = "E:\\ConvertTester\\excel\\picture.xls";
if(wb instanceof XSSFWorkbook) file += "x";
try (OutputStream fileOut = new FileOutputStream(file)) {
wb.write(fileOut);
}
}
private void setImage(Td td, Sheet sheet) {
if (td.getFile() == null) {
return;
}
try {
if (createHelper == null) {
createHelper = workbook.getCreationHelper();
}
byte[] bytes = Files.readAllBytes(td.getFile().toPath());
String fileName = td.getFile().getName();
int format;
String suffix = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
switch (suffix) {
case "jpg":
case "jpeg":
format = Workbook.PICTURE_TYPE_JPEG;
break;
case "png":
format = Workbook.PICTURE_TYPE_PNG;
break;
case "dib":
format = Workbook.PICTURE_TYPE_DIB;
break;
case "emf":
format = Workbook.PICTURE_TYPE_EMF;
break;
case "pict":
format = Workbook.PICTURE_TYPE_PICT;
break;
case "wmf":
format = Workbook.PICTURE_TYPE_WMF;
break;
default:
throw new IllegalArgumentException("Invalid image type");
}
int pictureIdx = workbook.addPicture(bytes, format);
Drawing drawing = sheet.createDrawingPatriarch();
ClientAnchor anchor = createHelper.createClientAnchor();
anchor.setCol1(td.getCol());
anchor.setRow1(td.getRow());
Picture pict = drawing.createPicture(anchor, pictureIdx);
pict.resize(1, 1);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
/**
* 图片类型的Cell
*
* @param patriarch
*
* @param entity
* @param row
* @param i
* @param string
* @param obj
* @param workbook
* @throws Exception
*/
private static void createImageCell(Drawing patriarch,
ExcelExportEntity entity, Row row, int i, String field,
Object obj, Workbook workbook) throws Exception {
if(StringUtils.isEmpty(field)){return;}
row.setHeight((short) (50 * entity.getHeight()));
row.createCell(i);
ClientAnchor anchor = workbook instanceof HSSFWorkbook?
new HSSFClientAnchor(0, 0, 0, 0, (short) i,
row.getRowNum(), (short) (i + 1), row.getRowNum() + 1):
new XSSFClientAnchor(0, 0, 0, 0, (short) i,
row.getRowNum(), (short) (i + 1), row.getRowNum() + 1);
if (entity.getExportImageType() == 1) {
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
BufferedImage bufferImg;
try {
String path = ExcelExportOfTemplateUtil.class.getClassLoader()
.getResource("") + field;
path = path.replace("WEB-INF/classes/", "");
path = path.replace("file:/", "");
bufferImg = ImageIO.read(new File(path));
ImageIO.write(
bufferImg,
field.substring(field.indexOf(".") + 1,
field.length()), byteArrayOut);
patriarch.createPicture(
anchor,
row.getSheet()
.getWorkbook()
.addPicture(byteArrayOut.toByteArray(),
Workbook.PICTURE_TYPE_JPEG));
} catch (IOException e) {
e.printStackTrace();
}
} else {
byte[] value = (byte[]) (entity.getGetMethods() != null ? getFieldBySomeMethod(
entity.getGetMethods(), obj) : entity.getGetMethod()
.invoke(obj, new Object[] {}));
if (value != null) {
patriarch.createPicture(anchor, row.getSheet().getWorkbook()
.addPicture(value, Workbook.PICTURE_TYPE_JPEG));
}
}
}
/**
* <p>
* Process a CellImage from the images list and place the image on the sheet.
* </p><p>
* This involves changing the row height as necesssary and determining the column spread of the image.
* </p>
* @param cellImage
* The image to be placed on the sheet.
*/
private void processCellImage( HandlerState state, Drawing drawing, CellImage cellImage ) {
Coordinate location = cellImage.location;
Cell cell = state.currentSheet.getRow( location.getRow() ).getCell( location.getCol() );
IImageContent image = cellImage.image;
StyleManagerUtils smu = state.getSmu();
float ptHeight = cell.getRow().getHeightInPoints();
if( image.getHeight() != null ) {
ptHeight = smu.fontSizeInPoints( image.getHeight().toString() );
}
// Get image width
int endCol = cell.getColumnIndex();
double lastColWidth = ClientAnchorConversions.widthUnits2Millimetres( (short)state.currentSheet.getColumnWidth( endCol ) )
+ 2.0;
int dx = smu.anchorDxFromMM( lastColWidth, lastColWidth );
double mmWidth = 0.0;
if( smu.isAbsolute(image.getWidth())) {
mmWidth = image.getWidth().convertTo(DimensionType.UNITS_MM);
} else if(smu.isPixels(image.getWidth())) {
mmWidth = ClientAnchorConversions.pixels2Millimetres( image.getWidth().getMeasure() );
}
// Allow image to span multiple columns
CellRangeAddress mergedRegion = getMergedRegionBegunBy( state.currentSheet, location.getRow(), location.getCol() );
if( (cellImage.spanColumns) || ( mergedRegion != null ) ) {
log.debug( "Image size: ", image.getWidth(), " translates as mmWidth = ", mmWidth );
if( mmWidth > 0) {
double mmAccumulatedWidth = 0;
int endColLimit = cellImage.spanColumns ? 256 : mergedRegion.getLastColumn();
for( endCol = cell.getColumnIndex(); mmAccumulatedWidth < mmWidth && endCol < endColLimit; ++ endCol ) {
lastColWidth = ClientAnchorConversions.widthUnits2Millimetres( (short)state.currentSheet.getColumnWidth( endCol ) )
+ 2.0;
mmAccumulatedWidth += lastColWidth;
log.debug( "lastColWidth = ", lastColWidth, "; mmAccumulatedWidth = ", mmAccumulatedWidth);
}
if( mmAccumulatedWidth > mmWidth ) {
mmAccumulatedWidth -= lastColWidth;
--endCol;
double mmShort = mmWidth - mmAccumulatedWidth;
dx = smu.anchorDxFromMM( mmShort, lastColWidth );
}
}
} else {
float widthRatio = (float)(mmWidth / lastColWidth);
ptHeight = ptHeight / widthRatio;
}
int rowsSpanned = state.findRowsSpanned( cell.getRowIndex(), cell.getColumnIndex() );
float neededRowHeightPoints = ptHeight;
for( int i = 0; i < rowsSpanned; ++i ) {
int rowIndex = cell.getRowIndex() + 1 + i;
neededRowHeightPoints -= state.currentSheet.getRow(rowIndex).getHeightInPoints();
}
if( neededRowHeightPoints > cell.getRow().getHeightInPoints()) {
cell.getRow().setHeightInPoints( neededRowHeightPoints );
}
// ClientAnchor anchor = wb.getCreationHelper().createClientAnchor();
ClientAnchor anchor = state.getWb().getCreationHelper().createClientAnchor();
anchor.setCol1(cell.getColumnIndex());
anchor.setRow1(cell.getRowIndex());
anchor.setCol2(endCol);
anchor.setRow2(cell.getRowIndex() + rowsSpanned);
anchor.setDx2(dx);
anchor.setDy2( smu.anchorDyFromPoints( ptHeight, cell.getRow().getHeightInPoints() ) );
anchor.setAnchorType(ClientAnchor.MOVE_DONT_RESIZE);
drawing.createPicture(anchor, cellImage.imageIdx);
}