|
@ -0,0 +1,317 @@ |
|
|
|
|
|
package org.jeecg.modules.test; |
|
|
|
|
|
|
|
|
|
|
|
import com.itextpdf.text.*; |
|
|
|
|
|
import com.itextpdf.text.pdf.PdfWriter; |
|
|
|
|
|
import org.icepdf.core.pobjects.Page; |
|
|
|
|
|
import sun.misc.BASE64Encoder; |
|
|
|
|
|
|
|
|
|
|
|
import org.icepdf.core.util.GraphicsRenderingHints; |
|
|
|
|
|
|
|
|
|
|
|
import javax.imageio.ImageIO; |
|
|
|
|
|
import java.awt.image.BufferedImage; |
|
|
|
|
|
import java.awt.image.RenderedImage; |
|
|
|
|
|
import java.io.File; |
|
|
|
|
|
|
|
|
|
|
|
import java.io.*; |
|
|
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
|
|
import java.util.*; |
|
|
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
|
|
|
|
public class imageDemo { |
|
|
|
|
|
public static void main(String[] args) { |
|
|
|
|
|
|
|
|
|
|
|
//pdf转图片base64 |
|
|
|
|
|
List<String> codeList = pdf2imagebase64(); |
|
|
|
|
|
for (String s : codeList) { |
|
|
|
|
|
System.out.println(s); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// //图片转pdf |
|
|
|
|
|
// image2pdf(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// System.out.println("start"); |
|
|
|
|
|
// String imageBase64 = "base64"; |
|
|
|
|
|
// String imagePath = "F:\\temp\\firsttest.png"; |
|
|
|
|
|
// base64ToImage(imageBase64, imagePath); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//pdf转图片base64(一张pdf转成多个base64图片) |
|
|
|
|
|
public static List pdf2imagebase64(){ |
|
|
|
|
|
|
|
|
|
|
|
//获取当前时间 |
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); |
|
|
|
|
|
Date now = new Date(); |
|
|
|
|
|
String formattedDate = sdf.format(now); |
|
|
|
|
|
|
|
|
|
|
|
String pdfPath = "F:\\temp\\test.pdf";//pdf文件路径 |
|
|
|
|
|
String imagePath = "F:\\temp\\";//图片文件路径 |
|
|
|
|
|
String fileName = formattedDate + "image_";//图片文件名字 |
|
|
|
|
|
|
|
|
|
|
|
//文件流对象 |
|
|
|
|
|
InputStream in = null; |
|
|
|
|
|
|
|
|
|
|
|
List<String> pathList = new ArrayList<>();//图片路径列表 |
|
|
|
|
|
List<String> codeList = new ArrayList<>();//base64列表 |
|
|
|
|
|
|
|
|
|
|
|
Map<String, Object> map = new HashMap<>(); |
|
|
|
|
|
|
|
|
|
|
|
try{ |
|
|
|
|
|
org.icepdf.core.pobjects.Document document = new org.icepdf.core.pobjects.Document(); |
|
|
|
|
|
document.setFile(pdfPath); |
|
|
|
|
|
float scale = 2.5f;//缩放比例 |
|
|
|
|
|
float rotation = 0f;//旋转角度 |
|
|
|
|
|
|
|
|
|
|
|
//pdf转图片 |
|
|
|
|
|
for (int i = 0; i < document.getNumberOfPages(); i++) { |
|
|
|
|
|
BufferedImage image = (BufferedImage) |
|
|
|
|
|
document.getPageImage(i, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, scale); |
|
|
|
|
|
RenderedImage rendImage = image; |
|
|
|
|
|
File fileDir = new File(imagePath); |
|
|
|
|
|
if (!fileDir.exists()) { |
|
|
|
|
|
fileDir.mkdirs(); |
|
|
|
|
|
} |
|
|
|
|
|
String imgName = fileName + i + ".png";//图片名称 |
|
|
|
|
|
String filePath = imagePath + imgName;//图片文件路径 |
|
|
|
|
|
File file = new File(filePath); |
|
|
|
|
|
ImageIO.write(rendImage, "png", file); |
|
|
|
|
|
image.flush(); |
|
|
|
|
|
pathList.add(filePath); |
|
|
|
|
|
} |
|
|
|
|
|
document.dispose();//关闭流 |
|
|
|
|
|
|
|
|
|
|
|
//图片转base64 |
|
|
|
|
|
for (String path : pathList) { |
|
|
|
|
|
String imgFile = path;// 待处理的图片 |
|
|
|
|
|
|
|
|
|
|
|
byte[] data = null; |
|
|
|
|
|
String encode = null; // 返回Base64编码过的字节数组字符串 |
|
|
|
|
|
BASE64Encoder encoder = new BASE64Encoder();// 对字节数组Base64编码 |
|
|
|
|
|
|
|
|
|
|
|
// 读取图片字节数组 |
|
|
|
|
|
in = new FileInputStream(imgFile); |
|
|
|
|
|
data = new byte[in.available()]; |
|
|
|
|
|
in.read(data); |
|
|
|
|
|
encode = encoder.encode(data); |
|
|
|
|
|
codeList.add(encode); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}catch (Exception e){ |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
}finally { |
|
|
|
|
|
try{ |
|
|
|
|
|
if(null != in){ |
|
|
|
|
|
in.close();//关闭文件流 |
|
|
|
|
|
} |
|
|
|
|
|
}catch (Exception e){ |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
return codeList; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//图片转pdf |
|
|
|
|
|
public static String image2pdf(){ |
|
|
|
|
|
|
|
|
|
|
|
//获取当前时间 |
|
|
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); |
|
|
|
|
|
Date now = new Date(); |
|
|
|
|
|
String formattedDate = sdf.format(now); |
|
|
|
|
|
System.out.println(formattedDate); |
|
|
|
|
|
|
|
|
|
|
|
String images = "F:\\temp\\image_0.png;F:\\temp\\image_1.png;F:\\temp\\image_2.png";//图片文件地址 |
|
|
|
|
|
String pdfPath = "F:\\temp\\"+formattedDate+".pdf"; // 输出pdf文件路径 |
|
|
|
|
|
String[] imageList = images.split(";"); |
|
|
|
|
|
|
|
|
|
|
|
try{ |
|
|
|
|
|
ArrayList<String> imageUrllist = new ArrayList<String>(); //图片list集合 |
|
|
|
|
|
for (int i=0; i<imageList.length; i++) { |
|
|
|
|
|
imageUrllist.add(imageList[i]); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
File file = Pdf(imageUrllist, pdfPath);//生成pdf |
|
|
|
|
|
file.createNewFile(); |
|
|
|
|
|
}catch (Exception e){ |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return pdfPath; |
|
|
|
|
|
} |
|
|
|
|
|
public static File Pdf(ArrayList<String> imageUrllist, String mOutputPdfFileName) { |
|
|
|
|
|
Document doc = new Document(PageSize.A4, 0, 0, 0, 0); //new一个pdf文档 |
|
|
|
|
|
try { |
|
|
|
|
|
PdfWriter.getInstance(doc, new FileOutputStream(mOutputPdfFileName)); //pdf写入 |
|
|
|
|
|
doc.open();//打开文档 |
|
|
|
|
|
for (int i = 0; i < imageUrllist.size(); i++) { //循环图片List,将图片加入到pdf中 |
|
|
|
|
|
doc.newPage(); //在pdf创建一页 |
|
|
|
|
|
Image png1 = Image.getInstance(imageUrllist.get(i)); //通过文件路径获取image |
|
|
|
|
|
float heigth = png1.getHeight(); |
|
|
|
|
|
float width = png1.getWidth(); |
|
|
|
|
|
int percent = getPercent2(heigth, width); |
|
|
|
|
|
png1.setAlignment(Image.MIDDLE); |
|
|
|
|
|
png1.scalePercent(percent + 3);// 表示是原来图像的比例; |
|
|
|
|
|
doc.add(png1); |
|
|
|
|
|
} |
|
|
|
|
|
doc.close(); |
|
|
|
|
|
} catch (FileNotFoundException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} catch (DocumentException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
File mOutputPdfFile = new File(mOutputPdfFileName); //输出流 |
|
|
|
|
|
if (!mOutputPdfFile.exists()) { |
|
|
|
|
|
mOutputPdfFile.deleteOnExit(); |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
return mOutputPdfFile; //反回文件输出流 |
|
|
|
|
|
} |
|
|
|
|
|
public static int getPercent2(float h, float w) { |
|
|
|
|
|
int p = 0; |
|
|
|
|
|
float p2 = 0.0f; |
|
|
|
|
|
p2 = 530 / w * 100; |
|
|
|
|
|
p = Math.round(p2); |
|
|
|
|
|
return p; |
|
|
|
|
|
} |
|
|
|
|
|
/******************************************************************************************************************/ |
|
|
|
|
|
//图片转base64 |
|
|
|
|
|
public static String imageToBase64(String imgPath){ |
|
|
|
|
|
String imgFile = imgPath;// 待处理的图片 |
|
|
|
|
|
InputStream in = null; |
|
|
|
|
|
byte[] data = null; |
|
|
|
|
|
|
|
|
|
|
|
String encode = null; // 返回Base64编码过的字节数组字符串 |
|
|
|
|
|
// 对字节数组Base64编码 |
|
|
|
|
|
BASE64Encoder encoder = new BASE64Encoder(); |
|
|
|
|
|
try { |
|
|
|
|
|
// 读取图片字节数组 |
|
|
|
|
|
in = new FileInputStream(imgFile); |
|
|
|
|
|
data = new byte[in.available()]; |
|
|
|
|
|
in.read(data); |
|
|
|
|
|
encode = encoder.encode(data); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} finally { |
|
|
|
|
|
try { |
|
|
|
|
|
in.close(); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
// TODO Auto-generated catch block |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
return encode; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//base64转图片 |
|
|
|
|
|
public static boolean base64ToImage(String imgStr, String imgFilePath) {// 对字节数组字符串进行Base64解码并生成图片 |
|
|
|
|
|
if (imgStr == null) // 图像数据为空 |
|
|
|
|
|
return false; |
|
|
|
|
|
// 解密 |
|
|
|
|
|
try { |
|
|
|
|
|
// 解密 |
|
|
|
|
|
//Base64.Decoder decoder = Base64.getDecoder(); |
|
|
|
|
|
Base64.Decoder decoder = Base64.getMimeDecoder(); |
|
|
|
|
|
// 去掉base64前缀 data:image/png;base64, |
|
|
|
|
|
imgStr = imgStr.substring(imgStr.indexOf(",", 1) + 1, imgStr.length()); |
|
|
|
|
|
byte[] b = decoder.decode(imgStr); |
|
|
|
|
|
// 处理数据 |
|
|
|
|
|
for (int i = 0; i < b.length; ++i) { |
|
|
|
|
|
if (b[i] < 0) { |
|
|
|
|
|
b[i] += 256; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
// 保存图片 |
|
|
|
|
|
OutputStream out = new FileOutputStream(imgFilePath); |
|
|
|
|
|
out.write(b); |
|
|
|
|
|
out.flush(); |
|
|
|
|
|
out.close(); |
|
|
|
|
|
// 返回图片的相对路径 = 图片分类路径+图片名+图片后缀 |
|
|
|
|
|
return true; |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
return false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//图片转pdf |
|
|
|
|
|
public static void imgChangePDF(String imageUrl, String target) { |
|
|
|
|
|
//创建一个文档对象 |
|
|
|
|
|
Document doc = new Document(); |
|
|
|
|
|
try { |
|
|
|
|
|
//定义输出文件的位置 |
|
|
|
|
|
PdfWriter.getInstance(doc, new FileOutputStream(target)); |
|
|
|
|
|
//开启文档 |
|
|
|
|
|
doc.open(); |
|
|
|
|
|
|
|
|
|
|
|
//路径 |
|
|
|
|
|
Image img = Image.getInstance(imageUrl); |
|
|
|
|
|
//获得宽高 |
|
|
|
|
|
Float h = img.getHeight(); |
|
|
|
|
|
Float w = img.getWidth(); |
|
|
|
|
|
//统一压缩 |
|
|
|
|
|
Integer percent = getPercent(h, w); |
|
|
|
|
|
//图片居中 |
|
|
|
|
|
img.setAlignment(Image.MIDDLE); |
|
|
|
|
|
//百分比显示图 |
|
|
|
|
|
img.scalePercent(percent); |
|
|
|
|
|
//设置高和宽的比例 |
|
|
|
|
|
doc.add(img); |
|
|
|
|
|
|
|
|
|
|
|
// 关闭文档 |
|
|
|
|
|
if(doc != null){ |
|
|
|
|
|
doc.close(); |
|
|
|
|
|
} |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} catch (BadElementException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} catch (DocumentException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//压缩 |
|
|
|
|
|
public static Integer getPercent(Float h,Float w) |
|
|
|
|
|
{ |
|
|
|
|
|
Integer g=0; |
|
|
|
|
|
Float g2=0.0f; |
|
|
|
|
|
g2=480/w*100; |
|
|
|
|
|
g=Math.round(g2); |
|
|
|
|
|
return g; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************************************************/ |
|
|
|
|
|
public static void pdf2Pic(String pdfPath, String path, String fileName) throws Exception { |
|
|
|
|
|
org.icepdf.core.pobjects.Document document = new org.icepdf.core.pobjects.Document(); |
|
|
|
|
|
document.setFile(pdfPath); |
|
|
|
|
|
//缩放比例 |
|
|
|
|
|
float scale = 2.5f; |
|
|
|
|
|
//旋转角度 |
|
|
|
|
|
float rotation = 0f; |
|
|
|
|
|
for (int i = 0; i < document.getNumberOfPages(); i++) { |
|
|
|
|
|
BufferedImage image = (BufferedImage) |
|
|
|
|
|
document.getPageImage(i, GraphicsRenderingHints.SCREEN, Page.BOUNDARY_CROPBOX, rotation, scale); |
|
|
|
|
|
RenderedImage rendImage = image; |
|
|
|
|
|
try { |
|
|
|
|
|
File fileDir = new File(path); |
|
|
|
|
|
if (!fileDir.exists()) { |
|
|
|
|
|
fileDir.mkdirs(); |
|
|
|
|
|
} |
|
|
|
|
|
String imgName = fileName + i + ".png"; |
|
|
|
|
|
File file = new File(path + imgName); |
|
|
|
|
|
ImageIO.write(rendImage, "png", file); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
image.flush(); |
|
|
|
|
|
} |
|
|
|
|
|
document.dispose(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |