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

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

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

背景需求

在實(shí)際業(yè)務(wù)場景中,用戶往往會(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)換失?。?/h3>

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

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

請務(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java的Hibernate框架中的繼承映射學(xué)習(xí)教程

    Java的Hibernate框架中的繼承映射學(xué)習(xí)教程

    Hibernate中的映射可以將類與表對應(yīng),并利用類的繼承特性,這里我們就來看一下Java的Hibernate框架中的繼承映射學(xué)習(xí)教程
    2016-07-07
  • Java修改eclipse中web項(xiàng)目的server部署路徑問題

    Java修改eclipse中web項(xiàng)目的server部署路徑問題

    這篇文章主要介紹了Java修改eclipse中web項(xiàng)目的server部署路徑,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java多線程與線程池技術(shù)分享

    Java多線程與線程池技術(shù)分享

    這篇文章主要介紹了Java多線程與線程池技術(shù)分享,線程池本質(zhì)是池化技術(shù)的應(yīng)用,和連接池類似,創(chuàng)建連接與關(guān)閉連接屬于耗時(shí)操作,下文相關(guān)介紹需要的小伙伴可以參考一下
    2022-03-03
  • Java web數(shù)據(jù)可視化實(shí)現(xiàn)原理解析

    Java web數(shù)據(jù)可視化實(shí)現(xiàn)原理解析

    這篇文章主要介紹了Java web數(shù)據(jù)可視化實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Spring BeanFactory和FactoryBean區(qū)別解析

    Spring BeanFactory和FactoryBean區(qū)別解析

    這篇文章主要介紹了Spring BeanFactory和FactoryBean區(qū)別解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Spring運(yùn)行時(shí)動(dòng)態(tài)注冊bean的方法

    Spring運(yùn)行時(shí)動(dòng)態(tài)注冊bean的方法

    這篇文章主要介紹了Spring運(yùn)行時(shí)動(dòng)態(tài)注冊bean的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • java的IO流詳細(xì)解讀

    java的IO流詳細(xì)解讀

    這篇文章主要介紹了java的IO流詳細(xì)解讀,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • SpringSecurity6.0 如何通過JWTtoken進(jìn)行認(rèn)證授權(quán)

    SpringSecurity6.0 如何通過JWTtoken進(jìn)行認(rèn)證授權(quán)

    這篇文章主要介紹了SpringSecurity6.0 通過JWTtoken進(jìn)行認(rèn)證授權(quán)的過程,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2025-04-04
  • java棧實(shí)現(xiàn)二叉樹的非遞歸遍歷的示例代碼

    java棧實(shí)現(xiàn)二叉樹的非遞歸遍歷的示例代碼

    這篇文章主要介紹了java棧實(shí)現(xiàn)二叉樹的非遞歸遍歷,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Java實(shí)現(xiàn)帶緩沖的輸入輸出流

    Java實(shí)現(xiàn)帶緩沖的輸入輸出流

    本文詳細(xì)講解了Java實(shí)現(xiàn)帶緩沖的輸入輸出流,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評論

健康| 新河县| 木兰县| 玛多县| 图木舒克市| 来宾市| 红原县| 大埔区| 安溪县| 陆川县| 西乌珠穆沁旗| 昂仁县| 汾西县| 美姑县| 惠安县| 望江县| 白城市| 龙海市| 乾安县| 保亭| 五莲县| 互助| 乐昌市| 双桥区| 元谋县| 修文县| 信阳市| 奉新县| 罗甸县| 麦盖提县| 桑日县| 沾益县| 集贤县| 泊头市| 金秀| 景泰县| 宁河县| 疏附县| 大英县| 商洛市| 壶关县|