使用Java讀取數據庫中的BLOB文件(.PDF)並分隔成單個圖片保存到自定的目錄下

不多BB直接上代碼

可作爲參考有待優化一天單線程可以跑5000數據圖片轉化2W+可自行編寫多線程

package com.byteconversion.pojo;
import org.apache.commons.lang3.StringUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.io.File;
import java.io.IOException;
/**
 * @ClassName IdeaImgOutPojo
 * @Description TODO
 * @Author XuWenXiao
 * @Date 2019/11/13 11:10
 * @Version 1.0
 **/
public class IdeaImgOutPojo {
    private final static String URL = "jdbc:sqlserver://xxxxxxx:1433;DatabaseName=GE_DAGL";
    private static final String USER="sa";
    private static final String PASSWORD="sa@19771619";
    private static Connection conn=null;
    //靜態代碼塊(將加載驅動、連接數據庫放入靜態塊中)
    static{
        try {
            //1.加載驅動程序
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            //2.獲得數據庫的連接
            try {
                conn=(Connection) DriverManager.getConnection(URL,USER,PASSWORD);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

    }
    public static void main(String[] args) throws Exception {
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery("select bobData,oldName from file_ANJIANJU where start='0'");
        int k=1;
        while(rs.next()) {
            System.out.println(k++);
            Blob blob=rs.getBlob("bobData");
            InputStream binaryStream=blob.getBinaryStream();
            byte[] bytes = readStreamToByteArray(binaryStream);
            String s1=rs.getString("oldName");
//            String sql="update file_ANJIANJU set start='0' where oldName=?";
//            PreparedStatement statement = conn.prepareStatement();
//            statement.setString(s1);
            String s= StringUtils.substring(s1,3,s1.length());
            System.out.println(s);
            String temp[]=s.split("\\\\");
            String fileNameNow=temp[temp.length-1];
            String caselsh = fileNameNow.substring(0,fileNameNow.lastIndexOf("."));
            StringBuffer filePath=new StringBuffer();
            for (int i = 0; i < temp.length-1; i++) {
                filePath.append(temp[i]+"\\\\");
            }
            String filePaths="D:\\"+filePath.toString()+caselsh;
            File file=new File(filePaths);
            if (!file.exists()&& !file.isDirectory()){
                System.out.println("文件不存在自動創建");
                file.mkdirs();
                // file.createNewFile();
            }
            OutputStream outputStream=new FileOutputStream(new File(filePaths+"\\"+fileNameNow));
            outputStream.write(bytes);
            outputStream.flush();
            System.out.println("download success");
            String pdfFilePath=filePaths+"\\"+fileNameNow;
            List<String> imageList = getpdfToImage(pdfFilePath);
            Iterator<String> iterator = imageList.iterator();
            while(iterator.hasNext()){
                System.out.println(iterator.next());
            }

            outputStream.close();
        }
        System.out.println("導出成功");
    }

    /**
     * 把數據庫中的BLOB類型轉化爲Byte
     * @param in
     * @return
     * @throws Exception
     */
    public  static byte[] readStreamToByteArray(InputStream in) throws Exception{
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = -1;
        while((len = in.read(buffer)) != -1) {
            outputStream.write(buffer, 0, len);
        }
        outputStream.close();
        in.close();
        return outputStream.toByteArray();
    }

    /**
     * 返回生產圖片的路徑
     * @param filePath
     * @return
     */
    public static List<String>getpdfToImage(String filePath){
        List<String>list=new ArrayList<String>();
        String fileDirectory =filePath.substring(0,filePath.lastIndexOf("\\"));
        String imagePath;
        File file = new File(filePath);
        try {
            File f = new File(fileDirectory);
            if(!f.exists()){
                f.mkdir();
            }
            PDDocument doc = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            System.out.println(pageCount);
            int j=0;
            for(int i=0; i<pageCount; i++){
                BufferedImage image = renderer.renderImage(i, 1.25f);  //第二個參數越大生成圖片分辨率越高,轉換時間也就越長
                j=i+1;
                if(j<10){
                    imagePath = fileDirectory + "/"+"00"+j+ ".jpg";
                }else if(j>=10&&j<100){
                    imagePath = fileDirectory + "/"+"0"+j+ ".jpg";
                }else{
                    imagePath = fileDirectory + "/"+""+j+ ".jpg";
                }
                ImageIO.write(image, "PNG", new File(imagePath));
                list.add(imagePath);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return list;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章