java 读取目录下所有word 文档及子目录文档中的图片,并且保存到一个地方

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);//如果是这几种图片格式就添加进去
                    }
                }
            }
        }
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_42749765/article/details/81533990
今日推荐