欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)圖片轉(zhuǎn)換PDF文件的示例代碼

 更新時間:2020年09月02日 10:29:20   作者:看地闊天高云深處  
這篇文章主要介紹了Java實現(xiàn)圖片轉(zhuǎn)換PDF文件的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

最近因為一些事情,需要將一張簡單的圖片轉(zhuǎn)換為PDF的文件格式,在網(wǎng)上找了一些工具,但是這些工具不是需要注冊賬號,就是需要下載軟件。

而對于只是轉(zhuǎn)換一張圖片的情況下,這些操作顯然是非常繁瑣的,所以作者就直接使用Java寫了一個圖片轉(zhuǎn)換PDF的系統(tǒng),現(xiàn)在將該系統(tǒng)分享在這里。

引入依賴

<!--該項目以SpringBoot為基礎(chǔ)搭建-->
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.0.4.RELEASE</version>
  <relativePath/>
</parent>

<dependencies>
	<!--SpringMVC的依賴,方便我們可以獲取前端傳遞過來的文件信息-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <!--ITextPdf,操作PDF文件的工具類-->
  <dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.4.2</version>
  </dependency>
</dependencies>

前端頁面

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>圖片轉(zhuǎn)換Pdf</title>
  <style>
    .submitButton {
      margin-top: 20px;
      margin-left: 150px;
      background-color: #e37e10;
      border-radius: 10px;
      border: 1px solid #ff8300;
    }
  </style>
</head>
<body>
  <div style="text-align: center">
    <h1>圖片轉(zhuǎn)換pdf工具</h1>
    <form action="/pdf/image/to" enctype="multipart/form-data" method="post" onsubmit="return allowFileType()">
      <input type="file" id="file" name="file" placeholder="請選擇圖片" onchange="allowFileType()" style="border: 1px solid black;"><br>
      <input type="submit" value="一鍵轉(zhuǎn)換pdf文件" class="submitButton">
    </form>
  </div>
</body>
<script>
  function allowFileType() {
    let file = document.getElementById("file").files[0];
    let fileName = file.name;
    console.log(fileName)
    let fileSize = file.size;
    console.log(fileSize)
    let suffix = fileName.substring(fileName.lastIndexOf("."),fileName.length);
    if('.jpg' != suffix && '.png' != suffix) {
      alert("目前只允許傳入.jpg或者.png格式的圖片!");
      return false;
    }
    if(fileSize > 2*1024*1024) {
      alert("上傳圖片不允許超過2MB!");
      return false;
    }
    return true;
  }
</script>
</html>

控制層接口

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相關(guān)的請求
 */
@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相關(guān)的工具類
 */
@Component
public class PdfUtils {

  /**
   * 圖片轉(zhuǎn)換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);
  }

  /**
   * 將圖片轉(zhuǎn)換為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);
  }
}

頁面效果

這就是系統(tǒng)啟動之后的頁面效果,雖然頁面比較簡陋,但是功能卻沒有任何折扣,有興趣或者有需要的同學可以自己搭建一下,試一試圖片轉(zhuǎn)換PDF文件的效果。

注意:作者自己測試了一下,普通圖片基本是沒有問題的,但是遇到一些特殊的圖片可能會出現(xiàn)異常,畢竟只是一個比較簡單的圖片轉(zhuǎn)換PDF系統(tǒng),難以兼容所有圖片。

到此這篇關(guān)于Java實現(xiàn)圖片轉(zhuǎn)換PDF文件的示例代碼的文章就介紹到這了,更多相關(guān)Java 圖片轉(zhuǎn)換PDF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Dubbo在Spring和Spring Boot中的使用詳解

    Dubbo在Spring和Spring Boot中的使用詳解

    這篇文章主要介紹了Dubbo在Spring和Spring Boot中的使用詳解,需要的朋友可以參考下
    2017-10-10
  • java web中的servlet3 upload上傳文件實踐

    java web中的servlet3 upload上傳文件實踐

    這篇文章主要介紹了servlet3 upload上傳文件實踐,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • Java多線程編程中易混淆的3個關(guān)鍵字總結(jié)

    Java多線程編程中易混淆的3個關(guān)鍵字總結(jié)

    這篇文章主要介紹了Java多線程編程中易混淆的3個關(guān)鍵字總結(jié),本文總結(jié)了、volatile、ThreadLocal、synchronized等3個關(guān)鍵字,對這幾個容易混淆概念的關(guān)鍵字分別做了講解,需要的朋友可以參考下
    2015-03-03
  • Java thrift服務(wù)器和客戶端創(chuàng)建實例代碼

    Java thrift服務(wù)器和客戶端創(chuàng)建實例代碼

    Thrift是一個軟件框架,用來進行可擴展且跨語言的服務(wù)的開發(fā)。接下來通過本文給大家介紹Java thrift服務(wù)器和客戶端創(chuàng)建實例代碼,需要的朋友參考下吧
    2017-04-04
  • Spring基于注解管理bean實現(xiàn)方式講解

    Spring基于注解管理bean實現(xiàn)方式講解

    很多時候我們需要根據(jù)不同的條件在容器中加載不同的Bean,或者根據(jù)不同的條件來選擇是否在容器中加載某個Bean,這就是Bean的加載控制,一般我們可以通過編程式或注解式兩種不同的方式來完成Bean的管理
    2023-01-01
  • Java中調(diào)用第三方接口的幾種方法詳細指南

    Java中調(diào)用第三方接口的幾種方法詳細指南

    在Java開發(fā)中調(diào)用第三方接口是常見需求,本文介紹如何使用Java進行接口調(diào)用,重點講解HttpURLConnection類、OkHttp庫和ApacheHttpClient的使用,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • Springboot?異步任務(wù)和定時任務(wù)的異步處理

    Springboot?異步任務(wù)和定時任務(wù)的異步處理

    本文介紹了Springboot異步任務(wù)和定時任務(wù)的異步處理,Springboot?中,異步任務(wù)和定時任務(wù)是經(jīng)常遇到的處理問題方式,為了能夠用好這兩項配置,不干擾正常的業(yè)務(wù),需要對其進行異步化配置。怎么設(shè)置合理的異步處理線程就是其核心和關(guān)鍵,下文詳情需要的朋友可以參考下
    2022-05-05
  • jdbc實現(xiàn)圖書館借閱系統(tǒng)

    jdbc實現(xiàn)圖書館借閱系統(tǒng)

    這篇文章主要為大家詳細介紹了jdbc實現(xiàn)圖書館借閱系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Spring Cache原理解析

    Spring Cache原理解析

    Spring Cache是一個框架,它提供了基于注解的緩存功能,使得開發(fā)者可以很方便地將緩存集成到他們的應(yīng)用程序中,這篇文章主要介紹了Spring Cache原理解析,需要的朋友可以參考下
    2024-05-05
  • JDBC數(shù)據(jù)源連接池配置及應(yīng)用

    JDBC數(shù)據(jù)源連接池配置及應(yīng)用

    這篇文章主要介紹JDBC建立數(shù)據(jù)庫連接的兩種方式,使用配置數(shù)據(jù)源的方式連接數(shù)據(jù)庫,效率更高,推薦使用,希望能給大家做一個參考。
    2016-06-06

最新評論