J'ajoute une image dans une cellule à l'aide de Apache POI-HSSF. L'image est 120x100 mais peu importe ce que je fais et comment je le redimensionnement, la feuille de calcul Excel le montre toujours de plusieurs rangées et la déforme de la hauteur de la largeur supérieure à la largeur.
Comment puis-je garder la taille d'origine? P >
Mon code: P>
InputStream is = new FileInputStream(getImageURL()); byte[] bytes = IOUtils.toByteArray(is); int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG); is.close(); //add a picture shape CreationHelper helper = wb.getCreationHelper(); ClientAnchor anchor = helper.createClientAnchor(); // Create the drawing patriarch. This is the top level container for all shapes. Drawing drawing = sheet1.createDrawingPatriarch(); //set top-left corner of the picture, //subsequent call of Picture#resize() will operate relative to it anchor.setAnchorType(0); anchor.setCol1(1); anchor.setRow1(1); Picture pict = drawing.createPicture(anchor, pictureIdx); //auto-size picture relative to its top-left corner pict.resize();
4 Réponses :
Aussi loin que je comprenne de la documentation de Apache POI, c'est à cause de pic.Resize (); code>
, comme il est indiqué ici a> que si la taille de police par défaut du classeur a été modifiée, l'image peut être étirée verticalement ou horizontalement. p>
J'avais fait face au problème similaire où l'image que j'ai ajoutée était déformée. J'ai essayé pict.Resize () et une feuille.AutosizeColumn () mais cela n'a pas fonctionné. Enfin j'ai trouvé l'URL ci-dessous: - https://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/examples/ss/addimitydreimage.java
J'ai ajouté la classe ci-dessus dans Mon code et utilise sa méthode pour ajouter l'image dans Excel. J'ai pu ajouter l'image avec peu de distorsion. J'espère que cela vous aidera également. J'ai écrit ci-dessous le code: - p>
L'addDimitydreimage.java semble avoir déménagé. Nouvelle URL: svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apac Il / ...
J'ai créé une autre image vide avec la largeur prise à partir de feuille.getcolumnwidthinpixels code>, dessinez l'image nécessaire sur elle et utilisée
addDimitydreimage.expand_row_and_column code> pour l'adapter exactement dans la cellule:
HSSFRow imageRow = sheet.createRow(row);
BufferedImage image = ImageIO.read(Paths.get(pathToImage).toUri().toURL());
AddDimensionedImage addImage = new AddDimensionedImage();
float columnWidth = sheet.getColumnWidthInPixels(0);
BufferedImage off_Image = new BufferedImage((int) columnWidth, actualImageHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = off_Image.createGraphics();
g2.setColor(new Color(192,192,192));
g2.fillRect(0, 0, off_Image.getWidth(), off_Image.getHeight());
g2.drawImage(image, 0, 0, null);
g2.dispose();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(off_Image, "jpg", baos);
byte[] bytes = baos.toByteArray();
double reqImageWidthMM = ((double) off_Image.getWidth()) / ConvertImageUnits.PIXELS_PER_MILLIMETRES;
double reqImageHeightMM = ((double) off_Image.getHeight()) / ConvertImageUnits.PIXELS_PER_MILLIMETRES;
addImage.addImageToSheet("A1", sheet, bytes, reqImageWidthMM, reqImageHeightMM, AddDimensionedImage.EXPAND_ROW_AND_COLUMN);
L'addDimitydreimage.java semble avoir déménagé. Nouvelle URL: svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apac Il / ...
J'ai le même problème et ma solution était copie de cette classe dans mon projet AddDimityeDimage puis utilisé cette méthode.
URL url = new URL("https://blog.expedia.mx/por-que-los-viajeros-internacionales-visitan-mexico/"); addImageInCell(sheet, url, sheet.createDrawingPatriarch(), 0, 0);
L'addDimitydreimage.java semble avoir déménagé. Nouvelle URL: svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apac Il / ...
J'ai découvert que cela se produit lorsque je réglais la hauteur de la ligne en utilisant la rangée.Setheight (). Si je ne fais pas ça, l'image va bien. Peu importe la taille de la taille, l'image est toujours étirée verticalement.