需求:Itext+poi将多份excel(多个sheet)、图片转换为PDF,并最终合并成一份PDF,在合并的PDF文件每页要加盖公司印章
重点:
- 样式设置(字体颜色、字体大小、斜体、加粗、下划线、删除线、中文显示、单元格背景色、边框粗细、边框颜色、字体水平居中、垂直居中)
- 读取单元格(合并单元格)里的图片(2003和2007)
- 合并单元格处理
- 单元格内容里的整数、浮点数、日期类型的处理
- Itext页码标注
- 合并多个PDF文件
- 加盖印章
遗留问题:
- poi可以通过font.getFont获取字体样式,但是itext里通过font.setFamily设置了无效
- excel里设置了边框,转换成PDF后边框如有重叠显示的线条就会加粗,所以我干脆就直接设置所有边框为0.1f
- excel里的图片只能固定在单元格内才能在转换为PDF后显示在指定的位置
下面两张图,只有第二张图(固定了图片显示在A1-F19)才能被读取出来放在指定的位置,图二读取出来了不知道要如何指定放置的位置,希望有大神能给出更好的建议。
图一:
图二:
- poi可以设置单元格边框为虚线,但是itext没有找到相关API
- excel里插入的形状(例如:箭头、矩形、三角形)不知道要如何读取,最后是要求业务用符号代替的
- poi获取行数列数不准确,sheet.getLastRowNum()和sheet.getPhysicalNumberOfRows(),有的时候前面那个获取的是准确的,有的时候是后面的是准确的。
- 通过cell.setCellType(cell.Cell_TYPE_STRING),cell.getStringCellValue();可以获取整数、浮点数,日期类型(2015.5.6)但是excel里的日期如果写成2015/9/10获取的就是42257
- 如果一个单元格里的字体颜色有多种,最后只能显示一种颜色
- 获取的单元格背景颜色不够精确,excel模板内容相同的xls和xlsx两份文件转出来的PDF效果不一致
- 合并PDF文件时,无法统一页面的横纵向显示,并且无法获取到准确的页面宽度以设置页码的显示位置
重点里标注的是我已经实现了的,遗留问题是我暂时没解决的。做这个的时候参考了很多前人的资料,但是还是发现有很多问题,有些问题有人遇到提出来了,但是网上也没有明确的解决办法,有些问题是压根儿都没人提出来,网上的很多例子都很简单,如果表格复杂,转PDF就有问题,所以建议公司一定要用这个的话,最好购买专门的软件。
PS:不提供代码了,代码在公司电脑上,没办法拿出来,如果有问题,可以邮件我,[email protected]。如果有大神能解决我的遗留问题,欢迎留言讨论。