暑假实习期间,跟着项目组开发办公自动化系统,在这里面可能都会遇到将各类文件转成pdf, 如txt,jpg,png等图片格式,还有MS offfice系列的word,ppt,excel.
在这里说下解决excel转pdf的问题,个人觉得这个最困难。
excel 有工作簿,工作表,单元格
操作excel包括对象Workbook,Sheet ,Cell。
一个excel就对应一个Workbook对象,
一个Workbook可以有多个Sheet对象
一个Sheet对象可以有多个Cell对象
要将excel转pdf,就先要获取excel的内容,工作表,单元格。读取excl
(1)JXL , 这个是最常见用于读取excel文件, 但这个不支持07 excel 。
(2)POI, 这个可以读取03,07excel,对应的方法网上很多,百度下。
首先先介绍几种转pdf方法
1,itext (百度下它用法,所需要的jar包)
利用iText五步创建一个PDF文件:helloword。
第一步,创建一个 iTextSharp.text.Document对象的实例:
Document document = new Document();
第二步,为该Document创建一个Writer实例:
PdfWriter.getInstance(document, new FileStream("Chap0101.pdf", FileMode.Create));
第三步,打开当前Document
document.Open();
第四步,为当前Document添加内容:
document.Add(new Paragraph("Hello World"));
第五步,关闭Document
document.Close();
如果用IText将excel转pdf.需要你先将读取excel表中每个工作表中的每个单元格,然后一个一个转化到pdf中,同时还有单元格边距,前景色,背景色等一系列属性,而且很难获取到图表等格式内容,因为图表不是在某几个单元格内。如果利用itext实现很困难,个人不推荐,但是别的格式,图片等均可以。
2 ,openoffice
这个可以参考老赵的这篇博客
http://blog.zhaojie.me/2010/05/convert-document-to-pdf-via-openoffice.html
这种方法就是我们不需要自己一个一个去读取excel单元格,传文件几个参数就可以转了,相 于第三方去帮我们转成pdf.
当时用这种方法实现了excel转成pdf,但由于当时考虑服务器端要装太多东西就放弃了这种方法。
3,Jacob 这是我们项目组采用的方法
jacob转MS office系列 word,ppt,excel 都很类似,它的实现方法挺特别的。大致过程分这几步
构建容器,读取excel工作表,执行excel另存操作 (这里面excel工作表不能为空)
在这第二步中,你需要一一获取excel工作表,不然只能转化当前活动工作表(也就是你打开excel所看到的第一个表)。不能将整个excel表都转成pdf.
这个你可以查询excel脱机开发人员参考,查找workboos对象,有个属性count,item ,首先获取当前excel工作表数量(count),然后一一获取工作表。
这样每个工作表转成一个pdf临时文件,你还需要将多个工作表生成的pdf文件合并成一个pdf文件,删除掉这些临时文件。
你百度用“iText分割和合并pdf文件”,这个可以帮你解决。
整个处理过程大概就是这样的.
(注意)
上面所说的方法都是当整个excel 转成pdf, 如果项目的需求有变化,只想将excel某几个工作表转成pdf。
这时将整个excel表进行处理,获取只需要的几个工作表。我的思路是删除除需要的工作表,
举个例子,excel有5个工作表,不为空表,我需要1,3工作表,这时我删除掉2,4,5工作表,仅保留1,3工作表,然后再用上述三种方法(其中一种)转成pdf.
我用的poi包先读取,后删除,再转化。
个人实习结束后整理出来,有些可能遗忘的,欢迎相互探讨。