目前使用的是通过遍历word中的table、row、cell获取到占位符,然后用cell.addParagraph().createRun().addPicture(in, pictureType, "", 10, 10)的方式添加图片,但是没有生效,占位符被去掉了 但是图片没有插入,有人遇到这种现象吗?或者我这种方式靠谱吗?
试试我的代码,测试是正确的。
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
public class AddPicToWord {
private static final File BASE_DIR = new File("D:/");
private static final File DOCX_FILE = new File(BASE_DIR, "1.docx");
private static final File DOCX_FILE_NEW = new File(BASE_DIR, "2.docx");
private static final File PIC_FILE = new File(BASE_DIR, "音视频开源库.png");
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
InputStream is = new FileInputStream(DOCX_FILE);
XWPFDocument docx = new XWPFDocument(is);
XWPFParagraph paragraph = docx.createParagraph();
InputStream pic_is = new FileInputStream(PIC_FILE);
BufferedImage image = ImageIO.read(PIC_FILE);
XWPFRun run = paragraph.createRun();
run.addPicture(pic_is, org.apache.poi.xwpf.usermodel.Document.PICTURE_TYPE_PNG, "",
Units.pixelToEMU(image.getWidth()), Units.pixelToEMU(image.getHeight()));
OutputStream os = new FileOutputStream(DOCX_FILE_NEW);
docx.write(os);
os.close();
docx.close();
is.close();
}
}
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.imageio.ImageIO;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
public class AddPicToWord {
private static final File BASE_DIR = new File("D:/");
private static final File DOCX_FILE = new File(BASE_DIR, "1.docx");
private static final File DOCX_FILE_NEW = new File(BASE_DIR, "2.docx");
private static final File PIC_FILE = new File(BASE_DIR, "音视频开源库.png");
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
InputStream is = new FileInputStream(DOCX_FILE);
XWPFDocument docx = new XWPFDocument(is);
List<XWPFParagraph> paragraphs = docx.getParagraphs();
InputStream pic_is = new FileInputStream(PIC_FILE);
BufferedImage image = ImageIO.read(PIC_FILE);
XWPFParagraph paragraph = null;
List<XWPFRun> runs = null;
XWPFRun run = null;
XWPFRun prevRun = null;
int runPos = -1;
for (int i = 0, size1 = paragraphs.size(); i < size1; ++i) {
paragraph = paragraphs.get(i);
runs = paragraph.getRuns();
boolean found = false;
for (int j = 0, size2 = runs.size(); j < size2; ++j) {
run = runs.get(j);
if ("${pic}".equals(run.text())) {
found = true;
prevRun = (j == 0 ? null : runs.get(j - 1));
runPos = j;
break;
}
}
if (found)
break;
}
if (runPos >= 0) {
if (prevRun == null)
prevRun = paragraph.createRun();
prevRun.addPicture(pic_is, org.apache.poi.xwpf.usermodel.Document.PICTURE_TYPE_PNG, "",
Units.pixelToEMU(image.getWidth()), Units.pixelToEMU(image.getHeight()));
paragraph.removeRun(runPos);
OutputStream os = new FileOutputStream(DOCX_FILE_NEW);
docx.write(os);
os.close();
}
docx.close();
is.close();
}
}