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

SpringBoot與文檔excel,pdf集成案例分享

這篇具有很好參考價值的文章主要介紹了SpringBoot與文檔excel,pdf集成案例分享。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、文檔類型介紹

1、Excel文檔

Excel一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,在系統(tǒng)開發(fā)中,經(jīng)常用來把數(shù)據(jù)轉(zhuǎn)存到Excel文件,或者Excel數(shù)據(jù)導入系統(tǒng)中,這就涉及數(shù)據(jù)轉(zhuǎn)換問題。

2、PDF文檔

PDF是可移植文檔格式,是一種電子文件格式,具有許多其他電子文檔格式無法相比的優(yōu)點。PDF文件格式可以將文字、字型、格式、顏色及獨立于設備和分辨率的圖形圖像等封裝在一個文件中。該格式文件還可以包含超文本鏈接、聲音和動態(tài)影像等電子信息,支持特長文件,集成度和安全可靠性都較高。

二、Excel文件管理

1、POI依賴

Apache POI是Apache軟件基金會的開源類庫,POI提供API給Java程序?qū)icrosoft Office格式檔案讀和寫的功能。

SpringBoot與文檔excel,pdf集成案例分享,spring boot,excel,pdf

github: https://github.com/apache/poi

<!-- Excel 依賴 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.9</version>
</dependency>
<!-- 2007及更高版本 -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>

2、文件讀取

public static List<List<Object>> readExcel(String path) throws Exception {
    File file = new File(path) ;
    List<List<Object>> list = new LinkedList<>();
    XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
    // 讀取 Sheet1 表格內(nèi)容
    XSSFSheet sheet = xwb.getSheetAt(0);
    // 讀取行數(shù):不讀取Excel表頭
    for (int i = (sheet.getFirstRowNum()+1); i <= (sheet.getPhysicalNumberOfRows()-1); i++) {
        XSSFRow row = sheet.getRow(i);
        if (row == null) { continue; }
        List<Object> linked = new LinkedList<>();
        for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
            XSSFCell cell = row.getCell(j);
            if (cell == null) { continue; }
            Object value ;
            // 這里需根據(jù)實際業(yè)務情況處理
            switch (cell.getCellType()) {
                case XSSFCell.CELL_TYPE_NUMERIC:
                    //處理數(shù)值帶{.0}問題
                    value = Double.valueOf(String.valueOf(cell)).longValue() ;
                    break;
                default:
                    value = cell.toString();
            }
            linked.add(value);
        }
        if (linked.size()!= 0) {
            list.add(linked);
        }
    }
    return list;
}

3、文件創(chuàng)建

public static void createExcel(String excelName, String[] headList,List<List<Object>> dataList)
        throws Exception {
    // 創(chuàng)建 Excel 工作簿
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet();
    // 創(chuàng)建表頭
    XSSFRow row = sheet.createRow(0);
    for (int i = 0; i < headList.length; i++) {
        XSSFCell cell = row.createCell(i);
        cell.setCellType(XSSFCell.CELL_TYPE_STRING);
        cell.setCellValue(headList[i]);
    }
    //添加數(shù)據(jù)
    for (int line = 0; line < dataList.size(); line++) {
        XSSFRow rowData = sheet.createRow(line+1);
        List<Object> data = dataList.get(line);
        for (int j = 0; j < headList.length; j++) {
            XSSFCell cell = rowData.createCell(j);
            cell.setCellType(XSSFCell.CELL_TYPE_STRING);
            cell.setCellValue((data.get(j)).toString());
        }
    }
    FileOutputStream fos = new FileOutputStream(excelName);
    workbook.write(fos);
    fos.flush();
    fos.close();
}

4、文件導出

public static void exportExcel(String[] headList, List<List<Object>> dataList,
                               OutputStream outputStream) throws Exception {
    // 創(chuàng)建 Excel 工作簿
    XSSFWorkbook workbook = new XSSFWorkbook();
    XSSFSheet sheet = workbook.createSheet();
    // 創(chuàng)建表頭
    XSSFRow row = sheet.createRow(0);
    for (int i = 0; i < headList.length; i++) {
        XSSFCell cell = row.createCell(i);
        cell.setCellType(XSSFCell.CELL_TYPE_STRING);
        cell.setCellValue(headList[i]);
    }
    //添加數(shù)據(jù)
    for (int line = 0; line < dataList.size(); line++) {
        XSSFRow rowData = sheet.createRow(line+1);
        List<Object> data = dataList.get(line);
        for (int j = 0; j < headList.length; j++) {
            XSSFCell cell = rowData.createCell(j);
            cell.setCellType(XSSFCell.CELL_TYPE_STRING);
            cell.setCellValue((data.get(j)).toString());
        }
    }
    workbook.write(outputStream);
    outputStream.flush();
    outputStream.close();
}

5、文件導出接口

@RestController
public class ExcelDownLoadWeb {
    @RequestMapping("/file/outExcel")
    public void outExcel (HttpServletResponse response) throws Exception {
        String exportName = "2023-05-BSDATA" ;
        response.setContentType("application/vnd.ms-excel");
        response.addHeader("Content-Disposition", "attachment;filename="+
                             URLEncoder.encode(exportName, "UTF-8") + ".xlsx");
        List<List<Object>> dataList = ExcelUtil.readExcel("F:\\file-type\\user-excel.xlsx") ;
        String[] headList = new String[]{"測站", "時間", "降雨量"} ;
        ExcelUtil.exportExcel(headList,dataList,response.getOutputStream()) ;
    }
}

三、PDF文件管理

1、IText依賴

iText是一種生成PDF報表的Java組件。通過在服務器端使用頁面或API封裝生成PDF報表,客戶端可以通過超鏈接直接顯示或下載到本地,在系統(tǒng)開發(fā)中通常用來生成比較正式的報告或者合同類的電子文檔。

SpringBoot與文檔excel,pdf集成案例分享,spring boot,excel,pdf

github: https://github.com/itext/itextpdf

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.11</version>
</dependency>
<dependency>
    <groupId>com.itextpdf.tool</groupId>
    <artifactId>xmlworker</artifactId>
    <version>5.5.11</version>
</dependency>

2、API二次封裝

首先對于Itext提供的API做一下表格、段落、圖片等基礎樣式的二次封裝,可以更好的適配業(yè)務。

public class PdfFontUtil {
    private PdfFontUtil(){}

    /**
     * 段落樣式獲取
     */
    public static Paragraph getParagraph (String content, Font font,Integer alignment){
        Paragraph paragraph = new Paragraph(content,font) ;
        if (alignment != null && alignment >= 0){
            paragraph.setAlignment(alignment);
        }
        return paragraph ;
    }
    /**
     * 圖片樣式
     */
    public static Image getImage (String imgPath,float width,float height) throws Exception {
        Image image = Image.getInstance(imgPath);
        image.setAlignment(Image.MIDDLE);
        if (width > 0 && height > 0){
            image.scaleAbsolute(width, height);
        }
        return image ;
    }
    /**
     * 表格生成
     */
    public static PdfPTable getPdfPTable01 (int numColumns,float totalWidth) throws Exception {
        // 表格處理
        PdfPTable table = new PdfPTable(numColumns);
        // 設置表格寬度比例為%100
        table.setWidthPercentage(100);
        // 設置寬度:寬度平均
        table.setTotalWidth(totalWidth);
        // 鎖住寬度
        table.setLockedWidth(true);
        // 設置表格上面空白寬度
        table.setSpacingBefore(10f);
        // 設置表格下面空白寬度
        table.setSpacingAfter(10f);
        // 設置表格默認為無邊框
        table.getDefaultCell().setBorder(0);
        table.setPaddingTop(50);
        table.setSplitLate(false);
        return table ;
    }
    /**
     * 表格內(nèi)容
     */
    public static PdfPCell getPdfPCell (Phrase phrase){
        return new PdfPCell (phrase) ;
    }
    /**
     * 表格內(nèi)容帶樣式
     */
    public static void addTableCell (PdfPTable dataTable,Font font,List<String> cellList){
        for (String content:cellList) {
            dataTable.addCell(getParagraph(content,font,-1));
        }
    }
}

3、生成PDF文件

這里基于上面的工具類,畫一個PDF頁面作為參考。

public class PdfPagetTest {
    // 基礎配置
    private static String PDF_SITE = "E:\\temp\\PDF頁面2023-04-15.pdf" ;
    private static String FONT = "C:/Windows/Fonts/simhei.ttf";
    private static String PAGE_TITLE = "PDF" ;
    // 基礎樣式
    private static Font TITLE_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,20, Font.BOLD);
    private static Font NODE_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,15, Font.BOLD);
    private static Font BLOCK_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,13, Font.BOLD, BaseColor.BLACK);
    private static Font INFO_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H,12, Font.NORMAL,BaseColor.BLACK);
    private static Font CONTENT_FONT = FontFactory.getFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

    private static void createPdfPage () throws Exception {
        // 創(chuàng)建文檔
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(PDF_SITE));
        document.open();
        // 報告標題
        document.add(PdfFontUtil.getParagraph(PAGE_TITLE,TITLE_FONT,1)) ;
        document.add(PdfFontUtil.getParagraph("\n商戶名稱:XXX科技有限公司",INFO_FONT,-1)) ;
        document.add(PdfFontUtil.getParagraph("\n生成時間:2020-01-15\n\n",INFO_FONT,-1)) ;
        // 報告內(nèi)容
        // 段落標題 + 報表圖
        document.add(PdfFontUtil.getParagraph("城市數(shù)據(jù)分布統(tǒng)計",NODE_FONT,-1)) ;
        document.add(PdfFontUtil.getParagraph("\n· 可視化圖表\n\n",BLOCK_FONT,-1)) ;
        // 設置圖片寬高
        float documentWidth = document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin();
        float documentHeight = documentWidth / 580 * 320;
        document.add(PdfFontUtil.getImage("F:\\file-type\\myChart.jpg",documentWidth-80,documentHeight-80)) ;
        // 數(shù)據(jù)表格
        document.add(PdfFontUtil.getParagraph("\n· 數(shù)據(jù)詳情\n\n",BLOCK_FONT,-1)) ;
        PdfPTable dataTable = PdfFontUtil.getPdfPTable01(4,400) ;
        // 設置表格
        List<String> tableHeadList = tableHead () ;
        List<List<String>> tableDataList = getTableData () ;
        PdfFontUtil.addTableCell(dataTable,CONTENT_FONT,tableHeadList);
        for (List<String> tableData : tableDataList) {
            PdfFontUtil.addTableCell(dataTable,CONTENT_FONT,tableData);
        }
        document.add(dataTable);
        document.add(PdfFontUtil.getParagraph("\n· 報表描述\n\n",BLOCK_FONT,-1)) ;
        document.add(PdfFontUtil.getParagraph("數(shù)據(jù)報告可以監(jiān)控每天的推廣情況," +
                "可以針對不同的數(shù)據(jù)表現(xiàn)進行分析,以提升推廣效果。",CONTENT_FONT,-1)) ;
        document.newPage() ;
        document.close();
        writer.close();
    }
    private static List<List<String>> getTableData (){
        List<List<String>> tableDataList = new ArrayList<>() ;
        for (int i = 0 ; i < 3 ; i++){
            List<String> tableData = new ArrayList<>() ;
            tableData.add("浙江"+i) ;
            tableData.add("杭州"+i) ;
            tableData.add("276"+i) ;
            tableData.add("33.3%") ;
            tableDataList.add(tableData) ;
        }
        return tableDataList ;
    }
    private static List<String> tableHead (){
        List<String> tableHeadList = new ArrayList<>() ;
        tableHeadList.add("省份") ;
        tableHeadList.add("城市") ;
        tableHeadList.add("數(shù)量") ;
        tableHeadList.add("百分比") ;
        return tableHeadList ;
    }
    public static void main(String[] args) throws Exception {
        createPdfPage () ;
    }
}

4、頁面效果

SpringBoot與文檔excel,pdf集成案例分享,spring boot,excel,pdf文章來源地址http://www.zghlxwxcb.cn/news/detail-605241.html

四、網(wǎng)頁轉(zhuǎn)PDF

1、頁面Jar包依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

2、編寫頁面樣式

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8"/>
    <title>Title</title>
    <style>
        body{font-family:SimSun;}
    </style>
</head>
<body>
項目信息:<br/>
名稱:${name}<br/>
作者:${author}<br/><br/>
<img 
src="https://oscimg.oschina.net/oscnet/up-612b9330a67ba747846b0e0890e4906678b.png"/>
<br/>
</body>
</html>

3、核心配置類

public class PageConfig {
    private static final String DEST = "F:\\file-type\\HTML頁面2020-01-15.pdf";
    private static final String HTML = "/pdf_page_one.html";
    private static final String FONT = "C:/Windows/Fonts/simsun.ttc";
    private static Configuration freemarkerCfg = null ;
    static {
        freemarkerCfg = new Configuration(Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS);
        //freemarker的模板目錄
        try {
            String path = "TODO:模板路徑{自定義}" ;
            freemarkerCfg.setDirectoryForTemplateLoading(new File(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 創(chuàng)建文檔
     */
    private static void createPdf(String content,String dest) throws Exception {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
        document.open();
        XMLWorkerFontProvider fontImp = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
        fontImp.register(FONT);
        XMLWorkerHelper.getInstance().parseXHtml(writer, document,
                new ByteArrayInputStream(content.getBytes()), null, Charset.forName("UTF-8"), fontImp);
        document.close();
    }
    /**
     * 頁面渲染
     */
    private static String freeMarkerRender(Map<String, Object> data, String htmlTmp) throws Exception {
        Writer out = new StringWriter();
        Template template = freemarkerCfg.getTemplate(htmlTmp,"UTF-8");
        template.process(data, out);
        out.flush();
        out.close();
        return out.toString();
    }
    /**
     * 方法入口
     */
    public static void main(String[] args) throws Exception {
        Map<String,Object> data = new HashMap<> ();
        data.put("name","smile");
        data.put("author","知了") ;
        String content = PageConfig.freeMarkerRender(data,HTML);
        PageConfig.createPdf(content,DEST);
    }
}

到了這里,關(guān)于SpringBoot與文檔excel,pdf集成案例分享的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Spring Boot集成EasyExcel實現(xiàn)excel導入導出操作

    Spring Boot集成EasyExcel實現(xiàn)excel導入導出操作

    Easy Excel 官網(wǎng) Java解析、生成Excel比較有名的框架有Apache poi、jxl。但他們都存在一個嚴重的問題就是非常的耗內(nèi)存,poi有一套SAX模式的API可以一定程度的解決一些內(nèi)存溢出的問題,但POI還是有一些缺陷,比如07版Excel解壓縮以及解壓后存儲都是在內(nèi)存中完成的,內(nèi)存消耗依然很

    2024年02月14日
    瀏覽(19)
  • 【微服務】Spring Boot集成ELK實用案例

    【微服務】Spring Boot集成ELK實用案例

    推薦一款我一直在用國內(nèi)很火的 AI網(wǎng)站 ,包含 GPT3.5/4.0、文心一言、通義千問、智譜AI等多個AI模型 ,支持PC、APP、VScode插件同步使用,點擊鏈接跳轉(zhuǎn)-ChatGPT4.0中文版 在現(xiàn)代軟件開發(fā)中,微服務架構(gòu)已成為一種流行趨勢。隨之而來的挑戰(zhàn)之一是如何有效地管理和分析分布在各個

    2024年02月20日
    瀏覽(20)
  • kafka--技術(shù)文檔--spring-boot集成基礎簡單使用

    kafka--技術(shù)文檔--spring-boot集成基礎簡單使用

    ? ? ? ? 查閱了很多資料了解到,使用了spring-boot中整合的kafka的使用是被封裝好的。也就是說這些使用其實和在linux中的使用kafka代碼的使用其實沒有太大關(guān)系。但是邏輯是一樣的。這點要注意! 核心配置為: 如果在下面規(guī)定了spring-boot的版本那么就不需要再使用版本號,如

    2024年02月11日
    瀏覽(23)
  • Spring Boot 集成 EasyExcel 3.x 優(yōu)雅實現(xiàn)Excel導入導出

    Spring Boot 集成 EasyExcel 3.x 優(yōu)雅實現(xiàn)Excel導入導出

    本章節(jié)將介紹 Spring Boot 集成 EasyExcel(優(yōu)雅實現(xiàn)Excel導入導出)。 ?? Spring Boot 2.x 實踐案例(代碼倉庫) EasyExcel 是一個基于 Java 的、快速、簡潔、解決大文件內(nèi)存溢出的 Excel 處理工具。它能讓你在不用考慮性能、內(nèi)存的等因素的情況下,快速完成 Excel 的讀、寫等功能。 Ea

    2024年02月03日
    瀏覽(53)
  • Redis主從復制和哨兵架構(gòu)圖,集成Spring Boot項目實戰(zhàn)分享

    Redis 主從復制和哨兵架構(gòu)是 Redis 集群的重要組成部分,用于提高 Redis 集群的可用性和性能。以下是 Redis 主從復制和哨兵架構(gòu)的詳細介紹,包括架構(gòu)圖和 Java 代碼詳解。 Redis 主從復制是通過節(jié)點間的異步復制實現(xiàn)的。在 Redis 集群中,每個主節(jié)點可以有多個從節(jié)點,每個從節(jié)

    2024年02月13日
    瀏覽(93)
  • 使用Spring Boot集成中間件:Kafka的高級使用案例講解

    在實際應用中,Kafka作為一種強大的分布式消息系統(tǒng),廣泛應用于實時數(shù)據(jù)處理和消息傳遞。本文將通過一個全面的使用案例,詳細介紹如何使用Spring Boot集成Kafka,并展示其在實際場景中的應用。 在開始之前,我們需要確保已經(jīng)完成以下準備工作: 安裝并啟動Kafka集群 創(chuàng)建

    2024年02月01日
    瀏覽(19)
  • Java【代碼 16】將word、excel文件轉(zhuǎn)換為pdf格式和將pdf文檔轉(zhuǎn)換為image格式工具類分享(Gitee源碼)aspose轉(zhuǎn)換中文亂碼問題處理

    感謝小伙伴兒的分享: ● 不羈 ● 郭中天 整合調(diào)整后的工具類Gitee地址:https://gitee.com/yuanzhengme/java_application_aspose_demo ● WordToPdfUtil用于將word文檔轉(zhuǎn)換為pdf格式的工具類 ● ExcelToPdfUtil用于將excel文檔轉(zhuǎn)換為pdf格式的工具類 ● PdfToImageUtil用于將pdf文檔轉(zhuǎn)換為image格式的工具類

    2024年01月24日
    瀏覽(34)
  • spring boot集成Elasticsearch-SpringBoot(25)

    spring boot集成Elasticsearch-SpringBoot(25)

    ??搜索引擎(search engine )通常意義上是指:根據(jù)特定策略,運用特定的爬蟲程序從互聯(lián)網(wǎng)上搜集信息,然后對信息進行處理后,為用戶提供檢索服務,將檢索到的相關(guān)信息展示給用戶的系統(tǒng)。 ??而我們講解的是捜索的索引和檢索,不涉及爬蟲程序的內(nèi)容爬取。大部分公司

    2023年04月09日
    瀏覽(24)
  • Spring Boot 集成 API 文檔 - Swagger、Knife4J、Smart-Doc

    Spring Boot 集成 API 文檔 - Swagger、Knife4J、Smart-Doc

    Swagger 作為 API 設計和文檔的強大工具,是一個由專門的工具集合支持的框架,它在整個 API 的生命周期中發(fā)揮作用,從設計和文檔,到測試和部署。通過提供可視化界面,Swagger 讓開發(fā)人員和最終用戶都能清晰地理解和操作 API。 使用建議:筆者建議優(yōu)先考慮 Knife4J,它已經(jīng)能

    2024年01月22日
    瀏覽(22)
  • 【SpringBoot3】Spring Boot 3.0 集成 Redis 緩存

    Redis緩存是一個開源的使用ANSIC語言編寫、支持網(wǎng)絡、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。它主要用于作為數(shù)據(jù)庫、緩存和消息中間件,以快速讀寫和豐富的數(shù)據(jù)結(jié)構(gòu)支持而著稱。 在應用程序和數(shù)據(jù)庫之間,Redis緩存作為一個中間層起著關(guān)鍵

    2024年02月21日
    瀏覽(90)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包