2011-11-18 57 views
3

在我的應用程序中,我使用POI API生成Excel文件。文檔左上角的一個單元格包含圖像。我得到的問題是圖像被拉伸以填充保存它的單元格。使用POI在Excel中拉伸的圖像

根據我在Picture對象上使用哪種調整大小的方法,圖像以各種大小顯示,但它始終具有它所在的單元格的水平 - 垂直比例,換句話說,它不會保留它自己的比。

這是我的代碼:

titleRow = sheet.createRow(0); 
      titleRow.setHeightInPoints(25f); 

      titleRow.createCell(0); 

      sheet.getRow(0).getCell(0).setCellStyle(defaultTitleStyle(wb)); 

      WebApplicationContext webCtx = ((WebApplicationContext)AtlasApplicationUtils.getCurrentApplication().getContext()); 
      ServletContext sc = webCtx.getHttpSession().getServletContext(); 
      String contextPath = sc.getContextPath(); 
//   sc.getResourceAsStream(contextPath + "/VAADIN/themes/m2m/../m2m/img/gnd_logo_white.png") 
      String f = new File("").getAbsolutePath(); 
      InputStream is = new FileInputStream(System.getProperty("user.dir") + "/src/main/webapp/VAADIN/themes/m2m/img/gnd_logo_white.png"); 
      byte[] bytes = IOUtils.toByteArray(is); 
      int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG); 
      is.close(); 

      CreationHelper helper = wb.getCreationHelper(); 
      Drawing drawing = sheet.createDrawingPatriarch(); 
      ClientAnchor anchor = helper.createClientAnchor(); 

      anchor.setCol1(0); 
      anchor.setRow1(0); 
      sheet.autoSizeColumn(0); 
      Picture pict = drawing.createPicture(anchor, pictureIdx); 
      pict.getPreferredSize(); 
      pict.resize(0.25); 

的造型方法:

protected CellStyle defaultTitleStyle(final HSSFWorkbook wb) { 

     CellStyle style; 
     final Font titleFont = wb.createFont(); 


     titleFont.setFontHeightInPoints((short) 18); 
     titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD); 
     titleFont.setColor(IndexedColors.GREY_80_PERCENT.getIndex()); 

     style = wb.createCellStyle(); 
     style.setAlignment(CellStyle.ALIGN_CENTER); 
     style.setVerticalAlignment(CellStyle.VERTICAL_CENTER); 
     style.setFillForegroundColor(IndexedColors.BLUE_GREY.getIndex()); 
     style.setFillPattern(CellStyle.SOLID_FOREGROUND); 
//  style.setFillBackgroundColor(IndexedColors.BLUE_GREY.getIndex()); 
     style.setFont(titleFont); 

     HSSFPalette palette = wb.getCustomPalette(); 
     palette.setColorAtIndex(HSSFColor.BLUE_GREY.index, 
       (byte) 7, 
       (byte) 64, 
       (byte) 127); 

     palette.setColorAtIndex(HSSFColor.GREY_80_PERCENT.index, 
       (byte) 228, 
       (byte) 228, 
       (byte) 228); 


     return style; 

有誰知道的一種方式來避免這個問題,讓影像保持原有的比例是多少?

回答

5

documentation有一點警告。

空隙調整大小()

圖像復位到原來的大小。

請注意,此方法僅適用於默認字體大小爲 (Arial 10pt for .xls和Calibri 11pt for .xlsx)的工作簿。如果 的默認字體發生了變化,則調整大小後的圖像可以垂直或水平拉伸 。

+1

好吧,謝謝你的回答。一個問題,但你知道我是如何設置爲默認字體嗎?我試着刪除了我用過的所有字體規格,但沒有任何區別。 – AndroidHustle

0

我想你可以嘗試添加

anchor.setAnchorType(ClientAnchor.DONT_MOVE_AND_RESIZE);