出於某些需求需要將一張簡單的圖片轉換為PDF的檔案格式,因此自己動手寫了一個圖片轉換PDF的系統,現在將該系統分享在這裡,供大家參考。
(學習影片推薦:java課程)
具體程式碼:
引入依賴:
org.springframework.boot spring-boot-starter-parent 2.0.4.RELEASE org.springframework.boot spring-boot-starter-web com.itextpdf itextpdf 5.4.2
前端頁面:
(推薦教學:java入門教學)
控制層介面
package com.hrp.controller; import com.hrp.util.PdfUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; /** * @description: 用于处理Pdf相关的请求 */ @Controller @RequestMapping("pdf") public class PdfController { @PostMapping("image/to") public void imageToPdf(@RequestParam("file") MultipartFile file,HttpServletResponse response) throws Exception{ PdfUtils.imageToPdf(file,response); } }
PDF工具類別
package com.hrp.util; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Image; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfWriter; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder; /** * @description: pdf相关的工具类 */ @Component public class PdfUtils { /** * 图片转换PDF的公共接口 * * @param file SpringMVC获取的图片文件 * @param response HttpServletResponse * @throws IOException IO异常 * @throws DocumentException PDF文档异常 */ public static void imageToPdf(MultipartFile file, HttpServletResponse response) throws IOException, DocumentException { File pdfFile = generatePdfFile(file); downloadPdfFile(pdfFile, response); } /** * 将图片转换为PDF文件 * * @param file SpringMVC获取的图片文件 * @return PDF文件 * @throws IOException IO异常 * @throws DocumentException PDF文档异常 */ private static File generatePdfFile(MultipartFile file) throws IOException, DocumentException { String fileName = file.getOriginalFilename(); String pdfFileName = fileName.substring(0, fileName.lastIndexOf(".")) + ".pdf"; Document doc = new Document(PageSize.A4, 20, 20, 20, 20); PdfWriter.getInstance(doc, new FileOutputStream(pdfFileName)); doc.open(); doc.newPage(); Image image = Image.getInstance(file.getBytes()); float height = image.getHeight(); float width = image.getWidth(); int percent = getPercent(height, width); image.setAlignment(Image.MIDDLE); image.scalePercent(percent); doc.add(image); doc.close(); File pdfFile = new File(pdfFileName); return pdfFile; } /** * * 用于下载PDF文件 * * @param pdfFile PDF文件 * @param response HttpServletResponse * @throws IOException IO异常 */ private static void downloadPdfFile(File pdfFile, HttpServletResponse response) throws IOException { FileInputStream fis = new FileInputStream(pdfFile); byte[] bytes = new byte[fis.available()]; fis.read(bytes); fis.close(); response.reset(); response.setHeader("Content-Type", "application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(pdfFile.getName(), "UTF-8")); OutputStream out = response.getOutputStream(); out.write(bytes); out.flush(); out.close(); } /** * 等比压缩,获取压缩百分比 * * @param height 图片的高度 * @param weight 图片的宽度 * @return 压缩百分比 */ private static int getPercent(float height, float weight) { float percent = 0.0F; if (height > weight) { percent = PageSize.A4.getHeight() / height * 100; } else { percent = PageSize.A4.getWidth() / weight * 100; } return Math.round(percent); } }
實作效果:
以上是利用java實作一個圖片轉PDF文件工具的詳細內容。更多資訊請關注PHP中文網其他相關文章!