欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java基于Spire.XLS實(shí)現(xiàn)從Excel到PDF的發(fā)票自動(dòng)化生成

 更新時(shí)間:2025年06月04日 08:37:02   作者:E-iceblue  
隨著業(yè)務(wù)數(shù)字化進(jìn)程的不斷推進(jìn),許多企業(yè)開始嘗試用自動(dòng)化手段替代手工開票,本文將基于 Spire.XLS for Java 介紹如何快速實(shí)現(xiàn)從 Excel 到 PDF的發(fā)票生成自動(dòng)化方法,感興趣的小伙伴可以了解下

隨著業(yè)務(wù)數(shù)字化進(jìn)程的不斷推進(jìn),許多企業(yè)開始嘗試用自動(dòng)化手段替代手工開票。尤其是那些已經(jīng)習(xí)慣用 Excel 管理訂單或發(fā)票模板的公司,更希望能將其一鍵轉(zhuǎn)換成標(biāo)準(zhǔn)格式的 PDF,方便發(fā)送、歸檔與打印。本文將基于 Spire.XLS for Java 介紹如何快速實(shí)現(xiàn)“從 Excel 到 PDF”的發(fā)票生成自動(dòng)化流程。

一、為什么選擇 Excel + PDF 的組合

在企業(yè)日常經(jīng)營中,發(fā)票是不可或缺的重要憑證。許多企業(yè)使用 Excel 來管理訂單、記錄商品信息,并據(jù)此生成發(fā)票。將這些發(fā)票以 PDF 格式保存,不僅便于歸檔、打印,還方便通過郵件等方式發(fā)送給客戶。

相比直接從系統(tǒng)輸出 PDF,采用“Excel 設(shè)計(jì)模板 + 自動(dòng)生成 PDF”這一方案具備明顯優(yōu)勢(shì):

  • 靈活設(shè)計(jì):可利用 Excel 豐富的排版功能,自由控制表格樣式、字體、邊框等;
  • 低學(xué)習(xí)成本:非開發(fā)人員也能通過 Excel 模板快速修改發(fā)票樣式;
  • 批量處理更高效:通過程序批量填充數(shù)據(jù)、自動(dòng)生成 PDF,適合大批量開票場(chǎng)景。

Spire.XLS for Java 正好提供了這樣一套解決方案:用 Java 代碼控制 Excel 內(nèi)容生成,并保存為 PDF 格式,整個(gè)過程無需安裝 Microsoft Office,適合部署在服務(wù)器或后臺(tái)系統(tǒng)中。

二、兩種常見場(chǎng)景:沒有模板 vs 已有模板

根據(jù)實(shí)際情況,我們可以將發(fā)票生成分為兩類:沒有模板和已經(jīng)有模板。若是前者,您可以同樣使用 Spire.XLS 來創(chuàng)建 Excel 模板,也可以在微軟辦公套件中進(jìn)行設(shè)計(jì)。如果是后者,您可以直接查看場(chǎng)景 2 查看如何將 Excel 形式的發(fā)票轉(zhuǎn)換為 PDF 格式。

場(chǎng)景 1:沒有模板,從零生成 Excel 并導(dǎo)出 PDF

這種方式適用于初期系統(tǒng)搭建,尚未固定格式,或者格式需要根據(jù)業(yè)務(wù)動(dòng)態(tài)變化的場(chǎng)景。

我們可以使用 Spire.XLS 直接用代碼構(gòu)建表格結(jié)構(gòu),并填充內(nèi)容。下面是一個(gè)簡單示例,展示如何用 Java 創(chuàng)建一個(gè)包含表頭和數(shù)據(jù)的 Excel 發(fā)票表格:

import com.spire.xls.*;
import java.awt.*;

public class CreateInvoiceExcel {
   public static void main(String[] args){

       // 創(chuàng)建Workbook實(shí)例
       Workbook workbook = new Workbook();

       // 獲取默認(rèn)的第一張工作表并重命名
       Worksheet sheet = workbook.getWorksheets().get(0);
       sheet.setName("Invoice");

       // 設(shè)置列寬
       for (int i = 1; i <= 4; i++) {
           sheet.setColumnWidth(i, 18f);
       }

       // 設(shè)置客戶信息(保持和模板對(duì)應(yīng))
       sheet.getCellRange("B2").setText("客戶名稱:張三");
       sheet.getCellRange("B3").setText("訂單編號(hào):INV20240530");
       sheet.getCellRange("B4").setText("日期:2025-05-30");

       // 創(chuàng)建樣式:表頭
       CellStyle headerStyle = workbook.getStyles().addStyle("Header");
       headerStyle.getFont().isBold(true);
       headerStyle.getFont().setSize(12f);
       headerStyle.setHorizontalAlignment(HorizontalAlignType.Center);
       headerStyle.setVerticalAlignment(VerticalAlignType.Center);

       // 填充表頭(從第5行開始,避免覆蓋客戶信息)
       String[] headers = {"商品名稱", "單價(jià)", "數(shù)量", "總價(jià)"};
       for (int col = 0; col < headers.length; col++) {
           CellRange cell = sheet.getCellRange(5, col + 1);
           cell.setValue(headers[col]);
           cell.setStyle(headerStyle);
       }

       // 填充數(shù)據(jù)(從第6行開始)
       String[][] data = {
               {"U盤", "¥35", "2", "¥70"},
               {"鍵盤", "¥120", "1", "¥120"},
               {"鼠標(biāo)", "¥45", "3", "¥135"},
       };

       for (int row = 0; row < data.length; row++) {
           for (int col = 0; col < data[row].length; col++) {
               sheet.getCellRange(row + 6, col + 1).setValue(data[row][col]);
           }
       }

       // 保存為 Excel 文件
       workbook.saveToFile("/發(fā)票模板.xlsx", FileFormat.Version2013);
   }
}

此方式的優(yōu)點(diǎn)是完全不依賴已有 Excel 文件,自由度高。但也意味著格式全部需用代碼實(shí)現(xiàn),適合對(duì)自動(dòng)化要求更高的場(chǎng)景。

場(chǎng)景 2:已有 Excel 模板,填充數(shù)據(jù)后導(dǎo)出 PDF

更常見的情況是,企業(yè)已經(jīng)設(shè)計(jì)好一套標(biāo)準(zhǔn)的 Excel 發(fā)票模板,程序只需讀取模板,填入相應(yīng)數(shù)據(jù)即可。這種方式的好處是設(shè)計(jì)和開發(fā)分離,易于維護(hù)。

實(shí)現(xiàn)步驟也很簡單:

  • 設(shè)計(jì)好 Excel 模板,例如在特定單元格留空;
  • 程序加載模板文件;
  • 根據(jù)業(yè)務(wù)數(shù)據(jù)填入相應(yīng)位置;
  • 保存為 PDF。

以下是完整的示例代碼,展示了如何在 Excel 模板中填充數(shù)據(jù)并導(dǎo)出為 PDF 文件。你可以直接復(fù)制粘貼到 Java 編輯器中運(yùn)行,并根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景調(diào)整相應(yīng)內(nèi)容:

import com.spire.xls.*;

public class FillTemplateAndExport {
    public static void main(String[] args){
        // 加載已有模板
        Workbook workbook = new Workbook();
        workbook.loadFromFile("E:/Administrator/Python1/output/發(fā)票模板.xlsx");

        // 獲取工作表
        Worksheet sheet = workbook.getWorksheets().get(0);

        // 替換客戶信息(B2 ~ B4)
        sheet.getCellRange("B2").setText("客戶名稱:李思");
        sheet.getCellRange("B3").setText("訂單編號(hào):INV20250527");
        sheet.getCellRange("B4").setText("日期:2025-05-27");

        // 填充商品信息,從第6行開始,與模板一致
        String[][] data = {
                {"鼠標(biāo)墊", "¥15", "3", "¥45"},
                {"鼠標(biāo)", "¥45", "1", "¥45"},
                {"鍵盤", "¥120", "4", "¥480"}
        };

        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                sheet.getCellRange(i + 6, j + 1).setText(data[i][j]);
            }
        }

        // 設(shè)置 PDF 導(dǎo)出時(shí)頁面自動(dòng)適配內(nèi)容
        workbook.getConverterSetting().setSheetFitToPage(true);

        // 導(dǎo)出為 PDF 文件
        workbook.saveToFile("E:/Administrator/Python1/發(fā)票1.pdf", FileFormat.PDF);
    }
}

這種方式更加適合業(yè)務(wù)流程已定型的企業(yè),發(fā)票樣式清晰統(tǒng)一,后續(xù)只需關(guān)注數(shù)據(jù)變化即可。

友情提示:如果你還在評(píng)估產(chǎn)品是否適合自己,不妨先試試免費(fèi)版。導(dǎo)出的文件沒有水印,只是在頁數(shù)上有些限制。

三、總結(jié)與建議

Excel 與 PDF 的組合,為企業(yè)帶來了靈活、高效、易維護(hù)的發(fā)票自動(dòng)化生成方案。通過 Spire.XLS for Java,您可以:

  • 純代碼生成發(fā)票內(nèi)容并導(dǎo)出 PDF;
  • 利用已有 Excel 模板實(shí)現(xiàn)自動(dòng)填充;
  • 無需安裝 Excel 軟件即可運(yùn)行;
  • 滿足服務(wù)端或批處理的使用場(chǎng)景。

未來,您還可以進(jìn)一步結(jié)合數(shù)據(jù)庫,實(shí)現(xiàn)批量生成發(fā)票、導(dǎo)出 PDF 并打包下載等功能,全面提升業(yè)務(wù)自動(dòng)化水平。如果您正在尋找一套可靠的 Java Excel 組件,Spire.XLS 是值得一試的選擇。

到此這篇關(guān)于Java基于Spire.XLS實(shí)現(xiàn)從Excel到PDF的發(fā)票自動(dòng)化生成的文章就介紹到這了,更多相關(guān)Java自動(dòng)生成發(fā)票內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 求解二維數(shù)組列最小值

    java 求解二維數(shù)組列最小值

    這篇文章主要介紹了java 求解二維數(shù)組列最小值的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Docker容器中的SSH免密登錄詳解

    Docker容器中的SSH免密登錄詳解

    這篇文章主要介紹了Docker容器中的SSH免密登錄詳解,在日常的開發(fā)和測(cè)試環(huán)境中經(jīng)常需要?jiǎng)?chuàng)建和管理Docker容器,有時(shí),出于調(diào)試或管理的目的,可能需要SSH到容器內(nèi)部,本文將介紹如何創(chuàng)建一個(gè)Docker容器,它在啟動(dòng)時(shí)自動(dòng)運(yùn)行SSH服務(wù),并支持免密登錄,需要的朋友可以參考下
    2023-08-08
  • java雙向循環(huán)鏈表的實(shí)現(xiàn)代碼

    java雙向循環(huán)鏈表的實(shí)現(xiàn)代碼

    這篇文章介紹了java雙向循環(huán)鏈表的實(shí)現(xiàn)代碼,有需要的朋友可以參考一下
    2013-09-09
  • Spring中存儲(chǔ)Bean的常見注解方式

    Spring中存儲(chǔ)Bean的常見注解方式

    Spring框架中的控制反轉(zhuǎn)(IoC)和依賴注入(DI)是核心概念,實(shí)現(xiàn)了對(duì)象的解耦和動(dòng)態(tài)依賴,IoC容器負(fù)責(zé)對(duì)象的生命周期和對(duì)象間的依賴關(guān)系,通過DI方式注入依賴,本文介紹Spring中存儲(chǔ)Bean的常見注解方式,感興趣的朋友一起看看吧
    2024-09-09
  • LCN分布式事務(wù)解決方案詳解

    LCN分布式事務(wù)解決方案詳解

    這篇文章主要介紹了LCN分布式事務(wù)解決方案詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • mybatis 運(yùn)行時(shí)加載自定義mapper文件方式

    mybatis 運(yùn)行時(shí)加載自定義mapper文件方式

    這篇文章主要介紹了mybatis 運(yùn)行時(shí)加載自定義mapper文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java編程—在測(cè)試中考慮多態(tài)

    Java編程—在測(cè)試中考慮多態(tài)

    這篇文章主要介紹了Java編程—在測(cè)試中考慮多態(tài),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Mybatis 如何在配置文件中給實(shí)體類起別名

    Mybatis 如何在配置文件中給實(shí)體類起別名

    這篇文章主要介紹了Mybatis 如何在配置文件中給實(shí)體類起別名的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Springboot中使用Filter實(shí)現(xiàn)Header認(rèn)證詳解

    Springboot中使用Filter實(shí)現(xiàn)Header認(rèn)證詳解

    這篇文章主要介紹了Springboot中使用Filter實(shí)現(xiàn)Header認(rèn)證詳解,當(dāng)在?web.xml?注冊(cè)了一個(gè)?Filter?來對(duì)某個(gè)?Servlet?程序進(jìn)行攔截處理時(shí),它可以決定是否將請(qǐng)求繼續(xù)傳遞給?Servlet?程序,以及對(duì)請(qǐng)求和響應(yīng)消息是否進(jìn)行修改,需要的朋友可以參考下
    2023-08-08
  • MultipartResolver實(shí)現(xiàn)文件上傳功能

    MultipartResolver實(shí)現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了MultipartResolver實(shí)現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評(píng)論