Cómo convertir PDF base64 a jpg base64 en JAVA
paquete com.aiait.base.util;
importar org.apache.pdfbox.pdmodel.PDDocument;
importar org.apache.pdfbox.rendering. ImageType;
importar org.apache.pdfbox.rendering.PDFRenderer;
importar org.slf4j.Logger;
importar org.slf4j.LoggerFactory; p>
p>
importar com.aiait.base.service.impl.base.SearchServiceImpl;
importar org.apache.pdfbox.*;
importar java .awt.image.BufferedImage;
importar java.io.ByteArrayOutputStream;
importar java.io.File;
importar java.io.IOException;
importar java.io.InputStream;
importar java.net.URL;
importar java.text.DecimalFormat;
importar java .util.Date;
importar javax.imageio.ImageIO;
importar org.apache.commons.lang3.StringUtils;
importar sun.misc.BASE64Decoder ;
importar sun.misc.BASE64Encoder;
clase pública PDFUtil {
// registrador
Registrador final estático privado lOGGER = LoggerFactory .getLogger(PDFUtil. class);
public static void main(String[] args) {
// pdfTojpg("C://Test//eClaimPDF//1/ /Others.pdf" , "C://Test//eClaimPDF//WrittenConfirmation.jpg");
Fecha timeDiffE = null;
Fecha timeDiffL = null;
timeDiffE = nueva Fecha();
base64PdfToJpg(pdfBase64);
timeDiffL = nueva Fecha();
LOGGER.info("base64PdfToJpg tiempo de uso: " getDiffTime (timeDiffL, timeDiffE) "s");
}
cadena estática privada base64PdfToJpg(String base64Pdf) {
String jpg_base64 = null
int pdfdpi = 400
decodificador BASE64Decoder = nuevo BASE64Decoder();
byte[] pdf_bytes = null;
prueba {
pdf_bytes = decoder.decodeBuffer(base64Pdf);
} catch (IOException e1) {
e1.printStackTrace();
}
prueba (documento PDDocument final = PDDocument.load(pdf_bytes)) {
?int size = document.getNumberOfPages();
?
?/*Parámetros de fusión de imágenes*/
?/ / Definir ancho
?int width = 0;
?//Guardar los datos RGB en una imagen
?int[] singleImgRGB;
?// Define la altura, utilizada para la superposición más adelante
?int shiftHeight = 0
?//Guarda el valor de píxel de cada imagen
; ?BufferedImage imageResult = null
?//Utilice PdfBox para generar imágenes
?PDDocument pdDocument = documento
?PDFRenderer renderer = new PDFRenderer(pdDocument) ;
?/*Según el número total de páginas, dividir según la lógica de generar una imagen larga para 50 páginas*/
?// Convertir cada 50 páginas en 1 imagen
?int pageLength = size;? //Tantas como rotaciones hay
?//Número total de bucles
?int totalCount = pdDocument. getNumberOfPages() / pageLength 1;
?for (int m = 0; m lt; totalCount; m ) {
?for (int i = 0; i lt; pageLength; yo ) {
?int pageIndex = i (m * pageLength);
?if (pageIndex == pdDocument.getNumberOfPages()) {
?System.out.println("m = " m );
?break;
?}
?// 96 es el ppp de la imagen. Cuanto mayor sea el ppp, más clara será la imagen. Cuanto más grande sea la imagen, más tiempo llevará la conversión
?BufferedImage image = renderer.renderImageWithDPI(pageIndex, 106, ImageType.RGB);
?int imageHeight = image.getHeight( );
p>?int imageWidth = image.getWidth();
?if (i == 0) {
?//Calcular altura y offset
?//Usar el ancho de la primera imagen;
?width = imageWidth;
?//Guardar el valor de píxeles de cada imagen de página
?//Agregue un juicio: si el número total de imágenes que quedan después de m ciclos es menor que la longitud de la página, la altura de la imagen se dibujará de acuerdo con el número restante; de lo contrario, la parte inferior de la imagen larga será toda negro
?if ((pdDocument.getNumberOfPages() - m * pageLength) lt; pageLength) {
?imageResult = new BufferedImage(ancho, imageHeight * (pdDocument.getNumberOfPages() - m * pageLength), BufferedImage.TYPE_INT_RGB) ;
?} else {
?imageResult = new BufferedImage(ancho, imageHeight * pageLength, BufferedImage.TYPE_INT_RGB
);?}
?} else {
?// Suma continuamente la altura
?shiftHeight = imageHeight;
?}
?singleImgRGB = image.getRGB(0, 0, ancho, imageHeight, null, 0, ancho);
?imageResult.setRGB(0, shiftHeight, ancho, imageHeight, singleImgRGB, 0, ancho);
?}
// ?System.out.println("m = " m
?File outFile = new File("C://Test//eClaimPDF//WrittenConfirmation.png");
?System.out.println(outFile.getName); ());
?// Escribir imágenes
?ImageIO.write(imageResult, "png", outFile
?// Esto es muy importante, habrá instrucciones a continuación
?shiftHeight = 0;
?}
?pdDocument.close(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); //io stream
? ImageIO.write(imageResult, "png", baos); //¿Escribir en el flujo?
? ] jpg_Bytes = baos.toByteArray(); // ¿Convertir a bytes?
? BASE64Encoder codificador = new BASE64Encoder();
jpg_base64 = encoder.encodeBuffer(jpg_Bytes).trim( ) ;//Convertir a cadena base64
? jpg_base64 = jpg_base64.replaceAll("\n", "").replaceAll("\r", ""); //Eliminar\r\n< / p>
?
///? System.out.println("El valor es: " "datos: imagen/jpg; base64, " jpg_base64); / p>
} catch (Excepción e) {
e.printStackTrace();
}
return "datos: imagen/jpg; base64 , "jpg_base64;
}
// cadena estática privada base64PdfToJpg(String base64Pdf) {
// cadena jpg_base64 = null
// int pdfdpi = 400; /p>
//
// decodificador BASE64Decoder = nuevo BASE64Decoder();
// byte[] pdf_bytes = null; prueba {
// pdf_bytes = decoder.decodeBuffer(base64Pdf);
// } catch (IOException e1) {
// e1.printStackTrace() ;
// }
//
// prueba (documento PDDocument final = PDDocument.load(pdf_bytes)) {
// int tamaño = document.getNumberOfPages();
// for (int i = 0; i lt; size; i) {
// Imagen BufferedImage = new PDFRenderer( document).renderImageWithDPI(i, pdfdpi, ImageType.RGB);
// Imagen BufferedImage = nuevo PDFRenderer(documento).
//
// ? ByteArrayOutputStream baos = new ByteArrayOutputStream(); //io stream
// ? ImageIO.write(image, "jpg", baos //¿Escribir en el stream?
// ? byte[] jpg_Bytes = baos.toByteArray(); // ¿Convertir a bytes?
// ? BASE64Encoder codificador = new BASE64Encoder();
// ? encoder.encodeBuffer(jpg_Bytes).trim(); //Convertir a cadena base64
// ? jpg_base64 = jpg_base64.replaceAll("\n", "").replaceAll("\r", " "); //Eliminar\r\n
// ?
// ? System.out.println("El valor es: " "datos: imagen/jpg; base64 ," jpg_base64);
// ?
// }
// } captura (Excepción e) {
//
e.printStackTrace();
// }
// return "datos: imagen/jpg; base64," jpg_base64
// } p>
// p>
vacío estático privado pdfTojpg(String pdfFilePath, String jpgFilePath) {
Archivo pdfFile = new File(pdfFilePath
int idx = jpgFilePath.lastIndexOf('.');
String jpgprefix = StringUtils.substring(jpgFilePath, 0, idx);
int pdfdpi = 400;
decodificador BASE64Decoder = nuevo BASE64Decoder();
byte[] bytes = nulo
prueba {
bytes = decoder.decodeBuffer( pdfBase64);
} catch (IOException e1) {
e1.printStackTrace();
} // ? documento PDDocument final = PDDocument.load (pdfFile, "")) {
try (documento PDDocument final = PDDocument.load(bytes)) {
int size = document.getNumberOfPages( );
for (int i = 0; i lt; size; i) {
Imagen BufferedImage = new PDFRenderer(document).renderImageWithDPI(i, pdfdpi, ImageType.RGB) ;
/*
* ByteArrayOutputStream baos = new ByteArrayOutputStream(); //corriente io
* ImageIO.write(imagen , "jpg", baos) ; //Escribe byte[] imgBytes en la secuencia =
* baos.toByteArray(); //Convierte a bytes BASE64Encoder encoder = new BASE64Encoder();
* String png_base64 = encoder.encodeBuffer(imgBytes).trim(); //Convertir a cadena base64
* png_base64 = png_base64.replaceAll
("\n", "").replaceAll("\r", ""); //Eliminar\r\n
*?
* System.out.println ("El valor es:" "datos: imagen/jpg; base64," png_base64
*/
Archivo); jpgFile = nuevo archivo(jpgprefix "_" i ".jpg");
ImageIO.write(imagen, "jpg", jpgFile);
}
} captura (Excepción e) {
e.printStackTrace()
}
}
private static Double getDiffTime(Date lateTime, Date earlyTime) {
DecimalFormat df=new DecimalFormat("0.00"); //Establece el número de dígitos reservados
return Double.valueOf (df .format((double)(lateTime.getTime() - earlyTime.getTime()) / 1000));
}
cadena estática pública pdfBase64 = "*** " / /desde la web? ¿Enlace a la página web, cargar un PDF para obtener la cadena base64? (Base64 - Decodificador y codificador Base64 en línea)
}