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

Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-圖表篇

這篇具有很好參考價(jià)值的文章主要介紹了Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-圖表篇。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

往期系列傳送門:

Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-文本段落篇

(需要完整代碼的直接看最后位置!?。。?/span>

前言:

補(bǔ)充Word中圖表的知識(shí):

每個(gè)圖表在word中都有一個(gè)內(nèi)置的Excel,用于操作數(shù)據(jù)。

Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-圖表篇,POI系列,java,word

內(nèi)置Excel有類別、系列、值三個(gè)概念:

Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-圖表篇,POI系列,java,word

poi可以獲取word中的圖表對象,通過這個(gè)圖表對象來操作Excel的系列、類別、值。這樣是不是思路很清晰了,直接看代碼:

    public void exportWord() throws Exception {
        //獲取word模板
        InputStream is = WordController.class.getResourceAsStream("/template/wordChartTemplate.docx");

        try {
            ZipSecureFile.setMinInflateRatio(-1.0d);
            // 獲取docx解析對象
            XWPFDocument document = new XWPFDocument(is);
            // 解析替換第一個(gè)圖表數(shù)據(jù),根據(jù)具體業(yè)務(wù)封裝數(shù)據(jù)
            List<Number[]> singleBarValues = new ArrayList<>();
            // 第一個(gè)系列的值
            singleBarValues.add(new Number[]{3232, 5222, 2424, 2346, 3123});
            // 第二個(gè)系列的值
            singleBarValues.add(new Number[]{42.2, 24.41, 31.73, 74.83, 53.28});
            // x軸的值
            String[] xValues = new String[]{"山東省", "河南省", "北京市", "天津市", "陜西省"};
            changeChart1(document, singleBarValues, xValues);
            // 輸出新文件
            FileOutputStream fos = new FileOutputStream("D:\\test\\test.docx");
            document.write(fos);
            document.close();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    private static XWPFChart changeChart1(XWPFDocument document, List<Number[]> singleBarValues, String[] xValues) {
        //獲取word中所有圖表對象
        List<XWPFChart> charts = document.getCharts();

        //獲取第一個(gè)單系列柱狀圖
        XWPFChart docChart = charts.get(0);

        //系列信息
        String[] seriesNames = {"出生人口數(shù)","出生率"};
        //分類信息
        String[] cats = xValues;
        // 業(yè)務(wù)數(shù)據(jù)
        singleBarValues.add(singleBarValues.get(0));
        singleBarValues.add(singleBarValues.get(1));
        //獲取圖表數(shù)據(jù)對象
        XDDFChartData chartData = null;
        //word圖表均對應(yīng)一個(gè)內(nèi)置的excel,用于保存圖表對應(yīng)的數(shù)據(jù)
        //excel中 第一列第二行開始的數(shù)據(jù)為分類信息
        //CellRangeAddress(1, categories.size(), 0, 0) 四個(gè)參數(shù)依次為 起始行 截止行 起始列 截止列。
        //excel中分類信息的范圍
        String catDataRange = docChart.formatRange(new CellRangeAddress(1, cats.length, 0, 0));
        //根據(jù)分類信息的范圍創(chuàng)建分類信息的數(shù)據(jù)源
        XDDFDataSource<?> catDataSource = XDDFDataSourcesFactory.fromArray(cats, catDataRange, 0);
        //更新數(shù)據(jù)
        for (int i = 0; i < seriesNames.length; i++) {
            chartData = docChart.getChartSeries().get(i);
            //excel中各系列對應(yīng)的數(shù)據(jù)的范圍
            String valDataRange = docChart.formatRange(new CellRangeAddress(1, cats.length, i + 1, i + 1));
            //根據(jù)數(shù)據(jù)的范圍創(chuàng)建值的數(shù)據(jù)源
            Number[] val = singleBarValues.get(i);
            XDDFNumericalDataSource<Number> valDataSource = XDDFDataSourcesFactory.fromArray(val, valDataRange, i + 1);
            //獲取圖表系列的數(shù)據(jù)對象
            XDDFChartData.Series series = chartData.getSeries(0);
            //替換系列數(shù)據(jù)對象中的分類和值
            series.replaceData(catDataSource, valDataSource);
            //修改系列數(shù)據(jù)對象中的標(biāo)題
//            CellReference cellReference = docChart.setSheetTitle(seriesNames[i], 1);
//            series.setTitle(seriesNames[i], cellReference);
            //更新圖表數(shù)據(jù)對象
            docChart.plot(chartData);
        }
        //圖表整體的標(biāo)題 傳空值則不替換標(biāo)題
//        if (!Strings.isNullOrEmpty(title)) {
//            docChart.setTitleText(title);
//            docChart.setTitleOverlay(false);
//        }
        return docChart;
    }

導(dǎo)出效果:

Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-圖表篇,POI系列,java,word

重點(diǎn)!重點(diǎn)!重點(diǎn)!

看下面這個(gè)圖表用上述方法能成功導(dǎo)出嗎?

Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-圖表篇,POI系列,java,word

像這種x軸帶有分類的通過上述方法已經(jīng)不行了,原因是在用

chartData = docChart.getChartSeries().get(i);

這個(gè)方法獲取系列對象時(shí)報(bào)空指針異常??赡苁莗oi不支持這個(gè)格式的x軸。

那我們只能換個(gè)角度來處理了,之前說過Word中每個(gè)圖表都是一個(gè)內(nèi)置Excel控制,那Poi操作Excel我可太會(huì)了,不熟悉的可以看之前Poi處理Excel的文章。

果然,我們可以通過圖表對象拿到XSSFWorkbook

//獲取word中所有圖表對象
List<XWPFChart> charts = doc.getCharts();
//獲取第一個(gè)單系列柱狀圖
XWPFChart singleBarChar = charts.get(1);

XSSFWorkbook workbook = singleBarChar.getWorkbook();
XSSFSheet sheet = workbook.getSheetAt(0);
int lastRowNum = sheet.getLastRowNum();
// 更新內(nèi)置excel數(shù)據(jù)
for (int i = 1; i <= lastRowNum; i++) {
    XSSFRow row = sheet.getRow(i);
    XSSFCell cell = row.getCell(2);
    cell.setCellValue(Double.parseDouble(n1[i - 1].toString()));
    XSSFCell cell1 = row.getCell(3);
    cell1.setCellValue(Double.parseDouble(n2[i - 1].toString()));
}

處理完后,發(fā)現(xiàn)導(dǎo)出的Word雖然內(nèi)置的Excel數(shù)據(jù)替換成我們的數(shù)據(jù)了,頁面顯示的還是之前模板數(shù)據(jù),必須點(diǎn)擊編輯后頁面數(shù)據(jù)才顯示Excel中的值。

現(xiàn)在問題成了,怎么刷新內(nèi)置Excel數(shù)據(jù),簡單圖表通過docChart.plot(chartData);方法直接刷新,現(xiàn)在拿不到了怎么辦?

上一篇(Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-文本段落篇)說到,poi是將word解析成xml操作的,那Word頁面顯示的圖表也應(yīng)該是xml來生成的,我們只需把對應(yīng)標(biāo)簽數(shù)據(jù)也改成我們的數(shù)據(jù),那頁面數(shù)據(jù)和內(nèi)置Excel數(shù)據(jù)不就保持一致了。

通過Debug看下一圖表對象

Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-圖表篇,POI系列,java,word

可以發(fā)現(xiàn)果然有標(biāo)簽是控制值顯示的,下面我們只需按照標(biāo)簽順序找到位置替換值就可以了。

// 內(nèi)置excel數(shù)據(jù)不會(huì)更新到頁面,需要刷新頁面數(shù)據(jù)
CTChart ctChart = singleBarChar.getCTChart();
CTPlotArea plotArea = ctChart.getPlotArea();
// 第一列數(shù)據(jù)
CTBarChart barChartArray = plotArea.getBarChartArray(0);
List<CTBarSer> serList = barChartArray.getSerList();
CTBarSer ctBarSer = serList.get(0);
List<CTNumVal> ptList = ctBarSer.getVal().getNumRef().getNumCache().getPtList();
for (int i = 0; i < ptList.size(); i++) {
    ptList.get(i).setV(String.valueOf(n1[i]));
}
// 第二列數(shù)據(jù)
CTLineChart lineChartArray = plotArea.getLineChartArray(0);
List<CTLineSer> lineSers = lineChartArray.getSerList();
CTLineSer ctLineSer = lineSers.get(0);
List<CTNumVal> ptList1 = ctLineSer.getVal().getNumRef().getNumCache().getPtList();
for (int i = 0; i < ptList1.size(); i++) {
    ptList1.get(i).setV(String.valueOf(n2[i]));
}

導(dǎo)出效果:

Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-圖表篇,POI系列,java,word

完整代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-785891.html

package com.javacoding.controller;

import cn.hutool.core.util.RandomUtil;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.util.ZipSecureFile;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xddf.usermodel.chart.*;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFChart;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.openxmlformats.schemas.drawingml.x2006.chart.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.*;
import java.util.*;


@RestController
@RequestMapping("/word")
public class WordController {

    @RequestMapping("/export")
    public void exportWord() throws Exception {
        //獲取word模板
        InputStream is = WordController.class.getResourceAsStream("/template/wordChartTemplate.docx");

        try {
            ZipSecureFile.setMinInflateRatio(-1.0d);
            // 獲取docx解析對象
            XWPFDocument document = new XWPFDocument(is);
            // 解析替換文本段落對象
            // 替換word模板中占位符數(shù)據(jù),根據(jù)業(yè)務(wù)自行封裝
            Map<String, String> params = new HashMap<>();
            params.put("area1", "山東省");
            params.put("area2", "河南省");
            params.put("area3", "北京市");
            params.put("area4", "天津市");
            params.put("area5", "陜西省");
            params.put("areaRate1", "42.15");
            params.put("areaRate2", "22.35");
            params.put("areaRate3", "42.35");
            params.put("areaRate4", "23.11");
            params.put("areaRate5", "15.34");
            changeText(document, params);
            // 解析替換第一個(gè)圖表數(shù)據(jù),根據(jù)具體業(yè)務(wù)封裝數(shù)據(jù)
            List<Number[]> singleBarValues = new ArrayList<>();
            // 第一個(gè)系列的值
            singleBarValues.add(new Number[]{3232, 5222, 2424, 2346, 3123});
            // 第二個(gè)系列的值
            singleBarValues.add(new Number[]{42.2, 24.41, 31.73, 74.83, 53.28});
            // x軸的值
            String[] xValues = new String[]{"山東省", "河南省", "北京市", "天津市", "陜西省"};
            changeChart1(document, singleBarValues, xValues);
            // 解析替換第二個(gè)圖表數(shù)據(jù),根據(jù)具體業(yè)務(wù)封裝數(shù)據(jù)
            List<Number[]> singleBarValues2 = new ArrayList<>();
            Number[] n1 = new Number[32];
            Number[] n2 = new Number[32];
            for (int i = 0; i < 32; i++) {
                n1[i] = RandomUtil.randomInt(1000000);
                n2[i] = RandomUtil.randomDouble(1);
            }
            singleBarValues2.add(n1);
            singleBarValues2.add(n2);
            changeChart2(document, singleBarValues2);

            // 輸出新文件
            FileOutputStream fos = new FileOutputStream("D:\\test\\test.docx");
            document.write(fos);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void changeChart2(XWPFDocument doc, List<Number[]> singleBarValues2) throws IOException, InvalidFormatException {
        // 業(yè)務(wù)數(shù)據(jù)
        Number[] n1 = singleBarValues2.get(0);
        Number[] n2 = singleBarValues2.get(1);

        //獲取word中所有圖表對象
        List<XWPFChart> charts = doc.getCharts();
        //獲取第一個(gè)單系列柱狀圖
        XWPFChart singleBarChar = charts.get(1);

        XSSFWorkbook workbook = singleBarChar.getWorkbook();
        XSSFSheet sheet = workbook.getSheetAt(0);
        int lastRowNum = sheet.getLastRowNum();
        // 更新內(nèi)置excel數(shù)據(jù)
        for (int i = 1; i <= lastRowNum; i++) {
            XSSFRow row = sheet.getRow(i);
            XSSFCell cell = row.getCell(2);
            cell.setCellValue(Double.parseDouble(n1[i - 1].toString()));
            XSSFCell cell1 = row.getCell(3);
            cell1.setCellValue(Double.parseDouble(n2[i - 1].toString()));
        }

        // 內(nèi)置excel數(shù)據(jù)不會(huì)更新到頁面,需要刷新頁面數(shù)據(jù)
        CTChart ctChart = singleBarChar.getCTChart();
        CTPlotArea plotArea = ctChart.getPlotArea();
        // 第一列數(shù)據(jù)
        CTBarChart barChartArray = plotArea.getBarChartArray(0);
        List<CTBarSer> serList = barChartArray.getSerList();
        CTBarSer ctBarSer = serList.get(0);
        List<CTNumVal> ptList = ctBarSer.getVal().getNumRef().getNumCache().getPtList();
        for (int i = 0; i < ptList.size(); i++) {
            ptList.get(i).setV(String.valueOf(n1[i]));
        }
        // 第二列數(shù)據(jù)
        CTLineChart lineChartArray = plotArea.getLineChartArray(0);
        List<CTLineSer> lineSers = lineChartArray.getSerList();
        CTLineSer ctLineSer = lineSers.get(0);
        List<CTNumVal> ptList1 = ctLineSer.getVal().getNumRef().getNumCache().getPtList();
        for (int i = 0; i < ptList1.size(); i++) {
            ptList1.get(i).setV(String.valueOf(n2[i]));
        }
    }


    private static XWPFChart changeChart1(XWPFDocument document, List<Number[]> singleBarValues, String[] xValues) {
        //獲取word中所有圖表對象
        List<XWPFChart> charts = document.getCharts();

        //獲取第一個(gè)單系列柱狀圖
        XWPFChart docChart = charts.get(0);

        //系列信息
        String[] seriesNames = {"出生人口數(shù)","出生率"};
        //分類信息
        String[] cats = xValues;
        // 業(yè)務(wù)數(shù)據(jù)
        singleBarValues.add(singleBarValues.get(0));
        singleBarValues.add(singleBarValues.get(1));
        //獲取圖表數(shù)據(jù)對象
        XDDFChartData chartData = null;
        //word圖表均對應(yīng)一個(gè)內(nèi)置的excel,用于保存圖表對應(yīng)的數(shù)據(jù)
        //excel中 第一列第二行開始的數(shù)據(jù)為分類信息
        //CellRangeAddress(1, categories.size(), 0, 0) 四個(gè)參數(shù)依次為 起始行 截止行 起始列 截止列。
        //excel中分類信息的范圍
        String catDataRange = docChart.formatRange(new CellRangeAddress(1, cats.length, 0, 0));
        //根據(jù)分類信息的范圍創(chuàng)建分類信息的數(shù)據(jù)源
        XDDFDataSource<?> catDataSource = XDDFDataSourcesFactory.fromArray(cats, catDataRange, 0);
        //更新數(shù)據(jù)
        for (int i = 0; i < seriesNames.length; i++) {
            chartData = docChart.getChartSeries().get(i);
            //excel中各系列對應(yīng)的數(shù)據(jù)的范圍
            String valDataRange = docChart.formatRange(new CellRangeAddress(1, cats.length, i + 1, i + 1));
            //根據(jù)數(shù)據(jù)的范圍創(chuàng)建值的數(shù)據(jù)源
            Number[] val = singleBarValues.get(i);
            XDDFNumericalDataSource<Number> valDataSource = XDDFDataSourcesFactory.fromArray(val, valDataRange, i + 1);
            //獲取圖表系列的數(shù)據(jù)對象
            XDDFChartData.Series series = chartData.getSeries(0);
            //替換系列數(shù)據(jù)對象中的分類和值
            series.replaceData(catDataSource, valDataSource);
            //修改系列數(shù)據(jù)對象中的標(biāo)題
//            CellReference cellReference = docChart.setSheetTitle(seriesNames[i], 1);
//            series.setTitle(seriesNames[i], cellReference);
            //更新圖表數(shù)據(jù)對象
            docChart.plot(chartData);
        }
        //圖表整體的標(biāo)題 傳空值則不替換標(biāo)題
//        if (!Strings.isNullOrEmpty(title)) {
//            docChart.setTitleText(title);
//            docChart.setTitleOverlay(false);
//        }
        return docChart;
    }


    private void changeText(XWPFDocument document, Map<String, String> params) {
        //獲取段落集合
        List<XWPFParagraph> paragraphs = document.getParagraphs();

        for (XWPFParagraph paragraph : paragraphs) {
            //判斷此段落時(shí)候需要進(jìn)行替換
            String text = paragraph.getText();
            if(checkText(text)){
                List<XWPFRun> runs = paragraph.getRuns();
                for (XWPFRun run : runs) {
                    //替換模板原來位置
                    String value = changeValue(run.toString(), params);
                    if (Objects.nonNull(value)) {
                        run.setText(value, 0);
                    }
                }
            }
        }
    }

    /**
     * 判斷文本中時(shí)候包含$
     * @param text 文本
     * @return 包含返回true,不包含返回false
     */
    public static boolean checkText(String text){
        boolean check  =  false;
        if(text.indexOf("$")!= -1){
            check = true;
        }
        return check;
    }

    /**
     * 匹配傳入信息集合與模板
     * @param value 模板需要替換的區(qū)域
     * @param textMap 傳入信息集合
     * @return 模板需要替換區(qū)域信息集合對應(yīng)值
     */
    public static String changeValue(String value, Map<String, String> textMap){
        Set<Map.Entry<String, String>> textSets = textMap.entrySet();
        for (Map.Entry<String, String> textSet : textSets) {
            //匹配模板與替換值 格式${key}
            String key = "${"+textSet.getKey()+"}";
            if(value.indexOf(key)!= -1){
                value = value.replace(key, textSet.getValue());
            }
        }
        //模板未匹配到區(qū)域替換為空
        if(checkText(value)){
            value = "";
        }
        return value;
    }

}

到了這里,關(guān)于Poi實(shí)現(xiàn)根據(jù)word模板導(dǎo)出-圖表篇的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • (Java)word轉(zhuǎn)pdf(aspose),pdf加水印(itextpdf),并支持POI模板(包括checkbox)導(dǎo)出

    (Java)word轉(zhuǎn)pdf(aspose),pdf加水印(itextpdf),并支持POI模板(包括checkbox)導(dǎo)出

    目錄 1、引入jar包 2、pdf處理工具類 3、poi模板導(dǎo)出工具類 4、測試類 5、模板 6、最終效果? 1、引入jar包 ? 2、pdf處理工具類 ?3、poi模板導(dǎo)出工具類 ?4、測試類 5、模板 6、最終效果?

    2024年02月06日
    瀏覽(32)
  • 根據(jù)模板動(dòng)態(tài)生成word(三)使用poi-tl生成word

    根據(jù)模板動(dòng)態(tài)生成word(三)使用poi-tl生成word

    @ 目錄 一、前言 1、什么是poi-tl 2、官方信息 2.1 源碼倉庫 2.2 中文文檔 2.3 開源協(xié)議 3、poi-tl的優(yōu)勢 3.1 poi-tl和其他模板引擎的對比 3.2 poi-tl Word模板引擎支持的功能 二、基本的使用配置 1、引入依賴 1.1 Maven 1.2 Gradle 2、配置 2.1 新建配置 2.2 標(biāo)簽前后綴替換 2.3 加載模板 2.4 填充數(shù)

    2024年02月13日
    瀏覽(22)
  • 【JAVA - POI 合集】之 POI 操作word 圖表,柱狀圖,折線圖,雷達(dá)圖,條形圖 poi4.1.2

    【JAVA - POI 合集】之 POI 操作word 圖表,柱狀圖,折線圖,雷達(dá)圖,條形圖 poi4.1.2

    ????????關(guān)于poi?操作word?的吐槽: 山路崎嶇,?一言難盡啊?。?! ? ? ? ? 原本項(xiàng)目中的poi?版本是3.17的版本,但是3.17對于在word?中操作圖表是有問題的。所以對項(xiàng)目的jar?包進(jìn)行了升級(jí),升級(jí)到了 4.1.2 。?要求 JDK? 1.8 ?以上.?現(xiàn)在用8以下的項(xiàng)目基本上也很少了。話不多

    2024年02月09日
    瀏覽(19)
  • Java 使用 poi 和 aspose 實(shí)現(xiàn) word 模板數(shù)據(jù)寫入并轉(zhuǎn)換 pdf 增加水印

    Java 使用 poi 和 aspose 實(shí)現(xiàn) word 模板數(shù)據(jù)寫入并轉(zhuǎn)換 pdf 增加水印

    本項(xiàng)目所有源碼和依賴資源都在文章頂部鏈接,有需要可以下載使用 1. 需求描述 從指定位置讀取一個(gè) word 模板 獲取業(yè)務(wù)數(shù)據(jù)并寫入該 word 模板,生成新的 word 文檔 將新生成的 word 文檔轉(zhuǎn)換為 pdf 格式 對 pdf 文檔添加水印 2. 效果預(yù)覽 word 模板 帶水印的 pdf 文檔 3. 實(shí)現(xiàn)思路

    2024年02月08日
    瀏覽(29)
  • java調(diào)用poi根據(jù)模板生成ppt

    吐槽:像這種需求半年碰不到一個(gè) O.o 可以多去poi官網(wǎng)翻一下官方文檔雖然很難理解但有用? 所有代碼基于個(gè)人習(xí)慣編寫,懶得貼圖了相信兄弟們的理解能力,有問題可以留言我盡量解決。 本文所有代碼生成都基于pptx文件編寫,可根據(jù)具體業(yè)務(wù)修改代碼 1.打開模板文件 2.創(chuàng)建

    2024年02月21日
    瀏覽(35)
  • JAVA POI富文本導(dǎo)出WORD添加水印

    ????????在java 開發(fā)中 特別是OA開發(fā)中,經(jīng)常會(huì)遇到導(dǎo)出word的操作,同時(shí)隨時(shí)AI時(shí)代的到來,很多導(dǎo)出文檔都需要增加水印標(biāo)識(shí),用來追溯數(shù)據(jù)生產(chǎn)方。 ? ? ? ? 本文將介紹如何通過操作POI 來實(shí)現(xiàn)導(dǎo)出富文本到word ,并在文檔中追加水印功能。 導(dǎo)入POM ????????首先我們

    2024年02月03日
    瀏覽(31)
  • java使用apache.poi導(dǎo)出word文件

    java使用apache.poi導(dǎo)出word文件

    功能說明: 將試卷導(dǎo)出word,并可以打印,裝訂,效果圖: 下面是實(shí)現(xiàn)代碼:

    2024年02月15日
    瀏覽(19)
  • 【Java Easypoi & Apache poi】 Word導(dǎo)入與導(dǎo)出

    ????????如果這里造成了讀取resources下的文件返回前端亂碼問題:除了HttpServletResponse響應(yīng)中設(shè)置字體問題,還有可能是因?yàn)樵诰幾g期文件就已經(jīng)亂碼了,所以需要在pom.xml中增加以下配置。

    2024年02月10日
    瀏覽(42)
  • Java POI導(dǎo)出富文本的內(nèi)容到word文檔

    當(dāng)創(chuàng)建使用富文本編輯器,操作完的數(shù)據(jù),傳輸?shù)胶笈_(tái)都是帶有html標(biāo)簽的。 如:h1標(biāo)題頭/h1h2第二個(gè)標(biāo)題/h2a href=\\\"www.baidu.com\\\"百度搜索/a 我們想把富文本數(shù)據(jù)轉(zhuǎn)換為Word內(nèi)容。 Word是完全支持html標(biāo)簽的,但是我們獲取到的富文本內(nèi)容并不是完整的html代碼,所有我們需要先補(bǔ)全

    2024年02月09日
    瀏覽(19)
  • 【Java】使用POI按模板樣式導(dǎo)出Excel

    根據(jù)模板樣式進(jìn)行excel導(dǎo)出。 首先,當(dāng)然是要有一個(gè)excel模板,excel的樣式用wps等進(jìn)行設(shè)置。 然后就是代碼的實(shí)現(xiàn)了,先引入POI的依賴: 然后就是實(shí)現(xiàn)方法里的代碼,首先定義響應(yīng)信息: 然后將excel模板轉(zhuǎn)為輸入流,這一步的實(shí)現(xiàn)方法有很多,具體選擇因人而異,我這里就舉

    2024年02月14日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包