SpringBoot实现PDF转图片的代码示例
作者:TandK
在本文中,我们使用SpringBoot演示了如何将PDF文件转换为一张或多张图片,这些示例演示了如何使用Java编程语言与其他开源技术集成,以实现各种文件格式之间的转换,感兴趣的小伙伴跟着小编一起来看看吧
不是单页图片,是多页PDF转成一张图片的逻辑。
我这里的场景是PDF转成图片之后返回给前端,前端再在图片上实现签字,并且可拖拽的逻辑,就是签订合同的场景。
但是这里只写后端多页PDF转图片的逻辑。
先说逻辑,后面直接上代码,大致分为以下几步:
- 读取PDF文件(我的代码里是将在线的URL转成InputStream了)
- 按PDF的页面循环计算图片的宽度和高度,其中宽度为PDF最宽的那一页的宽度(毕竟有的PDF比较骚,可能一页是横的,一页是竖的),高度为所有页面加起来的高度
- 用Graphics2D绘制
- 将Graphics2D的绘制结果输出为图片(只要有outputStream都好说,我这里是输出成base64给前端了,没什么存起来的必要)
好了,直接上代码:
先在pom.xml导入依赖:
<!-- pdf读取 --> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>fontbox</artifactId> <version>2.0.1</version> </dependency>
public String getSinglePicBase64Contracts(String fileUrl) throws IOException { byte[] pdfBytes = HttpUtil.createGet(fileUrl).execute().bodyBytes(); InputStream inputStream = new ByteArrayInputStream(pdfBytes); PDDocument doc = PDDocument.load(inputStream); PDFRenderer pdfRenderer = new PDFRenderer(doc); List<BufferedImage> imageList = new ArrayList<>(doc.getNumberOfPages()); int maxWidth = 0; int totalHeight = 0; for (int i = 0; i < doc.getNumberOfPages(); i++) { BufferedImage image = pdfRenderer.renderImage(i, 1.25f); imageList.add(image); if (image.getWidth() > maxWidth) { maxWidth = image.getWidth(); } totalHeight += image.getHeight(); } // 绘制结果 BufferedImage result = new BufferedImage(maxWidth, totalHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = result.createGraphics(); int nowHeight = 0; for (BufferedImage bufferedImage : imageList) { // padding 为页面的左边距 int padding = (maxWidth - bufferedImage.getWidth()) / 2; g2d.drawImage(bufferedImage, padding, nowHeight, null); nowHeight += bufferedImage.getHeight(); } ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(result, "png", outputStream); String singlePicBase64 = "data:image/png;base64," + Base64.encodeBase64String(outputStream.toByteArray()); return singlePicBase64; }
到此这篇关于SpringBoot实现PDF转图片的代码示例的文章就介绍到这了,更多相关SpringBoot PDF转图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!