通过jxl和itext 将excel转化成pdf

最近做一个东西需要将excel转化成pdf,在网上也看了不少博客和文章,发现好多是用poi+itext将excel转化成pdf,但是poi对excel操作我并没有看过,之前倒是用jxl对excel进行过操作,但是网上基本上没有jxl+itext将excel转化成pdf的案例,所以就自己看了一些itext生成pdf的案例,然后再结合jxl对excel的操作,终于实现了将excel转化成pdf的功能,不过这个功能还有一些缺陷,1:jxl无法读取到excel中单元格的自定义格式,所以只能在生成pdf的时候自己定义单元格格式    2:图片的读取我这里没有测试    不过应该也不会差太多,目前主要是这两个功能还没有做,至于itext生成pdf格式的设置还有很多内容,我这里并没有深入的研究,有兴趣的童鞋可以自己再去学习,现在将我完成的代码放在下面,希望能帮到需要的人。

整个过程需要用到两个jar包,一个jxl.jar,一个itextpdf.jar ,至于itext还有一个中文包,但是我这里没有用到,字体的设置格式是直接从本地读取的。

public class ExcelToPdf {

	public static void main(String[] args) throws DocumentException, IOException {
		Document document = new Document(PageSize.A4,0,0,50,0);
		PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("e:/PdfTable.pdf"));
		
		//字体设置  
        /* 
         * 由于itext不支持中文,所以需要进行字体的设置,我这里让itext调用windows系统的中文字体, 
         * 找到文件后,打开属性,将文件名及所在路径作为字体名即可。 
         */  
        //创建BaseFont对象,指明字体,编码方式,是否嵌入  
        BaseFont bf=BaseFont.createFont("C:\\Windows\\Fonts\\simkai.ttf", BaseFont.IDENTITY_H, false);  
        //创建Font对象,将基础字体对象,字体大小,字体风格  
        Font font=new Font(bf,13,Font.NORMAL);  
        int rowNum = 0;
		int colNum = 0;
		try {
			Workbook workbook=Workbook.getWorkbook(new File("E:\\jianli2.xls"));
			
			Sheet sheet=workbook.getSheet(2);
			int column=sheet.getColumns();
			
			//下面是找出表格中的空行和空列
			List nullCol = new ArrayList<>();
			List nullRow = new ArrayList<>();
			for(int j=0;j= range.getTopLeft().getColumn() && j <= range.getBottomRight().getColumn() 
								&& i >= range.getTopLeft().getRow() && i <= range.getBottomRight().getRow()){
							if(str == null || "".equals(str)){
								flag = false;
								break;
							}
							rowNum = range.getBottomRight().getRow() - range.getTopLeft().getRow()+1;
							colNum = range.getBottomRight().getColumn() - range.getTopLeft().getColumn()+1;
							if(rowNum > colNum){
								cell1 = mergeRow(str, font, rowNum);
								cell1.setColspan(colNum);
								table.addCell(cell1);
							}else {
								cell1 = mergeCol(str, font, colNum);
								cell1.setRowspan(rowNum);
								table.addCell(cell1);
							}
							//System.out.println(num1 + "  " + num2);
							flag = false;
							break;
						}
					}
					if(flag){
						table.addCell(getPDFCell(str,font));		 
					}
				}
			}
			
			workbook.close();
			document.open();      
	        document.add(table);  
	        document.close();  
	        writer.close();
		} catch (BiffException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	//合并行的静态函数  
    public static PdfPCell mergeRow(String str,Font font,int i) {  
          
        //创建单元格对象,将内容及字体传入  
        PdfPCell cell=new PdfPCell(new Paragraph(str,font));  
        //设置单元格内容居中  
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);  
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);  
        //将该单元格所在列包括该单元格在内的i行单元格合并为一个单元格  
        cell.setRowspan(i);  
          
        return cell;  
    }  
  
    //合并列的静态函数  
    public static PdfPCell mergeCol(String str,Font font,int i) {  
          
        PdfPCell cell=new PdfPCell(new Paragraph(str,font));  
        cell.setMinimumHeight(25);  
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);  
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);  
        //将该单元格所在行包括该单元格在内的i列单元格合并为一个单元格  
        cell.setColspan(i);  
          
        return cell;  
    }  
	
	 //获取指定内容与字体的单元格  
    public static PdfPCell getPDFCell(String string, Font font)   
    {  
        //创建单元格对象,将内容与字体放入段落中作为单元格内容  
        PdfPCell cell=new PdfPCell(new Paragraph(string,font));  
          
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);  
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);  
          
        //设置最小单元格高度  
        cell.setMinimumHeight(25);  
        return cell;  
    }  
	
}

我的itext生成pdf的代码是参考的http://blog.csdn.net/u013129932/article/details/43889705


你可能感兴趣的:(java)