當前位置:編程學習大全網 - 編程語言 - JAVA怎麽將PDF的base64轉換成jpg的base64

JAVA怎麽將PDF的base64轉換成jpg的base64

package com.aiait.base.util;

import org.apache.pdfbox.pdmodel.PDDocument;

import org.apache.pdfbox.rendering.ImageType;

import org.apache.pdfbox.rendering.PDFRenderer;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.aiait.base.service.impl.base.SearchServiceImpl;

import org.apache.pdfbox.*;

import java.awt.image.BufferedImage;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.net.URL;

import java.text.DecimalFormat;

import java.util.Date;

import javax.imageio.ImageIO;

import org.apache.commons.lang3.StringUtils;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

public class PDFUtil {

// logger

private static final Logger lOGGER = LoggerFactory.getLogger(PDFUtil.class);

public static void main(String[] args) {

// pdfTojpg("C://Test//eClaimPDF//1//Others.pdf","C://Test//eClaimPDF//WrittenConfirmation.jpg");

Date timeDiffE = null;

Date timeDiffL = null;

timeDiffE = new Date();

base64PdfToJpg(pdfBase64);

timeDiffL = new Date();

lOGGER.info("base64PdfToJpg use time: " + getDiffTime(timeDiffL, timeDiffE) + "s");

}

private static String base64PdfToJpg(String base64Pdf) {

String jpg_base64 = null;

int pdfdpi = 400;

BASE64Decoder decoder = new BASE64Decoder();

byte[] pdf_bytes = null;

try {

pdf_bytes = decoder.decodeBuffer(base64Pdf);

} catch (IOException e1) {

e1.printStackTrace();

}

try (final PDDocument document = PDDocument.load(pdf_bytes)) {

?int size = document.getNumberOfPages();

?

?/*圖像合並使用參數*/

?// 定義寬度

?int width = 0;

?// 保存壹張圖片中的RGB數據

?int[] singleImgRGB;

?// 定義高度,後面用於疊加

?int shiftHeight = 0;

?//保存每張圖片的像素值

?BufferedImage imageResult = null;

?// 利用PdfBox生成圖像

?PDDocument pdDocument = document;

?PDFRenderer renderer = new PDFRenderer(pdDocument);

?/*根據總頁數, 按照50頁生成壹張長圖片的邏輯, 進行拆分*/

?// 每50頁轉成1張圖片

?int pageLength = size;? //有多少轉多少

?// 總計循環的次數

?int totalCount = pdDocument.getNumberOfPages() / pageLength + 1;

?for (int m = 0; m < totalCount; m++) {

?for (int i = 0; i < pageLength; i++) {

?int pageIndex = i + (m * pageLength);

?if (pageIndex == pdDocument.getNumberOfPages()) {

?System.out.println("m = " + m);

?break;

?}

?// 96為圖片的dpi,dpi越大,則圖片越清晰,圖片越大,轉換耗費的時間也越多

?BufferedImage image = renderer.renderImageWithDPI(pageIndex, 106, ImageType.RGB);

?int imageHeight = image.getHeight();

?int imageWidth = image.getWidth();

?if (i == 0) {

?//計算高度和偏移量

?//使用第壹張圖片寬度;

?width = imageWidth;

?// 保存每頁圖片的像素值

?// 加個判斷:如果m次循環後所剩的圖片總數小於pageLength,則圖片高度按剩余的張數繪制,否則會出現長圖片下面全是黑色的情況

?if ((pdDocument.getNumberOfPages() - m * pageLength) < pageLength) {

?imageResult = new BufferedImage(width, imageHeight * (pdDocument.getNumberOfPages() - m * pageLength), BufferedImage.TYPE_INT_RGB);

?} else {

?imageResult = new BufferedImage(width, imageHeight * pageLength, BufferedImage.TYPE_INT_RGB);

?}

?} else {

?// 將高度不斷累加

?shiftHeight += imageHeight;

?}

?singleImgRGB = image.getRGB(0, 0, width, imageHeight, null, 0, width);

?imageResult.setRGB(0, shiftHeight, width, imageHeight, singleImgRGB, 0, width);

?}

// ?System.out.println("m = " + m);

?File outFile = new File("C://Test//eClaimPDF//WrittenConfirmation.png");

?System.out.println(outFile.getName());

?// 寫圖片

?ImageIO.write(imageResult, "png", outFile);

?// 這個很重要,下面會有說明

?shiftHeight = 0;

?}

?pdDocument.close();

? ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流

? ImageIO.write(imageResult, "png", baos);//寫入流中?

? byte[] jpg_Bytes = baos.toByteArray();//轉換成字節?

? BASE64Encoder encoder = new BASE64Encoder();

? jpg_base64 = encoder.encodeBuffer(jpg_Bytes).trim();//轉換成base64串

? jpg_base64 = jpg_base64.replaceAll("\n", "").replaceAll("\r", "");//刪除 \r\n

?

//? System.out.println("值為:"+"data:image/jpg;base64,"+jpg_base64);

?

} catch (Exception e) {

e.printStackTrace();

}

return "data:image/jpg;base64,"+jpg_base64;

}

// private static String base64PdfToJpg(String base64Pdf) {

// String jpg_base64 = null;

// int pdfdpi = 400;

//

// BASE64Decoder decoder = new BASE64Decoder();

// byte[] pdf_bytes = null;

// try {

// pdf_bytes = decoder.decodeBuffer(base64Pdf);

// } catch (IOException e1) {

// e1.printStackTrace();

// }

//

// try (final PDDocument document = PDDocument.load(pdf_bytes)) {

// int size = document.getNumberOfPages();

// for (int i = 0; i < size; i++) {

// BufferedImage image = new PDFRenderer(document).renderImageWithDPI(i, pdfdpi, ImageType.RGB);

// BufferedImage image = new PDFRenderer(document).

//

// ? ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流

// ? ImageIO.write(image, "jpg", baos);//寫入流中?

// ? byte[] jpg_Bytes = baos.toByteArray();//轉換成字節?

// ? BASE64Encoder encoder = new BASE64Encoder();

// ? jpg_base64 = encoder.encodeBuffer(jpg_Bytes).trim();//轉換成base64串

// ? jpg_base64 = jpg_base64.replaceAll("\n", "").replaceAll("\r", "");//刪除 \r\n

// ?

// ? System.out.println("值為:"+"data:image/jpg;base64,"+jpg_base64);

// ?

// }

// } catch (Exception e) {

// e.printStackTrace();

// }

// return "data:image/jpg;base64,"+jpg_base64;

// }

private static void pdfTojpg(String pdfFilePath, String jpgFilePath) {

File pdfFile = new File(pdfFilePath);

int idx = jpgFilePath.lastIndexOf('.');

String jpgprefix = StringUtils.substring(jpgFilePath, 0, idx);

int pdfdpi = 400;

BASE64Decoder decoder = new BASE64Decoder();

byte[] bytes = null;

try {

bytes = decoder.decodeBuffer(pdfBase64);

} catch (IOException e1) {

e1.printStackTrace();

}

// ? try (final PDDocument document = PDDocument.load(pdfFile, "")) {

try (final PDDocument document = PDDocument.load(bytes)) {

int size = document.getNumberOfPages();

for (int i = 0; i < size; i++) {

BufferedImage image = new PDFRenderer(document).renderImageWithDPI(i, pdfdpi, ImageType.RGB);

/*

* ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流

* ImageIO.write(image, "jpg", baos);//寫入流中 byte[] imgBytes =

* baos.toByteArray();//轉換成字節 BASE64Encoder encoder = new BASE64Encoder();

* String png_base64 = encoder.encodeBuffer(imgBytes).trim();//轉換成base64串

* png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//刪除 \r\n

*?

* System.out.println("值為:"+"data:image/jpg;base64,"+png_base64);

*/

File jpgFile = new File(jpgprefix + "_" + i + ".jpg");

ImageIO.write(image, "jpg", jpgFile);

}

} catch (Exception e) {

e.printStackTrace();

}

}

private static Double getDiffTime(Date lateTime, Date earlyTime) {

DecimalFormat df=new DecimalFormat("0.00");//設置保留位數

return Double.valueOf(df.format((double)(lateTime.getTime() - earlyTime.getTime()) / 1000));

}

public static String pdfBase64 = "***" //from web?網頁鏈接, upload a PDF to get the base64 string? (Base64 - Online Base64 decoder and encoder)

}

  • 上一篇:如何搭建springMVC開發環境
  • 下一篇:需要關於個人愛好和喜歡的職業的英語作文,字數80左右
  • copyright 2024編程學習大全網