ITEXT 表格的指定列合并-升级版
来源:互联网 发布:js div左右滑动切换 编辑:程序博客网 时间:2024/05/21 19:32
问题场景
今天在review代码的时候,发现对于ITEXT 表格的指定列合并还可以升级下,支持重复的字段出现合并。
比较
ITEXT 表格的指定列合并-升级版:方法简单,且支持 ‘A,A,B,C,A,D,D,D,E’,即字符串A可以重复不间断出现;
ITEXT 表格的指定列合并:方法略微复杂,且不支持 ‘A,A,B,C,A,D,D,D,E’,只支持 ‘A,A,B,C,D,D,D,E’,即字符串如果有重复的只能连续出现在一起。
CODE
需要导入的包:itext-pdfa-5.5.6.jar、itext-xtra-5.5.6.jar、itext-5.5.6.jar、itext-asian.jar
package itext.a14;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 java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;/** * Created on 2017/8/15 * Author: youxingyang. */public class A14 { public static String split = "<brb>"; public static void main(String[] args) { Document document = new Document(PageSize.A4, 48, 48, 60, 65); try { PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("A14.pdf")); document.open(); // 设置字体 BaseFont bfCN = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", false); // 正文的字体 Font headFont = new Font(bfCN, 12f, Font.BOLD, BaseColor.ORANGE); Font textFont = new Font(bfCN, 12f, Font.NORMAL, BaseColor.BLUE); //添加测试数据 List<String[]> list = new ArrayList<>(); for (int i = 0; i < 24; i++) { String[] arr = new String[4]; String value; if (i < 4) { value = "A"; } else if (i >= 4 && i < 6) { value = "B"; } else if (i >= 6 && i < 8) { value = "C"; } else if (i >= 8 && i < 13) { value = "D"; } else if (i == 13 || i == 14) { value = "A"; } else if (i > 14 && i < 16) { value = "E"; } else if (i == 17) { value = "F"; } else { value = "G"; } arr[0] = "0" + i; arr[1] = value; arr[2] = "2" + i; arr[3] = "3" + i; list.add(arr); } //复制要合并的列 List<String> ListIn = new ArrayList<>(); for (String[] aList : list) { ListIn.add(aList[1]); } //根据算法改变合并列的值 List<String> changeList = changeList(ListIn); //改变该列后把它复制到原来的list for (int i = 0; i < changeList.size(); i++) { String[] arr = list.get(i); arr[1] = changeList.get(i); list.set(i, arr); } document.newPage(); //建立一个4列的表格 PdfPTable table = new PdfPTable(4); String[] titleArr = {"第1列", "合并列", "第3列", "第4列"}; //加表格头部 addTitle1(table, titleArr, headFont); //加表格内容 addContent1(table, list, textFont); document.add(table); document.close(); } catch (DocumentException | IOException e){ e.printStackTrace(); } } private static void addContent1(PdfPTable table, List<String[]> list, Font textFont) { //表格数据内容 for (String[] str : list) { for (int j = 0; j < str.length; j++) { String value = str[j]; if (value != null) { Paragraph paragraph01; int spanNum = 1; if (j == 1 && value.contains(split)) { spanNum = Integer.parseInt(value.split(split)[1]); paragraph01 = new Paragraph(value.split(split)[0], textFont); } else { paragraph01 = new Paragraph(value, textFont); } paragraph01.setAlignment(1); PdfPCell cell = new PdfPCell(); cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);//然并卵 cell.setPaddingTop(-2f);//把字垂直居中 cell.setPaddingBottom(8f);//把字垂直居中 cell.addElement(paragraph01); cell.setRowspan(spanNum); table.addCell(cell); } } } } private static void addTitle1(PdfPTable table, String[] titleArr, Font headFont) { for (String aTitleArr : titleArr) { Paragraph p = new Paragraph(aTitleArr, headFont); PdfPCell cell = new PdfPCell(); p.setAlignment(1); cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); cell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);//然并卵 cell.setPaddingTop(-2f);//把字垂直居中 cell.setPaddingBottom(8f);//把字垂直居中 cell.addElement(p); table.addCell(cell); } } /** * 改变合并列的值 * @param drugList 内容支持 'A,A,B,C,D,D,D,E' 支持 'A,A,B,C,A,D,D,D,E' * @return */ private static List<String> changeList(List<String> drugList) { List<String> drugListCopy = new ArrayList<String>(); drugListCopy.addAll(drugList); int nullNum = 0; for (int i = 0; i < drugList.size(); i++) { if (i > 0) { if (drugList.get(i).equals(drugList.get(i - 1))) { drugListCopy.set(i, null); nullNum++; } else { if (nullNum > 0) { int start = i - nullNum - 1; drugListCopy.set(start, drugList.get(start) + split + (nullNum + 1)); nullNum = 0; } } } } return drugListCopy; }}
效果
阅读全文
0 0
- ITEXT 表格的指定列合并-升级版
- ITEXT 表格的指定列合并
- itext 合并列和行
- JS 合并表格列
- js合并表格列
- 合并表格第一列
- 改进版网页表格的合并单元格(支持不连续的列合并)
- 融合指定表格列
- js动态合并单元格(指定的列或之间列)
- iText的简单应用-表格
- 表格合并相同列,相同行的jquery实现
- table表格合并第一列中相同的内容!
- table表格合并跨行中相同元素的列
- table表格合并第一列中相同的内容!
- 用Javascript合并指定表格相同文本的相邻单元格
- jquery 合并相同内容的单元格,根据某列可以指定合并后面的任意列
- 将指定索引列的数据相同的行合并
- jQuery设置指定表格每行第一列的宽度
- 关于产品的一点点想法
- word2vec学习
- 《Hadoop基础教程》之初识Hadoop
- Java并发编程实战(一)线程安全
- TensorFlow
- ITEXT 表格的指定列合并-升级版
- java中四种引用类型
- Java并发编程:线程池的使用
- ibatis环境搭建
- SharpZipLib 解压 多个分压缩包文件
- Greenplum Resource Queue (资源队列)
- JS美化input按钮,IE错误的原因
- AVPass技术分析:银行劫持类病毒鼻祖BankBot再度来袭,如何绕过谷歌play的杀毒引擎?
- ftp