Excel转pdf

Java可以使用Apache POI和iText两个库来实现Excel转PDF的功能。

这里是使用iText的方式

添加依赖

XML 复制代码
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext7-core</artifactId>
    <version>7.1.16</version>
</dependency>

下面是一个使用Apache POI将Excel转换为PDF的示例代码:

java 复制代码
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) {
        String excelFilePath = "F:\\tmp\\input.xlsx"; // 输入的Excel文件路径
        String pdfFilePath = "F:\\tmp\\output.pdf"; // 输出的PDF文件路径

        try {
            convertExcelToPdf(excelFilePath, pdfFilePath);
            System.out.println("转换成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void convertExcelToPdf(String excelFilePath, String pdfFilePath) throws IOException {
        Workbook workbook = new XSSFWorkbook(new FileInputStream(excelFilePath));
        PdfWriter writer = new PdfWriter(new FileOutputStream(pdfFilePath));
        PdfDocument pdfDoc = new PdfDocument(writer);
        Document document = new Document(pdfDoc);
// 设置中文字体
        PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", true);

        for (int i = 0; i < workbook.getNumberOfSheets(); i++) {
            Sheet sheet = workbook.getSheetAt(i);
            document.add(new Paragraph("Sheet: " + sheet.getSheetName()).setFont(font));

            for (Row row : sheet) {
                StringBuilder rowData = new StringBuilder();
                for (Cell cell : row) {
                    switch (cell.getCellType()) {
                        case STRING:
                            rowData.append(cell.getStringCellValue()).append(" ");
                            break;
                        case NUMERIC:
                            rowData.append(cell.getNumericCellValue()).append(" ");
                            break;
                        case BOOLEAN:
                            rowData.append(cell.getBooleanCellValue()).append(" ");
                            break;
                        default:
                            rowData.append(" ");
                    }
                }
                  document.add(new Paragraph(rowData.toString().trim()).setFont(font));
            }
            document.add(new Paragraph("\n")); // 分隔不同的工作表
        }

        document.close();
        workbook.close();
    }
}

注意,以上示例代码中的input.xlsx是输入的Excel文件名,output.pdf是输出的PDF文件名。

pdf生成时需要设置字体,否则生成的pdf中,中文将无法显示。

相关推荐
办公解码器4 小时前
Excel怎么在下拉菜单中选择计算方式?
excel
梦里不知身是客114 小时前
kettle的mysql 根据条件,导出到不同的excel中
数据库·mysql·excel
J.xx6 小时前
在线excel数据导入导出框架
excel
Source.Liu8 小时前
【pdf-rs】color.rs 文件解析
pdf
ceffans10 小时前
PDF文档中表格以及形状解析-后续处理(线段生成最小多边形)
c++·windows·算法·pdf
Source.Liu10 小时前
【printpdf】color.rs 文件解析
rust·pdf
办公解码器19 小时前
Excel怎么批量快速修改批注?
excel
我是小邵21 小时前
主流数据分析工具全景对比:Excel / Python / R / Power BI / Tableau / Qlik / Snowflake
python·数据分析·excel
乘风!1 天前
前端Jquery,后端Java实现预览Word、Excel、PPT,pdf等文档
pdf·word·excel·jquery
我有一棵树1 天前
浏览器使用 <embed> 标签预览 PDF 的原理
pdf·embed