Java快速實(shí)現(xiàn)PDF轉(zhuǎn)圖片功能實(shí)例代碼
前言
PDFBox是一個(gè)BSD許可下的源碼開(kāi)放項(xiàng)目,它是一個(gè)專門為開(kāi)發(fā)人員讀取和創(chuàng)建PDF文檔而準(zhǔn)備的純Java類庫(kù)。
- 文本提取:PDFBox可以從PDF文檔中提取文本,包括Unicode字符。
- 表單處理:PDFBox支持從PDF表單中提取數(shù)據(jù),或者是填充PDF表單。
- 加密與解密:可以對(duì)PDF文檔進(jìn)行加密和解密操作。
- 合并與分割:可以將多個(gè)PDF文檔合并成一個(gè),也可以將一個(gè)PDF文檔分割成多個(gè)。
- 覆蓋與追加:可以覆蓋PDF文檔的內(nèi)容,或者向已有的PDF文檔中追加內(nèi)容。
- 打印:利用Java的打印API,PDFBox可以將PDF文檔輸出到打印機(jī)。
- 轉(zhuǎn)換:PDFBox可以將PDF文檔轉(zhuǎn)換成映像文件,如PNG或JPEG格式。
- 創(chuàng)建PDF:可以從頭開(kāi)始創(chuàng)建新的PDF文檔,包括添加圖像和字體。
- 集成Lucene搜索引擎:PDFBox與Jakarta Lucene等文本搜索引擎的整合過(guò)程十分簡(jiǎn)單,可以用于PDF文檔的索引和搜索。
引入依賴
<!--pdf轉(zhuǎn)圖片--> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.29</version> </dependency>
編寫PdfToImageUtil 工具類
import lombok.extern.slf4j.Slf4j; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * @Author: 公眾號(hào):知識(shí)淺談 * @Description: pdf轉(zhuǎn)圖片工具類 * @Version: 1.0 */ @Slf4j public class PdfToImageUtil { /*dpi 越大圖片越清晰*/ private static final Integer DPI = 100; /*轉(zhuǎn)換后圖片類型*/ private static final String IMG_TYPE = "jpg"; /** * PDF轉(zhuǎn)圖片(多頁(yè)) * @param fileContent pdf文件的二進(jìn)制流 * @return 圖片文件的二進(jìn)制流 * @throws Exception */ public static List<byte[]> pdfToImage(byte[] fileContent) throws Exception { List<byte[]> imageList = new ArrayList<byte[]>(); PDDocument document=null; try{ document = PDDocument.load(fileContent); PDFRenderer pdfRenderer = new PDFRenderer(document); for (int i = 0; i < document.getNumberOfPages(); i++) { BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(i, DPI); ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, IMG_TYPE, out); imageList.add(out.toByteArray()); } }finally { document.close(); } return imageList; } /** * PDF轉(zhuǎn)圖片(單頁(yè)) * @param fileContent pdf文件的二進(jìn)制流 * @return 圖片文件的二進(jìn)制流 * @throws Exception */ public static byte[] pdfToImageOne(byte[] fileContent) throws Exception { byte[] image = null; PDDocument document=null; try{ document = PDDocument.load(fileContent); PDFRenderer pdfRenderer = new PDFRenderer(document); BufferedImage bufferedImage = pdfRenderer.renderImageWithDPI(0, DPI); ByteArrayOutputStream out = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, IMG_TYPE, out); image = out.toByteArray(); }finally { document.close(); } return image; } public static Boolean saveImage(byte[] imageBytes, String savePath,String fileName) throws Exception { try { BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageBytes)); File directory = new File(savePath); if(!directory.exists()){ directory.mkdirs(); } File file1 = new File(directory,fileName); return ImageIO.write(image, IMG_TYPE, file1); } catch (IOException e) { log.error("保存文件錯(cuò)誤"); return false; } } }
方法實(shí)現(xiàn)
* pdf轉(zhuǎn)圖片 */ @GetMapping(value = "/pdfToPng") @Log(title = "證件模板", businessType = BusinessType.OTHER) public void pdfToPng(HttpServletRequest request,HttpServletResponse response) { try { File file = new File("D:\\pdf\\test.pdf"); FileInputStream fileInputStream = new FileInputStream(file); byte[] pdfBytes = new byte[(int) file.length()]; fileInputStream.read(pdfBytes); fileInputStream.close(); byte[] bytes = PdfToImageUtil.pdfToImageOne(pdfBytes); ServletOutputStream outputStream = response.getOutputStream(); response.setContentType("image/jpeg"); response.setContentLength(bytes.length); outputStream.write(bytes); }catch (Exception e){ log.error("pdf轉(zhuǎn)圖片異常{}", e.getMessage()); } }
運(yùn)行之后顯示的結(jié)果如下
總結(jié)
到此這篇關(guān)于Java快速實(shí)現(xiàn)PDF轉(zhuǎn)圖片功能的文章就介紹到這了,更多相關(guān)Java PDF轉(zhuǎn)圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springboot打包代碼,反編譯后代碼混淆方式(防止還原代碼)
文章主要介紹了如何對(duì)Spring Boot項(xiàng)目進(jìn)行jar包混淆,以防止反編譯還原原始代碼,通過(guò)在項(xiàng)目中添加proguard.cfg文件并配置Maven插件,可以實(shí)現(xiàn)代碼混淆,從而增加反編譯的難度2024-11-11Java實(shí)現(xiàn)經(jīng)典游戲黃金礦工的示例代碼
《黃金礦工》游戲是一個(gè)經(jīng)典的抓金子小游戲,它可以鍛煉人的反應(yīng)能力。本文將用Java實(shí)現(xiàn)這一經(jīng)典的游戲,感興趣的小伙伴可以了解一下2022-02-02Java適配器模式之如何靈活應(yīng)對(duì)不匹配的接口
本文介紹了Java中的適配器模式,包括對(duì)象適配器模式和接口適配器模式,適配器模式通過(guò)將一個(gè)類的接口轉(zhuǎn)換成客戶期望的另一個(gè)接口,解決了不同接口之間的不兼容問(wèn)題,它提高了系統(tǒng)的靈活性、復(fù)用性和解耦性,需要的朋友可以參考下2024-10-10實(shí)例講解分布式緩存軟件Memcached的Java客戶端使用
這篇文章主要介紹了分布式緩存軟件Memcached的Java客戶端使用,Memcached在GitHub上開(kāi)源,作者用其Windows平臺(tái)下的版本進(jìn)行演示,需要的朋友可以參考下2016-01-01Springboot整合Freemarker的實(shí)現(xiàn)詳細(xì)過(guò)程
這篇文章主要介紹了Springboot整合Freemarker的實(shí)現(xiàn)詳細(xì)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12