package com.test;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
import javax.imageio.ImageIO;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.PicturesTable;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* word中导出图片到文件夹中
*
* @author
*
*/
public class WordImgToFileCatalog {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
//执行图片目录查询bin导出
getImgToFile("D:/2018/4/片处理规范文档/","D:/超图软件/2018/4/规范文档/image/新建文件夹/");
//new WordImgToFileCatalog().getDOC("D:/2018/4/处理规范文档/通知附件2.doc");
}
//读取word docx img
@SuppressWarnings("static-access")
public static void getDOCX(String path) {
File file = new File(path);
try {
FileInputStream fis = new FileInputStream(file);
XWPFDocument document = new XWPFDocument(fis);
XWPFWordExtractor xwpfWordExtractor = new XWPFWordExtractor(
document);
String text = xwpfWordExtractor.getText();
System.out.println(text);
List<XWPFPictureData> picList = document.getAllPictures();
for (XWPFPictureData pic : picList) {
System.out.println(pic.getPictureType() + file.separator
+ pic.suggestFileExtension() + file.separator
+ pic.getFileName());
byte[] bytev = pic.getData();
FileOutputStream fos = new FileOutputStream(
"D:/超图软件/2018/4/水文档/image/" + pic.getFileName());
fos.write(bytev);
}
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//读取word doc img
@SuppressWarnings("unused")
private void getDOC(String path) throws Exception {
FileInputStream in = new FileInputStream(new File(path));
HWPFDocument doc = new HWPFDocument(in);
int length = doc.characterLength();
PicturesTable pTable = doc.getPicturesTable();
// int TitleLength=doc.getSummaryInformation().getTitle().length();
// System.out.println(TitleLength);
// System.out.println(length);
for (int i = 0; i < length; i++) {
Range range = new Range(i, i + 1, doc);
CharacterRun cr = range.getCharacterRun(0);
if (pTable.hasPicture(cr)) {
Picture pic = pTable.extractPicture(cr, false);
String afileName = pic.suggestFullFileName();
OutputStream out = new FileOutputStream(new File(
"D:/超图软件/2018/4/范文档/image/" + UUID.randomUUID()
+ afileName));
pic.writeImageContent(out);
}
}
}
static BASE64Encoder encoder = new sun.misc.BASE64Encoder();
static BASE64Decoder decoder = new sun.misc.BASE64Decoder();
//读取图片返回String 64base
public static String getImageBinary(String Imgpath){
File f = new File(Imgpath);
BufferedImage bi;
try {
bi = ImageIO.read(f);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bi, "jpg", baos);
byte[] bytes = baos.toByteArray();
return encoder.encodeBuffer(bytes).trim();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* 保存图片
* @param savePath
* @param base64String
*/
public static void base64StringToImage(String savePath,String base64String){
try {
byte[] bytes1 = decoder.decodeBuffer(base64String);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes1);
BufferedImage bi1 =ImageIO.read(bais);
File w2 = new File(savePath);//可以是jpg,png,gif格式
ImageIO.write(bi1, "jpg", w2);//不管输出什么格式图片,此处不需改动
} catch (IOException e) {
e.printStackTrace();
}
}
//图片保存
public static void getImgToFile(String inImgPath,String OutImgPath){
File mFile = new File(inImgPath);
if (mFile.exists() && mFile.isDirectory()) {
List<File> mlist = new ArrayList<File>();
getAllFile(mFile, mlist);
// 已经获取了所有图片
for (File file2 : mlist) {
System.out.println(file2.getAbsolutePath());
base64StringToImage(OutImgPath+ file2.getName(),getImageBinary(file2.getAbsolutePath()));
}
}
}
//读取目录下图片
private static void getAllFile(File mFile, List<File> mlist) {
// 1.获取子目录
File[] files = mFile.listFiles();
// 2.判断files是否是空的 否则程序崩溃
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
getAllFile(file, mlist);//调用递归的方式
} else {
// 4. 添加到集合中去
String fileName = file.getName();
if (fileName.endsWith(".jpg") || fileName.endsWith(".png")
|| fileName.endsWith(".gif")) {
mlist.add(file);//如果是这几种图片格式就添加进去
}
}
}
}
}
}
java 读取目录下所有word 文档及子目录文档中的图片,并且保存到一个地方
猜你喜欢
转载自blog.csdn.net/weixin_42749765/article/details/81533990
今日推荐
周排行