2009-04-17 144 views
4

POIのバージョンの使用3.2POI 3.2画像の高さ/幅の制御

問題:元の高さと幅に画像のサイズを変更できません。 イメージをExcelファイルに追加できます。

イメージを追加した後、私はpicture.resize()を呼び出します。方法。

後で sheet.setColumnWidth(columnindex、columnwidth) を呼び出すと、Excelファイルの列のサイズが変更され、画像の元の高さ/幅が失われます。

助けてください。

答えて

0

あなたはsetcolumnwidth()の処理が完了した後、画像オブジェクトを保持してresize()を最後まで呼び出してはいけませんか?

9

画像が固定されている列にautoSizeColumn(i)を呼び出していない場合でも、sheet.autoSizeColumn(i)の後になるまで、picture.resize()に電話しないでください。

私は右の次元で表示されるロゴを取得するには、以下のなかったカスタムフォントとHSSFWorkbookで
4

私が欲しかったピクセルサイズにLOGO_HEIGHT ...とLOGO_WIDTH ..を設定
CreationHelper helper = wb.getCreationHelper(); 
Drawing drawing = sheet.createDrawingPatriarch(); 
ClientAnchor anchor = helper.createClientAnchor(); 
anchor.setDx1(LOGO_MARGIN * XSSFShape.EMU_PER_PIXEL); 
anchor.setDx2(LOGO_WIDTH_IN_FUNNY_POI_FORMAT * XSSFShape.EMU_PER_PIXEL); 
anchor.setDy1(LOGO_MARGIN * XSSFShape.EMU_PER_PIXEL); 
anchor.setDy2(LOGO_HEIGHT_IN_FUNNY_POI_FORMAT * XSSFShape.EMU_PER_PIXEL); 
drawing.createPicture(anchor, pictureIndex); 

画像の

結果の画像は元の比率ではなく、予想されるピクセルサイズではありませんでした。 私は予想されるサイズ/現在のサイズの比率を使用し、それに応じてLOGO_WIDTH ..とLOGO_HEIGHT ..を調整しました。美しくはありませんが動作します。/

その後、Picture.resize()に電話しないでください。

Apache POIU Bug 52504またはthis newsgroup discussion about poi Picture.resize()およびPOI quick guide for inserting picturesを参照してください。

更新:現在のコードは次のようになり、元の画像は2000x450です:

LOGO_MARGIN = 2; 
int index = getLogoPictureIndex(); 
CreationHelper helper = this.wb.getCreationHelper(); 

Drawing drawing = this.sheet.createDrawingPatriarch(); 
ClientAnchor anchor = helper.createClientAnchor(); 

anchor.setDx1(LOGO_MARGIN * XSSFShape.EMU_PER_PIXEL); 
anchor.setDy1(LOGO_MARGIN * XSSFShape.EMU_PER_PIXEL); 

Picture pic = drawing.createPicture(anchor, index); 
pic.resize(0.064); 
+0

こんにちは、私は私はここで幾分似たような問題があると思う:http://stackoverflow.com/questions/28298947/npoi-images-created-in-foreach-loop-not-resizing-correctlyそしてあなたの "LOGO_MARGIN"と特に "IN_FUNNY_POI_FORMAT" - 部分を意味します。ドミニク – Dominik

+0

@Dominik質問を見つけることができませんでしたが、現在使用されているコードを追加しました。LOGO_MARGIN = 2を使用し、後でpic.resizeを呼び出します:-) – flob

+0

yeh、ちょうど私が...ダム。ご不便をお祈りください:) thx、しかし。 – Dominik

0

良い解決策は、規模の引数を指定してリサイズ()関数を使用することです:そこ

double scale = 0.3; 
Picture pict = drawing.createPicture(anchor, pictureIdx); 
pict.resize(scale); 
関連する問題