国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

java實現(xiàn)圖片、word、pdf等多文件融合到一個pdf(word轉(zhuǎn)pdf)

這篇具有很好參考價值的文章主要介紹了java實現(xiàn)圖片、word、pdf等多文件融合到一個pdf(word轉(zhuǎn)pdf)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文主要介紹了srpingboot如何將 jpg、jpeg、png、pdf、docx、doc六種格式文件合并輸出成一個pdf文件以及word文檔如何轉(zhuǎn)換為pdf,關(guān)鍵是開源免費
在日常工作學(xué)習(xí)中免不了會涉及到將多種格式的文件合并為一個pdf或者是將word文檔、ppt、excel等轉(zhuǎn)換為pdf。廢話不多說,直接上代碼

一、使用 PDFBox 合并多種格式文件成 PDF 文件

1.添加依賴

在 pom.xml 文件中添加 PDFBox 的依賴:

<dependency>
  <groupId>org.apache.pdfbox</groupId>
  <artifactId>pdfbox</artifactId>
  <version>2.0.24</version>
</dependency>
 <dependency>
    <groupId>org.apache.directory.studio</groupId>
    <artifactId>org.apache.commons.io</artifactId>
    <version>2.4</version>
</dependency>
<dependency>
   <groupId>commons-io</groupId>
   <artifactId>commons-io</artifactId>
   <version>2.7</version>
</dependency>
<dependency>
   <groupId>cn.hutool</groupId>
   <artifactId>hutool-all</artifactId>
   <version>5.7.12</version>
</dependency>

2.實現(xiàn)代碼

在 Spring Boot 項目中,新建一個類 MergeFilesToPDFUtil,并添加如下代碼:

import org.apache.commons.io.FileUtils;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.jodconverter.DocumentConverter;
import org.jodconverter.document.DefaultDocumentFormatRegistry;

import javax.annotation.Resource;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;


/**
 * @ClassName MergeFilesToPDFUtil
 * @Description
 * @Author hzy
 * @Date 2023/4/6 10:56
 **/
public class MergeFilesToPDFUtil {

    @Resource
    public DocumentConverter documentConverter;


    /**
     *
     * @param fileNames 需要轉(zhuǎn)換的文件列表(需帶文件路徑)
     * @param outputFile 輸出文件路徑 如:/test/output.pdf
     */
    public String generatePdf(List<String> fileNames, String outputFile) {
        List<InputStream> inputStreams = new ArrayList<>();
        List<PDDocument> pdDocuments = new ArrayList<>();
        List<PDDocument> pdfdocuments = new ArrayList<>();
        //生成臨時文件的路徑
        String url = "/home/tempFile/";

        try {
            File file = new File(outputFile);
            if (!file.exists()) {
                if (!file.getParentFile().exists()) {
                    file.getParentFile().mkdirs();
                }
                file.createNewFile();
            }
            // 創(chuàng)建一個空的pdf文檔
            PDDocument document = new PDDocument();
            // 依次讀取要合并的各個文件,并將其內(nèi)容添加到pdf文檔中
            for (String fileName : fileNames) {
                String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1);
                //讀取jpg、jpeg、png格式的文件
                if (fileExt.equalsIgnoreCase("jpg") || fileExt.equalsIgnoreCase("jpeg")
                        || fileExt.equalsIgnoreCase("png")) {
                    PDImageXObject image = PDImageXObject.createFromFile(fileName, document);
                    PDPage page = new PDPage(new PDRectangle(image.getWidth(), image.getHeight()));
                    document.addPage(page);
                    try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
                        contentStream.drawImage(image, 0, 0);
                    }
                } else if (fileExt.equalsIgnoreCase("pdf")) {
                    PDDocument pdf = PDDocument.load(new File(fileName));
                    for (PDPage page : pdf.getPages()) {
                        document.addPage(page);
                    }
                    pdfdocuments.add(pdf);
                } else if (fileExt.equalsIgnoreCase("docx") || fileExt.equalsIgnoreCase("doc")) {
                    String pdfFile = System.currentTimeMillis() + ".pdf";
                    String tempPdfUrl = url + "/" + pdfFile;
                    // 轉(zhuǎn)換word文件為pdf
                    if (fileExt.equalsIgnoreCase("docx")) {
                        documentConverter.convert(new File(fileName)).as(DefaultDocumentFormatRegistry.DOCX).
                                to(new File(tempPdfUrl)).as(DefaultDocumentFormatRegistry.PDF).execute();
                    } else {
                        documentConverter.convert(new File(fileName)).as(DefaultDocumentFormatRegistry.DOC)
                                .to(new File(tempPdfUrl)).as(DefaultDocumentFormatRegistry.PDF).execute();
                    }
                    //這里是將轉(zhuǎn)完的pdf添加到新的pdf頁面之后
                    PDDocument load = PDDocument.load(new File(tempPdfUrl));
                    for (PDPage page : load.getPages()) {
                        document.addPage(page);
                    }
                    //將生成的pdf臨時文件刪除掉
                    FileUtils.forceDelete(new File(tempPdfUrl));
                    pdDocuments.add(load);
                }
            }
            // 將pdf文檔保存到本地
            document.save(outputFile);
            document.close();
            return outputFile;
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            closeIo(inputStreams, pdDocuments, pdfdocuments);
        }
    }
    /**
     * 關(guān)閉所有的io流
     * @param inputStreams
     * @param pdDocuments
     * @param pdfdocuments
     */
    public static void closeIo(List<InputStream> inputStreams ,List<PDDocument> pdDocuments,List<PDDocument> pdfdocuments){
        try {
            Thread.sleep(5000);
            for (InputStream inputStream : inputStreams) {
                inputStream.close();
            }
            for (PDDocument pdDocument : pdDocuments) {
                pdDocument.close();
            }
            for (PDDocument pdfdocument : pdfdocuments) {
                pdfdocument.close();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }
}

二、使用 LibreOffice 將word文檔轉(zhuǎn)為pdf

注意,本文在添加 Word 文件時,我們使用了 LibreOffice的方法將其轉(zhuǎn)換為 PDF 文件。然后又通過pdfbox進(jìn)行的合并,如果有更好的方式將word轉(zhuǎn)為pdf那么只需要修改相關(guān)代碼即可,不用引入libreoffice相關(guān)依賴。以下是使用LibreOffice的方式,僅供參考:

1.安裝 LibreOffice

首先需要在服務(wù)器上安裝 LibreOffice。在 Linux 上,可以使用命令行工具安裝:

sudo apt-get install libreoffice

在 Windows/mac上,可以從 LibreOffice 官網(wǎng)下載安裝程序進(jìn)行安裝。

2.添加依賴

在 pom.xml 文件中添加以下依賴:

<!--jodconverter 核心-->
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-spring-boot-starter</artifactId>
            <version>4.4.6</version>
        </dependency>
        <!--jodconverter 引用LibreOffice-->
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-local-lo</artifactId>
            <version>4.4.6</version>
        </dependency>

3.修改配置文件

在application.yml 文件中添加以下配置:

#配置lireoffice
jodconverter:
  local:
    enabled: true
    #libreoffice安裝路徑
    office-home: /Applications/LibreOffice.app/Contents
    task-execution-timeout: 86400000
    task-queue-timeout: 86400000
    process-timeout: 86400000

三、進(jìn)行測試

請注意:為方便觀看,這里采用使用main方法的形式進(jìn)行演示,在實際開發(fā)過程中 main方法無法調(diào)用非靜態(tài)方法generatePdf,需要使用service進(jìn)行調(diào)用,否則DocumentConverter無法注入文章來源地址http://www.zghlxwxcb.cn/news/detail-554842.html

public static void main(String[] args) throws Exception {
        // 要合并的文件列表
        List<String> fileNames = new ArrayList<>();
        fileNames.add("/test/file1.jpg");
        fileNames.add("/test/file2.jpeg");
        fileNames.add("/test/file3.png");
        fileNames.add("/test/file4.pdf");
        fileNames.add("/test/file5.docx");
        fileNames.add("/test/file6.doc");
        // 輸出的pdf文件名
        String outputFile = "/test/output.pdf";
        generatePdf(fileNames,outputFile);
    }

到了這里,關(guān)于java實現(xiàn)圖片、word、pdf等多文件融合到一個pdf(word轉(zhuǎn)pdf)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java使用pdfbox進(jìn)行pdf和圖片之間的轉(zhuǎn)換

    Java使用pdfbox進(jìn)行pdf和圖片之間的轉(zhuǎn)換

    pdfbox是Apache開源的一個項目,支持pdf文檔操作功能。 官網(wǎng)地址:?Apache PDFBox | A Java PDF Library 支持的功能如下圖. 引入依賴

    2024年02月06日
    瀏覽(24)
  • Java 利用pdfbox將圖片和成到pdf指定位置

    業(yè)務(wù)背景:用戶在手機(jī)APP上進(jìn)行簽名,前端將簽完名字的圖片傳入后端,后端合成新的pdf. 廢話不多說,上代碼: 注意:前端傳過來的圖片必須是透明的,否則合成的時候簽名處會有邊框 ? ? ? ?

    2024年02月09日
    瀏覽(23)
  • 前端實現(xiàn)pdf,圖片,word文件預(yù)覽

    前端實現(xiàn)pdf,圖片,word文件預(yù)覽

    需求:實現(xiàn)一個在線預(yù)覽pdf、excel、word、圖片等文件的功能。 介紹:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代碼實現(xiàn)所有功能,建議以下的預(yù)覽文件標(biāo)簽可以在外層包裹一層彈窗。 iframe標(biāo)簽?zāi)軌驅(qū)⒘硪粋€HTML頁面嵌入到當(dāng)前頁面中,我們的圖片也能夠使用iframe標(biāo)簽來

    2024年02月11日
    瀏覽(26)
  • 前端實現(xiàn)文件預(yù)覽(pdf、excel、word、圖片)

    前端實現(xiàn)文件預(yù)覽(pdf、excel、word、圖片)

    需求:實現(xiàn)一個在線預(yù)覽pdf、excel、word、圖片等文件的功能。 介紹:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代碼實現(xiàn)所有功能,建議以下的預(yù)覽文件標(biāo)簽可以在外層包裹一層彈窗。 sandbox 這個屬性如果是單純預(yù)覽圖片可以不使用,該屬性對呈現(xiàn)在 iframe 框架中的內(nèi)容

    2024年02月10日
    瀏覽(49)
  • java中pdfbox處理pdf常用方法(讀取、寫入、合并、拆分、寫文字、寫圖片)

    java中pdfbox處理pdf常用方法(讀取、寫入、合并、拆分、寫文字、寫圖片)

    方法代碼: 測試用例: 2.1寫文字 方法代碼: 測試用例: A.pdf: A2.pdf: 2.2寫圖片 方法代碼: 測試用例: A.pdf: pic.jpg: A2.pdf: 方法代碼: 測試用例: 方法代碼: 測試用例: 引用鏈接: (17條消息) 使用Apache PDFBox實現(xiàn)拆分、合并PDF_似有風(fēng)中泣的博客-CSDN博客 (17條消息) Java使用P

    2024年02月11日
    瀏覽(32)
  • Java使用ftl模板文件生成Word,以及Word轉(zhuǎn)換圖片或Pdf工具類

    Java使用ftl模板文件生成Word,以及Word轉(zhuǎn)換圖片或Pdf工具類

    一、寫在前面 最近在項目中使用打印功能,發(fā)現(xiàn)這個功能我已經(jīng)寫過多次了,下面這個文章的發(fā)步日期在2020年,不得不感慨時間之快啊。 https://blog.csdn.net/weixin_43238452/article/details/109636200?spm=1001.2014.3001.5501 下面介紹一下應(yīng)用場景:這次項目依舊是springboot項目,使用ftl模版生

    2024年02月15日
    瀏覽(38)
  • 記錄--前端實現(xiàn)文件預(yù)覽(pdf、excel、word、圖片)

    記錄--前端實現(xiàn)文件預(yù)覽(pdf、excel、word、圖片)

    需求:實現(xiàn)一個在線預(yù)覽pdf、excel、word、圖片等文件的功能。 介紹:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代碼實現(xiàn)所有功能,建議以下的預(yù)覽文件標(biāo)簽可以在外層包裹一層彈窗。 iframe標(biāo)簽?zāi)軌驅(qū)⒘硪粋€HTML頁面嵌入到當(dāng)前頁面中,我們的圖片也能夠使用iframe標(biāo)簽來

    2024年02月09日
    瀏覽(43)
  • Java將獲取的參數(shù),圖片以及pdf文件放入到word文檔指定位置

    Java將獲取的參數(shù),圖片以及pdf文件放入到word文檔指定位置

    首先引入的依賴 接下面的是template.docx文檔,參數(shù)是以{{paramName}}格式的,為什么要以這種格式,是因為下面的方法,在替換參數(shù)的時候需要 但是從數(shù)據(jù)庫獲取的參數(shù)跟模板中的參數(shù)一一對應(yīng)上即可,格式如下(我是json形式展示的): { ?? ?\\\"countQuota\\\": \\\"1\\\", ?? ?\\\"noEmission\\\": \\\"1\\\", ?

    2024年02月15日
    瀏覽(35)
  • 如何通過Java的Apache PDFBox庫制作一個PDF表格模板并填充數(shù)據(jù)

    要使用Java的Apache PDFBox庫制作一個PDF表格模板并填充數(shù)據(jù),你需要遵循以下步驟: 添加依賴 :首先,確保你的項目中包含了Apache PDFBox的依賴。如果你使用Maven,可以在你的 pom.xml 文件中添加以下依賴: 創(chuàng)建PDF模板 :你可以使用PDFBox創(chuàng)建一個簡單的PDF模板,或者使用其他工具

    2024年02月22日
    瀏覽(23)
  • aspose-words、itextpdf完美解決java將word、excel、ppt、圖片轉(zhuǎn)換為pdf文件

    aspose-words、itextpdf完美解決java將word、excel、ppt、圖片轉(zhuǎn)換為pdf文件

    我是 傲驕鹿先生 ,沉淀、學(xué)習(xí)、分享、成長。 如果你覺得文章內(nèi)容還可以的話,希望不吝您的「一鍵三連」,文章里面有不足的地方希望各位在評論區(qū)補(bǔ)充疑惑、見解以及面試中遇到的奇葩問法 面對日常開發(fā)過程中,將各種文件轉(zhuǎn)換為pdf文件的問題,總是讓人頭疼,這次終

    2024年02月03日
    瀏覽(96)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包