基本原理
将excel单元格的值读取出来,然后生成一份pdf,并将单元格数据写进去。
用到的库
<!-- 写入pdf用的库 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<!-- 让PDF支持中文写入 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<!-- 操作excel的库 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.0.0</version>
</dependency>
具体操作
package com.example.demo;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
public class DemoApplication {
public static void main(String[] args) throws Exception{
//excel文件路径
String excelFile = "C:\\Users\\admin\\Desktop\\source1.xls";
//pdf文件输出路径
String out = "C:\\Users\\admin\\Desktop\\out.pdf";
//设置中文
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
BaseFont.NOT_EMBEDDED);
//普通字体
Font fontChinese = new Font(bfChinese, 12, Font.NORMAL);
//读取excel
FileInputStream input_document = new FileInputStream(new File(excelFile));
HSSFWorkbook my_xls_workbook = new HSSFWorkbook(input_document);
HSSFSheet my_worksheet = my_xls_workbook.getSheetAt(0);
//获取excel总列数
int totalCol = my_worksheet.getRow(0).getPhysicalNumberOfCells();
//准备遍历excel
Iterator<Row> rowIterator = my_worksheet.iterator();
//生成一个pdf
Document iText_xls_2_pdf = new Document();
PdfWriter.getInstance(iText_xls_2_pdf, new FileOutputStream(out));
iText_xls_2_pdf.open();
//在pdf中创建一个表格
PdfPTable my_table = new PdfPTable(totalCol);
//遍历excel, 将数据输出到pdf的表格中
PdfPCell table_cell = null;
while(rowIterator.hasNext()) {
Row row = rowIterator.next();
Iterator<Cell> cellIterator = row.cellIterator();
while(cellIterator.hasNext()) {
Cell cell = cellIterator.next(); //Fetch CELL
if(cell.getCellType() == CellType.STRING){
//Push the data from Excel to PDF Cell
table_cell=new PdfPCell(new Phrase(cell.getStringCellValue(), usedFont));
}
if(cell.getCellType() == CellType.NUMERIC){
//Push the data from Excel to PDF Cell
table_cell=new PdfPCell(new Phrase(String.valueOf(cell.getNumericCellValue()), usedFont));
}
my_table.addCell(table_cell);
}
}
iText_xls_2_pdf.add(my_table);
iText_xls_2_pdf.close();
input_document.close(); //close xls
}
}