这个是参考其它文章做的demo,哈哈忘记是哪位大神的了。
供学习用。
使用poi+itextpdf
中文字体可能需要itext-asian
实现原理: 先使用poi将excel转为poi对象,再从poi对象中的内容转为itexpdf的对象
思路步骤:
1、创建pdf文件对象:Document
Document document = new Document(PageSize.A4.rotate());
//设置字体
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont);
font.setSize(13);
2、设置pdf输出位置
//创建pdf的writer实例对象
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("C:\\Users\\dd\\Desktop\\PdfTable3.pdf"));
3、打开文件对象,进行pdf操作
document.open();
4、将poi对象转为itexpdf的对象
//poi操作excel
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File("C:\\Users\\dd\\Desktop\\3234.xls")));
//获取第一个工作表
HSSFSheet sheet = workbook.getSheetAt(0);
int column = sheet.getRow(0).getLastCellNum();
int row = sheet.getPhysicalNumberOfRows();
//根据excel定义pdf工作表的总行数,创建pdf的table对象
PdfPTable table = new PdfPTable(column-sheet.getRow(0).getFirstCellNum());
//转换
String str = null;
for (int i = sheet.getFirstRowNum(); i < row; i++) {
for (int j = sheet.getRow(0).getFirstCellNum(); j < column; j++) {
//得到excel单元格的内容
HSSFCell cell = sheet.getRow(i).getCell(j);
if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
str = (int)cell.getNumericCellValue() + "";
}else{
str = cell.getStringCellValue();
}
//创建pdf单元格对象,并往pdf单元格对象赋值。
PdfPCell cells = new PdfPCell(new Paragraph(str, font));
//pdf单元格对象添加到table对象
table.addCell(cells);
}
}
5、将pdf的table对象添加到document对象,并且关闭资源。
document.add(table);
document.close();
writer.close();
所有代码:
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.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class PoiUtils2 {
public static void main(String[] args) throws IOException, DocumentException {
excelToPdf();
}
public static void excelToPdf() throws IOException, DocumentException {
Document document = new Document(PageSize.A4.rotate());
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont);
font.setSize(13);
PdfWriter writer = PdfWriter.getInstance(document,new FileOutputStream("C:\\Users\\dd\\Desktop\\PdfTable3.pdf"));
document.open();
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(new File("C:\\Users\\dd\\Desktop\\3234.xls")));
HSSFSheet sheet = workbook.getSheetAt(0);
int column = sheet.getRow(0).getLastCellNum();
int row = sheet.getPhysicalNumberOfRows();
PdfPTable table = new PdfPTable(column-sheet.getRow(0).getFirstCellNum());
String str = null;
for (int i = sheet.getFirstRowNum(); i < row; i++) {
for (int j = sheet.getRow(0).getFirstCellNum(); j < column; j++) {
//得到excel单元格的内容
HSSFCell cell = sheet.getRow(i).getCell(j);
if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
str = (int)cell.getNumericCellValue() + "";
}else{
str = cell.getStringCellValue();
}
//创建pdf单元格对象,并往pdf单元格对象赋值。
PdfPCell cells = new PdfPCell(new Paragraph(str, font));
//pdf单元格对象添加到table对象
table.addCell(cells);
}
}
document.add(table);
document.close();
writer.close();
}
}