(BLOB 工具类)使用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;
}
}
本文作者:张三Blog
本文链接:https://www.cnblogs.com/zhangsan-plus/p/16503334.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步