From e44105da328e830ccc718a738e21b899b666d891 Mon Sep 17 00:00:00 2001
From: Aug <17674666882@163.com>
Date: Tue, 11 Feb 2025 14:09:50 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=9B=BE=E7=89=87=E4=B8=8Epdf?=
=?UTF-8?q?=E4=BA=92=E8=BD=AC=E5=AE=9E=E7=8E=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
jeecg-boot-module-system/pom.xml | 58 ++++
.../java/org/jeecg/modules/test/imageDemo.java | 317 +++++++++++++++++++++
2 files changed, 375 insertions(+)
create mode 100644 jeecg-boot-module-system/src/main/java/org/jeecg/modules/test/imageDemo.java
diff --git a/jeecg-boot-module-system/pom.xml b/jeecg-boot-module-system/pom.xml
index 4ae1645..d5bab50 100644
--- a/jeecg-boot-module-system/pom.xml
+++ b/jeecg-boot-module-system/pom.xml
@@ -74,6 +74,64 @@
compile
+
+
+ com.tencentcloudapi
+ tencentcloud-speech-sdk-java
+ LATEST
+
+
+
+ com.tencentcloudapi
+ tencentcloud-sdk-java
+ 4.0.11
+
+
+
+
+
+ org.apache.httpcomponents
+ httpmime
+ 4.5.7
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.41
+
+
+
+ org.apache.poi
+ poi-ooxml
+ 3.16
+
+
+
+
+ com.itextpdf
+ itextpdf
+ 5.5.13
+
+
+ com.itextpdf
+ itext-asian
+ 5.2.0
+
+
+
+
+ org.icepdf.os
+ icepdf-core
+ 6.1.2
+
+
+
+ com.aliyun.oss
+ aliyun-sdk-oss
+ 2.8.3
+
+
diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/test/imageDemo.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/test/imageDemo.java
new file mode 100644
index 0000000..5ca00e1
--- /dev/null
+++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/test/imageDemo.java
@@ -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 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 pathList = new ArrayList<>();//图片路径列表
+ List codeList = new ArrayList<>();//base64列表
+
+ Map 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 imageUrllist = new ArrayList(); //图片list集合
+ for (int i=0; i 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();
+ }
+
+
+}