最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot實(shí)現(xiàn)PDF轉(zhuǎn)圖片的代碼示例

 更新時(shí)間:2024年08月11日 10:00:59   作者:TandK  
在本文中,我們使用SpringBoot演示了如何將PDF文件轉(zhuǎn)換為一張或多張圖片,這些示例演示了如何使用Java編程語(yǔ)言與其他開源技術(shù)集成,以實(shí)現(xiàn)各種文件格式之間的轉(zhuǎn)換,感興趣的小伙伴跟著小編一起來(lái)看看吧

不是單頁(yè)圖片,是多頁(yè)P(yáng)DF轉(zhuǎn)成一張圖片的邏輯。

我這里的場(chǎng)景是PDF轉(zhuǎn)成圖片之后返回給前端,前端再在圖片上實(shí)現(xiàn)簽字,并且可拖拽的邏輯,就是簽訂合同的場(chǎng)景。

但是這里只寫后端多頁(yè)P(yáng)DF轉(zhuǎn)圖片的邏輯。

先說(shuō)邏輯,后面直接上代碼,大致分為以下幾步:

  1. 讀取PDF文件(我的代碼里是將在線的URL轉(zhuǎn)成InputStream了)
  2. 按PDF的頁(yè)面循環(huán)計(jì)算圖片的寬度和高度,其中寬度為PDF最寬的那一頁(yè)的寬度(畢竟有的PDF比較騷,可能一頁(yè)是橫的,一頁(yè)是豎的),高度為所有頁(yè)面加起來(lái)的高度
  3. 用Graphics2D繪制
  4. 將Graphics2D的繪制結(jié)果輸出為圖片(只要有outputStream都好說(shuō),我這里是輸出成base64給前端了,沒(méi)什么存起來(lái)的必要)

好了,直接上代碼:

先在pom.xml導(dǎo)入依賴:

		<!--   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();
        }
        // 繪制結(jié)果
        BufferedImage result = new BufferedImage(maxWidth, totalHeight, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = result.createGraphics();
        int nowHeight = 0;
        for (BufferedImage bufferedImage : imageList) {
        	// padding 為頁(yè)面的左邊距
            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;
    }

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

相關(guān)文章

  • 迅速掌握J(rèn)ava容器中常用的ArrayList類與Vector類用法

    迅速掌握J(rèn)ava容器中常用的ArrayList類與Vector類用法

    這篇文章主要介紹了Java容器中常用的ArrayList類與Vector類用法,文中只對(duì)其最基本的功能給出了示例代碼,需要的朋友可以參考下
    2015-11-11
  • 字節(jié)二面SpringBoot可以同時(shí)處理多少請(qǐng)求

    字節(jié)二面SpringBoot可以同時(shí)處理多少請(qǐng)求

    這篇文章主要為大家介紹了字節(jié)二面之SpringBoot可以同時(shí)處理多少請(qǐng)求面試分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java中的任務(wù)調(diào)度框架quartz詳細(xì)解析

    Java中的任務(wù)調(diào)度框架quartz詳細(xì)解析

    這篇文章主要介紹了Java中的任務(wù)調(diào)度框架quartz詳細(xì)解析,Quartz 是一個(gè)完全由 Java 編寫的開源作業(yè)調(diào)度框架,為在 Java 應(yīng)用程序中進(jìn)行作業(yè)調(diào)度提供了簡(jiǎn)單卻強(qiáng)大的機(jī)制,需要的朋友可以參考下
    2023-11-11
  • 簡(jiǎn)單了解JAVA中類、實(shí)例與Class對(duì)象

    簡(jiǎn)單了解JAVA中類、實(shí)例與Class對(duì)象

    這篇文章主要介紹了簡(jiǎn)單了解JAVA中類、實(shí)例與Class對(duì)象,類是面向?qū)ο缶幊陶Z(yǔ)言的一個(gè)重要概念,它是對(duì)一項(xiàng)事物的抽象概括,可以包含該事物的一些屬性定義,以及操作屬性的方法,需要的朋友可以參考下
    2019-06-06
  • java Collection 之List學(xué)習(xí)介紹

    java Collection 之List學(xué)習(xí)介紹

    本篇文章小編為大家介紹,java Collection 之List學(xué)習(xí)介紹。需要的朋友參考下
    2013-04-04
  • MyBatis 動(dòng)態(tài)拼接Sql字符串的問(wèn)題

    MyBatis 動(dòng)態(tài)拼接Sql字符串的問(wèn)題

    MyBatis的動(dòng)態(tài)SQL,解決了SQL字符串拼接的痛苦。下文分步驟給大家詳細(xì)介紹了MyBatis 動(dòng)態(tài)拼接Sql字符串的問(wèn)題,非常不錯(cuò),感興趣的朋友一起看下吧
    2016-08-08
  • 淺談java中math類中三種取整函數(shù)的區(qū)別

    淺談java中math類中三種取整函數(shù)的區(qū)別

    下面小編就為大家?guī)?lái)一篇淺談java中math類中三種取整函數(shù)的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • springboot實(shí)現(xiàn)極驗(yàn)校驗(yàn)的項(xiàng)目實(shí)踐

    springboot實(shí)現(xiàn)極驗(yàn)校驗(yàn)的項(xiàng)目實(shí)踐

    在系統(tǒng)業(yè)務(wù)中,需要想客戶發(fā)送手機(jī)驗(yàn)證碼,進(jìn)行驗(yàn)證后,才能提交,本文主要介紹了springboot實(shí)現(xiàn)極驗(yàn)校驗(yàn)的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • Java使用Freemarker頁(yè)面靜態(tài)化生成的實(shí)現(xiàn)

    Java使用Freemarker頁(yè)面靜態(tài)化生成的實(shí)現(xiàn)

    這篇文章主要介紹了Java使用Freemarker頁(yè)面靜態(tài)化生成的實(shí)現(xiàn),頁(yè)面靜態(tài)化是將原來(lái)的動(dòng)態(tài)網(wǎng)頁(yè)改為通過(guò)靜態(tài)化技術(shù)生成的靜態(tài)網(wǎng)頁(yè),FreeMarker?是一個(gè)用?Java?語(yǔ)言編寫的模板引擎,它基于模板來(lái)生成文本輸,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-06-06
  • Java CompletableFuture與ForkJoinPool的關(guān)系及說(shuō)明

    Java CompletableFuture與ForkJoinPool的關(guān)系及說(shuō)明

    這篇文章主要介紹了Java CompletableFuture與ForkJoinPool的關(guān)系及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05

最新評(píng)論

兴隆县| 泰宁县| 滨海县| 城市| 上杭县| 通辽市| 九龙县| 那坡县| 苍溪县| 田阳县| 高要市| 连平县| 前郭尔| 唐海县| 大邑县| 慈溪市| 沐川县| 海安县| 合江县| 南投市| 恩平市| 淮安市| 德化县| 海盐县| 德钦县| 景泰县| 烟台市| 彰武县| 宝应县| 易门县| 邵阳县| 永春县| 依安县| 吕梁市| 隆回县| 长治县| 昌乐县| 丰台区| 德钦县| 贡山| 泰顺县|