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

Java實現(xiàn)word轉(zhuǎn)pdf并在關鍵字位置插入圖片

 更新時間:2024年11月03日 15:06:38   作者:小七蒙恩  
這篇文章主要為大家詳細介紹了如何利用Java實現(xiàn)word轉(zhuǎn)pdf,并在word中關鍵字位置插入圖片,感興趣的小伙伴可以跟隨小編一起學習一下

java word轉(zhuǎn)pdf、word中關鍵字位置插入圖片 工具類

1.pom依賴

		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>3.15</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>3.15</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-scratchpad</artifactId>
			<version>3.15</version>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>ooxml-schemas</artifactId>
			<version>1.4</version>
		</dependency>

		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml-schemas</artifactId>
			<version>3.15</version>

2.依賴jar包

        <dependency>
            <groupId>com.aspose</groupId>
            <artifactId>aspose-words</artifactId>
            <version>15.8.0</version>
            <scope>system</scope>
            <systemPath>${pom.basedir}/src/main/webapp/WEB-INF/lib/aspose-words-15.8.0-jdk16.jar</systemPath>
        </dependency>

aspose-words是需要在我們項目中引入的,并且使用時要在resouces目錄下導入license.xml文件,否則生成的文件抬頭會有紅色的license信息。

3.工具類

import com.aspose.words.*;
import com.aspose.words.Document;

import org.apache.poi.xwpf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * @author dume
 * @ClassName WordToPdf
 * @description: TODO
 * @date 2024年07月02日
 * @version: 1.0
 */

public class WordUtils {
    private static Logger logger = LoggerFactory.getLogger(WordUtils.class);
    private static final String BASE_PATH = WordUtils.class.getClassLoader().getResource("").getPath();

    /**
     *  Word轉(zhuǎn)Pdf
     * @param sourcePath 原路徑
     * @param targetPath 轉(zhuǎn)出路徑
     * @return
     */
    public static boolean  WordToPdf(String sourcePath,String targetPath){
        FileOutputStream os = null;
        try{
            // 驗證License 若不驗證則轉(zhuǎn)化出的pdf文檔會有水印產(chǎn)生
        if (!getLicense()) {
            logger.info("license驗證失敗");
            return false;
        }

        File file = new File(targetPath);
         os = new FileOutputStream(file);
        FontSettings.setFontsFolder(BASE_PATH, true);
        FontSettings.setDefaultFontName("STFANGSO");
        Document doc = new Document(sourcePath);
        doc.save(os, SaveFormat.PDF);
        os.flush();
        os.close();
        }catch (Exception e){
            e.printStackTrace();
            logger.error(e.getMessage());
            return false;
        }finally {
            if(os!=null){
               try{
                   os.close();
               }catch (Exception e){

               }
            }
        }
       return true;
    }

    /**
     *  word中插入圖片方法
     * @param sourcePath  word路徑
     * @param imgPath     圖片路徑
     * @param keyWords    關鍵字
     * @return   插入是否成功
     */
    public static boolean InsertImg(String sourcePath,String imgPath,String keyWords){
        try{
            // 驗證License 若不驗證則轉(zhuǎn)化出的pdf文檔會有水印產(chǎn)生
            if (!getLicense()) {
                logger.info("license驗證失敗");
                return false;
            }
            Document doc = new Document(sourcePath);
            DocumentBuilder builder = new DocumentBuilder(doc);

            //插入圖片的方法
            NodeCollection runs = doc.getChildNodes(NodeType.PARAGRAPH, true);
            for (int i = 0; i < runs.getCount(); i++) {
                Node r = runs.get(i);
                String text = r.getText();
                //獲取鍵
                if(text.contains(keyWords)){
                    //鎖定到當前段落即實現(xiàn)頁面變換
                    builder.moveTo(r);
                    builder.insertImage(imgPath, RelativeHorizontalPosition.PAGE, 205, RelativeVerticalPosition.PAGE, 0, 20, 7, WrapType.INLINE);
                    break;
                }
            }
            doc.save(sourcePath);
        }catch (Exception e){
            e.printStackTrace();
            logger.error(e.getMessage());
            return false;
        }
        return true;
    }

   
    public static boolean getLicense() {
        boolean result = false;
        try {
            FileInputStream is = new FileInputStream (BASE_PATH+"license.xml");
            License asposeLicense = new License();
            asposeLicense.setLicense(is);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }


    /***
     * @Description :替換段落文本
     * @param document docx解析對象
     * @param textMap  需要替換的信息集合
     * @return void
     */
    public static void changeText(XWPFDocument document, Map<String, Object> textMap) {
        // 獲取段落集合
        Iterator<XWPFParagraph> iterator = document.getParagraphsIterator();
        XWPFParagraph paragraph = null;
        while (iterator.hasNext()) {
            paragraph = iterator.next();
            // 判斷此段落是否需要替換
            if (checkText(paragraph.getText())) {
                replaceValue(paragraph, textMap);
            }
        }
    }

    /***
     * @Description :替換表格內(nèi)的文字
     * @param document
     * @param data
     * @return void
     */
    public static void changeTableText(XWPFDocument document, Map<String, Object> data) {
        // 獲取文件的表格
        Iterator<XWPFTable> tableList = document.getTablesIterator();
        XWPFTable table;
        List<XWPFTableRow> rows;
        List<XWPFTableCell> cells;
        // 循環(huán)所有需要進行替換的文本,進行替換
        while (tableList.hasNext()) {
            table = tableList.next();
            if (checkText(table.getText())) {
                rows = table.getRows();
                // 遍歷表格,并替換模板
                for (XWPFTableRow row : rows) {
                    cells = row.getTableCells();
                    for (XWPFTableCell cell : cells) {
                        // 判斷單元格是否需要替換
                        if (checkText(cell.getText())) {
                            List<XWPFParagraph> paragraphs = cell.getParagraphs();
                            for (XWPFParagraph paragraph : paragraphs) {
                                replaceValue(paragraph, data);
                            }
                        }
                    }
                }
            }
        }
    }

    /***
     * @Description :檢查文本中是否包含指定的字符(此處為“$”)
     * @param text
     * @return boolean
     */
    public static boolean checkText(String text) {
        boolean check = false;
        if (text.contains("$")) {
            check = true;
        }
        return check;
    }

    /***
     * @Description :替換內(nèi)容
     * @param paragraph
     * @param textMap
     * @return void
     */
    public static void replaceValue(XWPFParagraph paragraph, Map<String, Object> textMap) {
        XWPFRun run, nextRun;
        String runsText;
        List<XWPFRun> runs = paragraph.getRuns();
        for (int i = 0; i < runs.size(); i++) {
            run = runs.get(i);
            runsText = run.getText(0);
            if (runsText.contains("${") || (runsText.contains("$") && runs.get(i + 1).getText(0).substring(0, 1).equals("{"))) {
                while (!runsText.contains("}")) {
                    nextRun = runs.get(i + 1);
                    runsText = runsText + nextRun.getText(0);
                    //刪除該節(jié)點下的數(shù)據(jù)
                    paragraph.removeRun(i + 1);
                }
                Object value = changeValue(runsText, textMap);
                //判斷key在Map中是否存在
                String replaceText = runsText.replace("${", "").replace("}", "");
                if (textMap.containsKey(replaceText)) {
                    run.setText(value.toString(), 0);
                } else {
                    //如果匹配不到,則不修改
                    run.setText(runsText, 0);
                }
            }
        }
    }

    /***
     * @Description :匹配參數(shù)
     * @param value
     * @param textMap
     * @return java.lang.Object
     */
    public static Object changeValue(String value, Map<String, Object> textMap) {
        Object valu = "";
        for (Map.Entry<String, Object> textSet : textMap.entrySet()) {
            // 匹配模板與替換值 格式${key}
            String key = textSet.getKey();
            if (value.contains(key)) {
                valu = textSet.getValue();
            }
        }
        return valu;
    }

}

以上就是Java實現(xiàn)word轉(zhuǎn)pdf并在關鍵字位置插入圖片的詳細內(nèi)容,更多關于Java word轉(zhuǎn)pdf的資料請關注腳本之家其它相關文章!

相關文章

  • Spring中的路徑匹配器AntPathMatcher詳解

    Spring中的路徑匹配器AntPathMatcher詳解

    這篇文章主要介紹了Spring中的路徑匹配器AntPathMatcher詳解,Spring的PathMatcher路徑匹配器接口,用于支持帶通配符的資源路徑匹配,本文提供了部分實現(xiàn)代碼,需要的朋友可以參考下
    2023-09-09
  • Java中關于子類覆蓋父類的拋出異常問題

    Java中關于子類覆蓋父類的拋出異常問題

    今天小編就為大家分享一篇關于Java中關于子類覆蓋父類的拋出異常問題,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • Java 并行數(shù)據(jù)處理和性能分析

    Java 并行數(shù)據(jù)處理和性能分析

    這篇文章主要介紹了Java 并行數(shù)據(jù)處理和性能分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java軟件設計模式之橋接模式詳解

    Java軟件設計模式之橋接模式詳解

    這篇文章主要介紹了Java軟件設計模式之橋接模式詳解,橋接模式也叫做橋梁模式,結構型設計模式的一種,顧名思義,就是用來連接兩個部分,為被分離了的抽象部分和實現(xiàn)部分搭橋,需要的朋友可以參考下
    2023-07-07
  • SpringBoot2開發(fā)從0開始Spring?Initailizr初始化

    SpringBoot2開發(fā)從0開始Spring?Initailizr初始化

    這篇文章主要為大家介紹了SpringBoot2從0開始lombok、devtools、Spring?Initailizr的開發(fā)技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • JavaWeb項目web.xml中出現(xiàn)Element xxx is not allowed here問題

    JavaWeb項目web.xml中出現(xiàn)Element xxx is not al

    這篇文章主要介紹了JavaWeb項目web.xml中出現(xiàn)Element xxx is not allowed here問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • springboot利用aspose預覽office文件的實現(xiàn)過程

    springboot利用aspose預覽office文件的實現(xiàn)過程

    這篇文章主要給大家介紹了關于springboot利用aspose預覽office文件的相關資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考價值,需要的朋友可以參考下
    2021-06-06
  • Spring Cloud實現(xiàn)跨語言微服務通信的三種方案

    Spring Cloud實現(xiàn)跨語言微服務通信的三種方案

    本文深入探討Spring Cloud實現(xiàn)跨語言微服務通信的三大核心方案: Sidecar模式:通過代理非Java服務,性能提升5倍,延遲從150ms降至30ms ASM+MSE方案:結合阿里云服務網(wǎng)格,吞吐量提升3倍至2400TPS Feign+自定義序列化,需要的朋友可以參考下
    2026-05-05
  • JavaWeb文件上傳下載功能深入分析(二)

    JavaWeb文件上傳下載功能深入分析(二)

    這篇文章主要為大家詳細解析了JavaWeb文件上傳與下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Java的布爾類型基本介紹

    Java的布爾類型基本介紹

    這篇文章主要介紹了Java的布爾類型,是Java入門學習中的基礎知識,需要的朋友可以參考下
    2015-10-10

最新評論

项城市| 五常市| 汽车| 宁国市| 昌乐县| 温泉县| 额尔古纳市| 鄂尔多斯市| 阜城县| 偏关县| 昌乐县| 青岛市| 毕节市| 综艺| 明光市| 江油市| 那曲县| 平阳县| 永春县| 永城市| 湖南省| 利辛县| 九台市| 乐亭县| 汉阴县| 格尔木市| 安溪县| 绩溪县| 洪洞县| 斗六市| 营口市| 宣汉县| 常州市| 陕西省| 阳原县| 莎车县| 彭山县| 泰兴市| 乐山市| 中宁县| 九台市|