使用iText绘制pdf文件时,PdfPTable如何实现合并行与列?

wearefamulei 2017-09-03 01:23:36

有个单元格既要合并行,也要合并列。请问该如何实现。
我这样写:

PdfPCell cell = new PdfPCell(new Paragraph(str, font));
cell.setMinimumHeight(25);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setVerticalAlignment(Element.ALIGN_MIDDLE);

cell.setColspan(colsnum);//单元格所在列
cell.setRowspan(rownum);//单元格所在行
table.addCell(pdfPCell);


。。。
workbook.close();
document.open();
document.add(table);
document.close();
pdfWriter.close();

不过在document.add(table)时报错了,还是个空指针错误
报错如下:



Exception in thread "main" com.lowagie.text.DocumentException: java.lang.NullPointerException
at com.lowagie.text.pdf.PdfDocument.add(Unknown Source)
at com.lowagie.text.Document.add(Unknown Source)
at com.ExcelToPdf.readExcel(ExcelToPdf.java:159)
at com.ExcelToPdf.main(ExcelToPdf.java:290)
Caused by: java.lang.NullPointerException
at com.lowagie.text.pdf.PdfPTable.getRowHeight(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.calculateHeights(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.setTotalWidth(Unknown Source)
at com.lowagie.text.pdf.ColumnText.goComposite(Unknown Source)
at com.lowagie.text.pdf.ColumnText.go(Unknown Source)
at com.lowagie.text.pdf.ColumnText.go(Unknown Source)
at com.lowagie.text.pdf.PdfDocument.addPTable(Unknown Source)
... 4 more
...全文
3352 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
delibk 2018-09-18
  • 打赏
  • 举报
回复
java itex pdf 合并多行多列单元格的问题,您是怎么解决的?
wearefamulei 2017-09-04
  • 打赏
  • 举报
回复
没有人那就自己顶一下
wearefamulei 2017-09-03
  • 打赏
  • 举报
回复
合并单元格的值只取一次,循环到该合并单元格的其它cell的时候,如果cell的value是"",则跳过

 boolean flag = true;
。。。
int firstColumn = range.getFirstColumn();
int lastColumn = range.getLastColumn();
int firstRow = range.getFirstRow();
int lastRow = range.getLastRow();
if (k == firstRow && i == firstColumn) { //k是当前循环的行index,i为当前循环的列index
        PdfPCell cell = new PdfPCell(new Paragraph(str, font));
        cell.setMinimumHeight(25);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        
        cell.setColspan(i);//单元格所在列
        cell.setRowspan(k);//单元格所在行
        table.addCell(pdfPCell);
}
flag = false;
break;

//这里是为了防止itext读取合并单元格的值只读取一次,其实合并单元格就第一次有值,其它的都是""
if (flag && !"".equals(value)) {
     table.addCell(getPDFCell(value, font));
}
请问我这样写有问题吗,怎么合并多行多列就报空指针了呢
wearefamulei 2017-09-03
  • 打赏
  • 举报
回复
就是在解析“”测试“”这一块合并单元格出了问题,如果只合并列或者只合并行是没有异常的

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧