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

Java+LibreOffice實(shí)現(xiàn)Excel轉(zhuǎn)PDF并橫向一頁顯示所有列

 更新時(shí)間:2025年06月17日 10:39:22   作者:懂行者,行天下。  
在實(shí)際業(yè)務(wù)場(chǎng)景中,用戶往往會(huì)提供格式不一的 Excel 文件,有時(shí)希望將其轉(zhuǎn)換為 PDF 并橫向顯示,所有列壓縮在一頁內(nèi),下面我們來看看具體實(shí)現(xiàn)方法吧

背景需求

在實(shí)際業(yè)務(wù)場(chǎng)景中,用戶往往會(huì)提供格式不一的 Excel 文件(尤其列非常多),希望將其轉(zhuǎn)換為 PDF 并橫向顯示,所有列壓縮在一頁內(nèi)。

用戶不會(huì)手動(dòng)設(shè)置打印參數(shù),因此希望通過 Java 代碼實(shí)現(xiàn)自動(dòng)化轉(zhuǎn)換,保證視覺效果統(tǒng)一。

技術(shù)方案概覽

技術(shù)棧

工具用途
Apache POI修改 Excel 頁設(shè)置(橫向、一頁寬)
LibreOffice使用 headless 模式導(dǎo)出 PDF
Java實(shí)現(xiàn)邏輯控制和流程管理

頁面設(shè)置關(guān)鍵代碼

Apache POI 5.2.5

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public static void adjustExcelPageSetup(String inputPath, String tempPath) throws IOException {
    FileInputStream fis = new FileInputStream(inputPath);
    Workbook workbook = new XSSFWorkbook(fis);
    for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
        Sheet sheet = workbook.getSheetAt(i);
        PrintSetup printSetup = sheet.getPrintSetup();
        printSetup.setLandscape(true); // 橫向打印
        sheet.setAutobreaks(true); // 自動(dòng)分頁
        sheet.setFitToPage(true); // 啟用適應(yīng)頁面
        printSetup.setFitWidth((short) 1); // 一頁寬度
        printSetup.setFitHeight((short) 0); // 高度不限(0 = 自動(dòng))
        }
        FileOutputStream fos = new FileOutputStream(tempPath);
        workbook.write(fos);
        workbook.close();
        fis.close();
        fos.close();
}

LibreOffice 命令行調(diào)用

public static void convertToPdf(String libreOfficePath, String inputPath, String outputDir) throws IOException, InterruptedException {
    List<String> command = Arrays.asList(
        libreOfficePath,
        “–headless”,
        “–norestore”,
        “–convert-to”, “pdf”,
        “–outdir”, outputDir,
        inputPath
        );
        ProcessBuilder pb = new ProcessBuilder(command);
        pb.inheritIO();
        Process process = pb.start();
        int exitCode = process.waitFor();

if (exitCode == 0) {
    System.out.println("轉(zhuǎn)換成功: " + inputPath);
    
} else {
    System.err.println("轉(zhuǎn)換失敗: " + inputPath);
    
}
    
}

常見問題 FAQ

1.setFitToWidth() 報(bào)錯(cuò):方法不存在?

是早期示例誤導(dǎo),正確方法是:

printSetup.setFitWidth((short) 1);
printSetup.setFitHeight((short) 0);

2.temp_wide_excel.xlsx 是否需要預(yù)創(chuàng)建?

不需要,只要目錄存在,程序會(huì)自動(dòng)創(chuàng)建并寫入該文件。

3.文件路徑有空格導(dǎo)致 LibreOffice 轉(zhuǎn)換失敗?

請(qǐng)使用 “路徑” 包含引號(hào)或使用 new File(path).getAbsolutePath() 避免錯(cuò)誤。

4.Excel 很寬時(shí) PDF 仍分頁?

請(qǐng)務(wù)必:

使用 printSetup.setFitWidth((short) 1) 設(shè)置一頁寬

啟用 sheet.setFitToPage(true)

使用 LibreOffice 轉(zhuǎn)換前,先保存好設(shè)置

完整流程

接收原始 Excel 文件(.xlsx)

使用 Apache POI 設(shè)置打印參數(shù)(橫向、一頁寬)

輸出為臨時(shí)文件(如 temp_wide_excel.xlsx)

使用 LibreOffice 命令行導(dǎo)出 PDF

輸出 PDF 橫向顯示、列不分頁

示例目錄結(jié)構(gòu)

D:\input\wide_excel.xlsx        // 原始文件
D:\input\temp_wide_excel.xlsx   // 臨時(shí)設(shè)置后文件
D:\output\wide_excel.pdf        // 最終 PDF 輸出

擴(kuò)展建議

支持批量處理整個(gè)文件夾 Excel 文件

自動(dòng)清理臨時(shí)文件

包裝為 CLI 工具或 Sp

到此這篇關(guān)于Java+LibreOffice實(shí)現(xiàn)Excel轉(zhuǎn)PDF并橫向一頁顯示所有列的文章就介紹到這了,更多相關(guān)Java Excel轉(zhuǎn)PDF內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • listview點(diǎn)擊無效的處理方法(推薦)

    listview點(diǎn)擊無效的處理方法(推薦)

    下面小編就為大家?guī)硪黄猯istview點(diǎn)擊無效的處理方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • 教你java面試時(shí)如何聊單例模式

    教你java面試時(shí)如何聊單例模式

    這篇文章主要給大家介紹了關(guān)于Java單例模式推薦的幾種模式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • Java中的線程中斷機(jī)制和LockSupport詳解

    Java中的線程中斷機(jī)制和LockSupport詳解

    這篇文章主要介紹了Java中的線程中斷機(jī)制和LockSupport詳解,在Java中沒有辦法立即停止一條線程,然而停止線程卻顯得尤為重要,如取消一個(gè)耗時(shí)操作,因此,Java提供了一種用于停止線程的協(xié)商機(jī)制中斷,也即中斷標(biāo)識(shí)協(xié)商機(jī)制,需要的朋友可以參考下
    2023-09-09
  • springboot controller參數(shù)注入方式

    springboot controller參數(shù)注入方式

    這篇文章主要介紹了springboot controller參數(shù)注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • DragChartPanel可拖拽曲線應(yīng)用詳解

    DragChartPanel可拖拽曲線應(yīng)用詳解

    這篇文章主要為大家詳細(xì)介紹了DragChartPanel可拖拽曲線的應(yīng)用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • IDEA集成JProfiler的圖文詳解

    IDEA集成JProfiler的圖文詳解

    本文詳細(xì)介紹了JProfiler的下載、安裝和使用過程,首先需要在官網(wǎng)下載對(duì)應(yīng)操作系統(tǒng)的安裝包并進(jìn)行安裝,然后填寫個(gè)人信息進(jìn)行注冊(cè)并獲取許可證密鑰,感興趣的朋友一起看看吧
    2024-10-10
  • java實(shí)現(xiàn)可視化界面肯德基(KFC)點(diǎn)餐系統(tǒng)代碼實(shí)例

    java實(shí)現(xiàn)可視化界面肯德基(KFC)點(diǎn)餐系統(tǒng)代碼實(shí)例

    這篇文章主要介紹了java肯德基點(diǎn)餐系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • JDK8中Optional類巧用之判空操作

    JDK8中Optional類巧用之判空操作

    善用Optional可以使我們代碼中很多繁瑣、丑陋的設(shè)計(jì)變得十分優(yōu)雅,這篇文章主要給大家介紹了JDK8中Optional類巧用之判空的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • springboot本地調(diào)試沒問題,打包運(yùn)行報(bào)錯(cuò)原因及分析

    springboot本地調(diào)試沒問題,打包運(yùn)行報(bào)錯(cuò)原因及分析

    這篇文章主要介紹了springboot本地調(diào)試沒問題,打包運(yùn)行報(bào)錯(cuò)原因及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • JAVA中五個(gè)重定向的方式盤點(diǎn)

    JAVA中五個(gè)重定向的方式盤點(diǎn)

    頁面重定向即頁面從當(dāng)前請(qǐng)求的頁面,有條件或者定時(shí)跳轉(zhuǎn)到其他頁面,下面這篇文章主要給大家介紹了關(guān)于JAVA中五個(gè)重定向的方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12

最新評(píng)論