Estoy tratando de agregar una imagen a un archivo docx usando Apache POI, pero la imagen es más grande que el tamaño del párrafo. ¿Hay alguna forma de saber el tamaño del párrafo para poder cambiar el tamaño de la imagen para que se ajuste al párrafo? A continuación se muestra cómo intento agregar la imagen.
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
String imgFile = "img.png";
BufferedImage img = ImageIO.read(new FileInputStream(imgFile));
int width = img.getWidth();
int height = img.getHeight();
double scaling = 1.0;
// Calculate scaling based on width and paragraph size
XWPFRun run = paragraph.createRun();
run.addPicture(new FileInputStream(imgFile),
XWPFDocument.PICTURE_TYPE_PNG,
imgFile,
Units.toEMU(width*scaling),
Units.toEMU(height*scaling));
Después de investigar un poco, descubrí que, de forma predeterminada, el tamaño del papel y los márgenes no se establecen al crear un archivo docx. Por lo tanto, es necesario configurarlos y usar el mismo valor para configurar el tamaño de la imagen.
int pageW = 500;
int pageH = 1000;
int pageM = 100;
CTDocument1 ctDoc = document.getDocument();
CTBody body = ctDoc.getBody();
if (!body.isSetSectPr()) {
CTSectPr section = body.addNewSectPr();
if (!section.isSetPgSz()) {
CTPageSz size = section.addNewPgSz();
size.setW(BigInteger.valueOf(pageW));
size.setH(BigInteger.valueOf(pageH));
}
if (!section.isSetPgMar()) {
CTPageMar margin = section.addNewPgMar();
margin.setBottom(BigInteger.valueOf(pageM));
margin.setTop(BigInteger.valueOf(pageM));
margin.setLeft(BigInteger.valueOf(pageM));
margin.setRight(BigInteger.valueOf(pageM));
}
}
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
String imgFile = "img.png";
FileInputStream fis = new FileInputStream(imgFile);
BufferedImage img = ImageIO.read(fis);
int width = img.getWidth();
int height = img.getHeight();
double scaling = 1.0;
if (width > pageW - 2*pageM) {
scaling = ((double)(pageW - 2*pageM)) / width;
}
run.addPicture(new FileInputStream(imgFile),
XWPFDocument.PICTURE_TYPE_PNG,
imgFile,
Units.toEMU(width * scaling / 20),
Units.toEMU(height * scaling / 20));
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras