Java快速實現(xiàn)PDF轉圖片功能實例代碼
更新時間:2024年09月25日 09:12:41 作者:知識淺談
PDFBox是一個開源Java類庫,用于讀取和創(chuàng)建PDF文檔,它支持文本提取、表單處理、文檔加密解密、合并分割、內容覆蓋追加、文檔打印和轉換等功能,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
前言
PDFBox是一個BSD許可下的源碼開放項目,它是一個專門為開發(fā)人員讀取和創(chuàng)建PDF文檔而準備的純Java類庫。
- 文本提取:PDFBox可以從PDF文檔中提取文本,包括Unicode字符。
- 表單處理:PDFBox支持從PDF表單中提取數據,或者是填充PDF表單。
- 加密與解密:可以對PDF文檔進行加密和解密操作。
- 合并與分割:可以將多個PDF文檔合并成一個,也可以將一個PDF文檔分割成多個。
- 覆蓋與追加:可以覆蓋PDF文檔的內容,或者向已有的PDF文檔中追加內容。
- 打印:利用Java的打印API,PDFBox可以將PDF文檔輸出到打印機。
- 轉換:PDFBox可以將PDF文檔轉換成映像文件,如PNG或JPEG格式。
- 創(chuàng)建PDF:可以從頭開始創(chuàng)建新的PDF文檔,包括添加圖像和字體。
- 集成Lucene搜索引擎:PDFBox與Jakarta Lucene等文本搜索引擎的整合過程十分簡單,可以用于PDF文檔的索引和搜索。
引入依賴
<!--pdf轉圖片--> <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: 公眾號:知識淺談 * @Description: pdf轉圖片工具類 * @Version: 1.0 */ @Slf4j public class PdfToImageUtil { /*dpi 越大圖片越清晰*/ private static final Integer DPI = 100; /*轉換后圖片類型*/ private static final String IMG_TYPE = "jpg"; /** * PDF轉圖片(多頁) * @param fileContent pdf文件的二進制流 * @return 圖片文件的二進制流 * @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轉圖片(單頁) * @param fileContent pdf文件的二進制流 * @return 圖片文件的二進制流 * @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("保存文件錯誤"); return false; } } }
方法實現(xiàn)
* pdf轉圖片 */ @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轉圖片異常{}", e.getMessage()); } }
運行之后顯示的結果如下
總結
到此這篇關于Java快速實現(xiàn)PDF轉圖片功能的文章就介紹到這了,更多相關Java PDF轉圖片內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Springboot打包代碼,反編譯后代碼混淆方式(防止還原代碼)
文章主要介紹了如何對Spring Boot項目進行jar包混淆,以防止反編譯還原原始代碼,通過在項目中添加proguard.cfg文件并配置Maven插件,可以實現(xiàn)代碼混淆,從而增加反編譯的難度2024-11-11實例講解分布式緩存軟件Memcached的Java客戶端使用
這篇文章主要介紹了分布式緩存軟件Memcached的Java客戶端使用,Memcached在GitHub上開源,作者用其Windows平臺下的版本進行演示,需要的朋友可以參考下2016-01-01Springboot整合Freemarker的實現(xiàn)詳細過程
這篇文章主要介紹了Springboot整合Freemarker的實現(xiàn)詳細過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12