2017-02-15 22 views
1

私はapache poi 3.15を使用して画像をExcelに挿入していますが、作業ファイルには境界線を追加したいのですが、を右クリック - >形式画像 - >塗りつぶし&ライン - >ライン - > MSオフィスの実線は、SOとApacheのドキュメントで多くを検索しましたが、poiを使用してこれを実現する方法がありません。私のコードJavaでapache poiを使って塗りつぶしと線でフォーマットする画像

private void drawImageOnExcelSheetForGLOS(XSSFSheet sitePhotosSheet, 
     int row1, int row2, int col1, int col2, String fileName) { 
    try { 

     InputStream is = new FileInputStream(fileName); 
     byte[] bytes = IOUtils.toByteArray(is); 
     int pictureIdx = sitePhotosSheet.getWorkbook().addPicture(bytes,Workbook.PICTURE_TYPE_JPEG); 
     is.close(); 
     CreationHelper helper = sitePhotosSheet.getWorkbook().getCreationHelper(); 

     // Create the drawing patriarch. This is the top level container for 
     // all shapes. 
     Drawing drawing = sitePhotosSheet.createDrawingPatriarch(); 

     // add a picture shape 
     ClientAnchor anchor = helper.createClientAnchor(); 
     anchor.setAnchorType(ClientAnchor.MOVE_AND_RESIZE); 


     // set top-left corner of the picture, 
     // subsequent call of Picture#resize() will operate relative to it 
     anchor.setCol1(col1); 
     anchor.setCol2(col2); 
     anchor.setRow1(row1); 
     anchor.setRow2(row2); 

     drawing.createPicture(anchor, pictureIdx); 

    } catch(Exception e) { 
    } 
} 

以下の私はXSSFSimpleShapeを使用した画像の周りに線を描画することができていますが、それは私がまさに望んでいたともsetBorderXXX(としようとしたものではありません)が、これらの境界線や行がMSを使用して設定するときのように画像を移動しませんオフィス。私が取得し、第二、私は次のようにこれはXSSFPictureのsetLineXXX()メソッドを使用することによって達成することができ enter image description here

+2

'drawing.createPicture(アンカー、pictureIdx) ; 'はvoidメソッドではありません。 [XSSFPicture](https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFPicture.html)を返します。これは[XSSFShape](https://poi.apache.org/apidocs/org/apache/poi/xssf/usermodel/XSSFShape.html)を拡張し、いくつかの 'setLine ...'メソッドを継承します。あなたはそれらの方法を使って試しましたか? –

答えて

3

をしたいかを示しています何 最初のイメージのショー、

private void drawImageOnExcelSheetForGLOS(XSSFSheet sitePhotosSheet, 
     int row1, int row2, int col1, int col2, String fileName) { 
    try { 

     InputStream is = new FileInputStream(fileName); 
     byte[] bytes = IOUtils.toByteArray(is); 
     int pictureIdx = sitePhotosSheet.getWorkbook().addPicture(bytes,Workbook.PICTURE_TYPE_JPEG); 
     is.close(); 
     CreationHelper helper = sitePhotosSheet.getWorkbook().getCreationHelper(); 

     XSSFDrawing drawing = sitePhotosSheet.createDrawingPatriarch(); 

     ClientAnchor anchor = helper.createClientAnchor(); 
     anchor.setAnchorType(ClientAnchor.MOVE_AND_RESIZE); 

     anchor.setCol1(col1); 
     anchor.setCol2(col2); 
     anchor.setRow1(row1); 
     anchor.setRow2(row2); 

     // setLineXXX() methods can be used to set line border to image 
     XSSFPicture pic = drawing.createPicture(anchor, pictureIdx); 
     // 0 indicates solid line 
     pic.setLineStyle(0); 
     // rgb color code for black line 
     pic.setLineStyleColor(0, 0, 0); 
     // double number for line width 
     pic.setLineWidth(1.5); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 
関連する問題