1.引入jar包
<properties>
<itext.version>7.1.11</itext.version>
</properties>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>kernel</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>io</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>layout</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>forms</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdfa</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>pdftest</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>font-asian</artifactId>
<version>${itext.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>1.1.2-beta5</version>
</dependency>
2. java代码
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Locale;
public class PdfUtil {
public static void main(String[] args) throws IOException {
try {
excel2pdf("C:\\Users\\Administrator\\Downloads\\报表.xls","C:\\Users\\Administrator\\Downloads\\aa.pdf");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void excel2pdf(String inFilePath, String outFilePath){
PdfFont pdfFont = null;
try {
pdfFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", true);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try (PdfDocument pdf = new PdfDocument(new PdfWriter(new FileOutputStream(outFilePath)));
Document document = new Document(pdf, PageSize.A2.rotate());) {
String type = "xls".equals(getSuffix(inFilePath).trim()) ? "org.apache.poi.hssf.usermodel.HSSFWorkbook"
: "org.apache.poi.xssf.usermodel.XSSFWorkbook";
// 文件输入流读取文件
InputStream in = new FileInputStream(inFilePath);
// 反射创建workbook
Class workbookClass = Class.forName(type);
org.apache.poi.ss.usermodel.Workbook workbook = (org.apache.poi.ss.usermodel.Workbook) workbookClass
.getConstructor(InputStream.class).newInstance(in);
Sheet sheet = workbook.getSheetAt(0);
int row = sheet.getPhysicalNumberOfRows();
int maxColumn=0;
for (int q = sheet.getFirstRowNum(); q <=row+1; q++) {
Row r = sheet.getRow(q);
if(r==null){
continue;
}
org.apache.poi.ss.usermodel.Cell firstCell = sheet.getRow(q).getCell(0);
if(firstCell==null){
continue;
}
int currentRowMaxColumn = sheet.getRow(q).getLastCellNum();
org.apache.poi.ss.usermodel.Cell cell = sheet.getRow(q).getCell(currentRowMaxColumn-1);
if(cell==null){
continue;
}else{
maxColumn = maxColumn>currentRowMaxColumn?maxColumn:currentRowMaxColumn;
}
}
int column = maxColumn;
Table table = new Table(column);
String str = null;
boolean addHeadFlag = false;
for (int i = sheet.getFirstRowNum(); i <= row+1;i++) {
Row r = sheet.getRow(i);
if(r==null){
continue;
}
for (int j = 0; j < column; j++) {
// 获取excel单元格
org.apache.poi.ss.usermodel.Cell cell = sheet.getRow(i).getCell(j);
if (cell!=null && cell.getCellType() == CellType.NUMERIC.getCode()) {
str = cell.getNumericCellValue()+"";
}else if(cell!=null ){
str = cell.getStringCellValue();
}else{
str = null;
}
if(cell==null && j==0){
continue;
}
else if(cell==null){
Cell cells = new Cell().setFont(pdfFont).add(new Paragraph(""));
table.addCell(cells);
}else if(str!=null && str.contains("报表") && (i==sheet.getFirstRowNum() || i==sheet.getFirstRowNum()+1) && addHeadFlag ){
Cell cells = new Cell().setFont(pdfFont).add(new Paragraph(""));
table.addCell(cells);
}
else{
if (cell.getCellType() == CellType.NUMERIC.getCode()) {
str = (int) cell.getNumericCellValue() + "";
} else {
str = cell.getStringCellValue();
}
Cell cells = new Cell().setFont(pdfFont).add(new Paragraph(str));
table.addCell(cells);
addHeadFlag = true;
}
}
}
document.add(table);
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getSuffix(String filePath) {
int dotIndex = filePath.lastIndexOf(".");
return filePath.substring(dotIndex + 1);
}