gpt4 book ai didi

java - 如何使用apache poi并排添加图像word文档

转载 作者:行者123 更新时间:2023-12-02 09:19:01 25 4
gpt4 key购买 nike

我想使用 apache poi 在我的 Word 文档中并排添加图像。我尝试将其设为表方法,并为其编写了以下代码。

XWPFTable imgTable;
XWPFTableRow rows=null;
XWPFTableCell cells=null;
imgTable=document.createTable(20,2);
imgTable.getCTTbl().getTblPr().unsetTblBorders();
rows=imgTable.getRow(1);
cells=rows.getCell(0);
XWPFParagraph imgPara = document.createParagraph();
XWPFRun img = imgPara.createRun();
for(int z=0;z<imgPaths.size();z++)
{

if(imgPaths.get(z).contains("-"))
{

}
else
{
System.out.println(imgPaths.get(z));
try {
is2 = new FileInputStream(imgPaths.get(z));
is3=new FileInputStream(imgPaths.get(z+1));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
img.addPicture(is2, XWPFDocument.PICTURE_TYPE_JPEG, "", Units.toEMU(450), Units.toEMU(200));
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

正在加载数据的 imgPaths arraylist 中的文件路径来自 access 数据库。在我的数据库中,有一些文件路径。如果没有文件路径,我会将 - 放入我的数据库单元格中。例如,我有 20 个用于图像路径的单元格,但我添加了 7 个文件路径,因此我将这个 - 放在剩余的 13 个中。因此,当我运行代码时,没有错误,但没有看到图像字文档。我究竟做错了什么?

最佳答案

您的 XWPFParagraph imgParaXWPFRun img 不在表格内。相反,他们在 table 外面。

您的代码还将所有图片添加到同一个 XWPFRun 中。但它应该将图片添加到 XWPFTableCell 中的不同运行中。为此,您需要获取 XWPFTableCell 的第一段,然后获取该段中运行的第一个文本。

以下完整代码显示了如何完成此操作。它使用来自公共(public)可访问互联网资源的图片。因此本地无需存储图片文件即可使用。

import java.io.*;

import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.util.Units;

import java.util.List;
import java.util.ArrayList;

import java.net.URL;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.Dimension;

public class CreateWordPicturesInTable {

public static void main(String[] args) throws Exception {

List<String> pictureURLs = new ArrayList<String>();
pictureURLs.add("https://www.eastcottvets.co.uk/uploads/Animals/gingerkitten.jpg");
pictureURLs.add("https://www.catster.com/wp-content/uploads/2017/12/A-kitten-meowing.jpg");
pictureURLs.add("-");
pictureURLs.add("https://www.animalfriends.co.uk/app/uploads/2014/08/06110347/Kitten-small.jpg");
pictureURLs.add("https://d27ucmmhxk51xv.cloudfront.net/media/english/illustration/kitten.jpg");
pictureURLs.add("-");
pictureURLs.add("-");

int picturesCount = pictureURLs.size();
int tableRows = (int)Math.round(picturesCount/2d);

XWPFDocument document= new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("The kitten pictures: ");

XWPFTable imgTable = document.createTable(tableRows,2);
XWPFTableCell cell;

URL url;
BufferedImage image;
Dimension dim;
ByteArrayOutputStream bout;
ByteArrayInputStream bin;
int tableRow = 0;
int tableCell = 0;
for (String pictureURL : pictureURLs) {
cell = imgTable.getRow(tableRow).getCell(tableCell++);
if (tableCell == 2) {
tableCell = 0;
tableRow++;
}

if (!"-".equals(pictureURL)) {
url = new URL(pictureURL);
image = ImageIO.read(url);
dim = new Dimension(image.getWidth(), image.getHeight());
double width = dim.getWidth();
double height = dim.getHeight();
double scaling = 1.0;
if (width > 72*3) scaling = (72*3)/width; //scale width not to be greater than 3 inches
bout = new ByteArrayOutputStream();
ImageIO.write(image, "jpeg", bout);
bout.flush();
bin = new ByteArrayInputStream(bout.toByteArray());

if (cell.getParagraphs().size() > 0) paragraph = cell.getParagraphs().get(0); else paragraph = cell.addParagraph();
if (paragraph.getRuns().size() > 0) run = paragraph.getRuns().get(0); else run = paragraph.createRun();
run.addPicture(bin, XWPFDocument.PICTURE_TYPE_JPEG, "kitten",
Units.toEMU(width*scaling), Units.toEMU(height*scaling));

//lock aspect ratio
run.getCTR().getDrawingArray(0).getInlineArray(0).addNewCNvGraphicFramePr().addNewGraphicFrameLocks().setNoChangeAspect(true);
}
}

FileOutputStream out = new FileOutputStream("CreateWordPicturesInTable.docx");
document.write(out);
out.close();
document.close();

}
}

关于java - 如何使用apache poi并排添加图像word文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58820074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com