java图片转换pdf_Java实现图片转换PDF文件的示例代码

最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件。

而对于只是转换一张图片的情况下,这些操作显然是非常繁琐的,所以作者就直接使用Java写了一个图片转换PDF的系统,现在将该系统分享在这里。

引入依赖

org.springframework.boot

spring-boot-starter-parent

2.0.4.RELEASE

org.springframework.boot

spring-boot-starter-web

com.itextpdf

itextpdf

5.4.2

前端页面

图片转换Pdf

.submitButton {

margin-top: 20px;

margin-left: 150px;

background-color: #e37e10;

border-radius: 10px;

border: 1px solid #ff8300;

}

图片转换pdf工具

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;

}

控制层接口

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);

}

}

页面效果

136a58deeb97aa979011382537c455f9.png

这就是系统启动之后的页面效果,虽然页面比较简陋,但是功能却没有任何折扣,有兴趣或者有需要的同学可以自己搭建一下,试一试图片转换PDF文件的效果。

注意:作者自己测试了一下,普通图片基本是没有问题的,但是遇到一些特殊的图片可能会出现异常,毕竟只是一个比较简单的图片转换PDF系统,难以兼容所有图片。

到此这篇关于Java实现图片转换PDF文件的示例代码的文章就介绍到这了,更多相关Java 图片转换PDF内容请搜索聚米学院以前的文章或继续浏览下面的相关文章希望大家以后多多支持聚米学院!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将 PDF 文件转换成高清图片,可以使用 Java 库 Apache PDFBox。以下是一个简单的示例代码: ```java import java.io.File; import java.io.IOException; import java.util.List; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.rendering.RenderDestination; import org.apache.pdfbox.rendering.RenderRequest; import org.apache.pdfbox.rendering.RenderResult; import org.apache.pdfbox.rendering.Renderer; import org.apache.pdfbox.rendering.image.BufferedImageRenderer; import org.apache.pdfbox.rendering.image.BufferedImageWriter; import javax.imageio.ImageIO; public class PDFToImageConverter { public static void main(String[] args) throws IOException { String sourcePdf = "path/to/source.pdf"; String destFolder = "path/to/destination/folder"; convertPDFToImages(sourcePdf, destFolder); } public static void convertPDFToImages(String sourcePdf, String destFolder) throws IOException { File file = new File(sourcePdf); PDDocument document = PDDocument.load(file); PDFRenderer pdfRenderer = new PDFRenderer(document); int pageCount = document.getNumberOfPages(); for (int i = 0; i < pageCount; i++) { BufferedImage image = pdfRenderer.renderImageWithDPI(i, 300); File output = new File(destFolder + "/image" + (i + 1) + ".png"); ImageIO.write(image, "png", output); } document.close(); } } ``` 这段代码PDF 文件转换成多个 PNG 格式的图片,存储在指定的文件夹中。其中,`pdfRenderer.renderImageWithDPI(i, 300)` 方法可以指定图片的 DPI(每英寸点数),这里设置为 300dpi,可以根据需要进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值