//生产的pdf文件路径
String wordName = UUID.randomUUID() + ".pdf";
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//创建一个pdf的document对象
com.itextpdf.text.Document document = new com.itextpdf.text.Document(com.itextpdf.text.PageSize.A4, 30f, 10f, 144f, 56f);
com.itextpdf.text.pdf.BaseFont bfChinese = com.itextpdf.text.pdf.BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H", com.itextpdf.text.pdf.BaseFont.NOT_EMBEDDED);
com.itextpdf.text.Font FontChinese = new com.itextpdf.text.Font(bfChinese, 14, Font.COURIER); // 其他所有文字字体
com.itextpdf.text.Font BoldChinese = new com.itextpdf.text.Font(bfChinese, 14, Font.BOLD); // 粗体
com.itextpdf.text.Font titleChinese = new com.itextpdf.text.Font(bfChinese, 20, Font.BOLD); // 模板抬头的字体
com.itextpdf.text.Font subFontChinese = new com.itextpdf.text.Font(bfChinese, 12, Font.COURIER); //
com.itextpdf.text.Font subBoldFontChinese = new com.itextpdf.text.Font(bfChinese, 8, Font.BOLD); //
com.itextpdf.text.pdf.PdfWriter instance = com.itextpdf.text.pdf.PdfWriter.getInstance(document, new FileOutputStream(dir+"/"+wordName));
document.open();
对已经生成的document对象进行操作
//设置大标题
com.itextpdf.text.Paragraph title = new com.itextpdf.text.Paragraph("测试("+reportName+")报表",titleChinese);// 抬头
title.setAlignment(com.itextpdf.text.Element.ALIGN_CENTER); // 居中设置
title.setLeading(1f);//设置行间距//设置上面空白宽度
document.add(title);
下面的内容根据自己的业务和报表的需求修改
//报表导出的时间、和导出报表时查询数据的时间范围和报表的类型
title=new com.itextpdf.text.Paragraph("报表类型:"+reportName ,BoldChinese);
title.setAlignment(com.itextpdf.text.Element.ALIGN_LEFT);
title.setSpacingBefore(10f);
document.add(title);
title=new com.itextpdf.text.Paragraph("创建时间:"+format.format(new Date()) ,BoldChinese);
title.setAlignment(com.itextpdf.text.Element.ALIGN_LEFT);
title.setSpacingBefore(10f);
document.add(title);
title=new com.itextpdf.text.Paragraph("查询时间:"+parameter+" 到 "+parameter2 ,BoldChinese);
title.setAlignment(com.itextpdf.text.Element.ALIGN_LEFT);
title.setSpacingBefore(10f);
document.add(title);
下面是具体的用循环输入需要的报表
float[] widths={50f};
com.itextpdf.text.pdf.PdfPTable table = new com.itextpdf.text.pdf.PdfPTable(widths);
table.setSpacingBefore(20f);// 设置表格上面空白宽度
table.setTotalWidth(500);// 设置表格的宽度
table.setWidthPercentage(100);//设置表格宽度为%100
table.getDefaultCell().setBorder(0);//设置表格默认为无边框
com.itextpdf.text.pdf.PdfPCell cell = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph("", subBoldFontChinese));
org.dom4j.Element rootElement = parseText.getRootElement();
List<Element> elements = rootElement.elements();
for (Element elementn : elements) {
List<Element> elementw= elementn.elements();
for(Element element :elementw){
String attributeValue = element.attributeValue("chartType");
//判断该标签内的内容是否为报表需要的内容
if(null!=attributeValue){
//如果是chart,标示这是一个图片
if("chart".equals(attributeValue)){
String attributeValue2 = element.attributeValue("src");
attributeValue2=attributeValue2.replace("@", "\\\\");
float[] widthes = { 50f };// 设置表格的列宽和列数
com.itextpdf.text.pdf.PdfPTable hiddenTable = new com.itextpdf.text.pdf.PdfPTable(widthes);// 建立一个pdf表格
hiddenTable.setSpacingBefore(11f); //设置表格上空间
hiddenTable.setTotalWidth(500);// 设置表格的宽度
hiddenTable.setWidthPercentage(100);//设置表格宽度为%100
hiddenTable.getDefaultCell().disableBorderSide(1);
hiddenTable.getDefaultCell().disableBorderSide(2);
hiddenTable.getDefaultCell().disableBorderSide(4);
hiddenTable.getDefaultCell().disableBorderSide(8);
com.itextpdf.text.Image upgif = com.itextpdf.text.Image.getInstance(attributeValue2);
upgif.scalePercent(120);//设置缩放的百分比%7.5
upgif.setAlignment(com.itextpdf.text.Element.ALIGN_RIGHT);
cell = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph("", subBoldFontChinese));//描述
cell.setHorizontalAlignment(com.itextpdf.text.Element.ALIGN_RIGHT);// 设置内容水平居中显示
cell.addElement(upgif);
cell.setPaddingTop(0f); //设置内容靠上位置
cell.setPaddingBottom(0f);
cell.setPaddingRight(20f);
cell.setBorder(Rectangle.NO_BORDER);//设置单元格无边框
hiddenTable.addCell(cell);
document.add(hiddenTable);
//如果是chartTable ,标示这是一个表格
}else if("chartTable".equals(attributeValue)){
List<Element> elements3 = element.elements();
if(elements3.size()>0){
float[] width = { 50f,50f};
com.itextpdf.text.pdf.PdfPTable table_chart = new com.itextpdf.text.pdf.PdfPTable(width);
table_chart.getDefaultCell().setBorder(1);//设置表格默认为无边框
for (Element element3 : elements3) {
List<Element> elements4 = element3.elements();
for (int i = 0;i<elements4.size();i++) {
Element object =elements4.get(i);
String text = object.getText();
com.itextpdf.text.pdf.PdfPCell cell_chart = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph(text , FontChinese));//描述
cell_chart.setFixedHeight(20);
cell_chart.setHorizontalAlignment(com.itextpdf.text.Element.ALIGN_CENTER);// 设置内容水平居中显示
cell_chart.setVerticalAlignment(com.itextpdf.text.Element.ALIGN_MIDDLE); // 设置垂直居中
table_chart.addCell(cell_chart);
}
}
document.add(table_chart);
}
//如果是dsc,标示这是针对该报表的文字描述
}else if("dsc".equals(attributeValue)){
List<Element> elements3 = element.elements();
if(elements3.size()>0){
float[] width_dsc = {50f};
for (Element element3 : elements3) {
List<Element> elements4 = element3.elements();
StringBuffer buffer=new StringBuffer();
for (Element object : elements4) {
buffer.append(object.getText());
}
String string = buffer.toString();
Pattern p = Pattern.compile(":");
Matcher matcher = p.matcher(string);
String replaceFirst = matcher.replaceFirst("");
if(replaceFirst.length()==0){continue; }
com.itextpdf.text.Paragraph title_dsc=new com.itextpdf.text.Paragraph(replaceFirst,subFontChinese);
title_dsc.setAlignment(com.itextpdf.text.Element.ALIGN_LEFT);
title_dsc.setSpacingBefore(10f);
document.add(title_dsc);
}
}
}
}else{
List<Element> elements2 = element.elements();
for (Element element2 : elements2) {
String elemen = element2.attributeValue("chartType");
if(null!=elemen){
if("chartTable".equals(elemen)){
List<Element> elements3 = element2.elements();
if(elements3.size()>0){
float[] width = { 50f,50f};
com.itextpdf.text.pdf.PdfPTable table_chart = new com.itextpdf.text.pdf.PdfPTable(width);
table_chart.getDefaultCell().setBorder(1);//设置表格默认为无边框
for (Element element3 : elements3) {
List<Element> elements4 = element3.elements();
for (int i = 0;i<elements4.size();i++) {
Element object =elements4.get(i);
String text = object.getText();
com.itextpdf.text.pdf.PdfPCell cell_chart = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph(text , FontChinese));//描述
cell_chart.setFixedHeight(20);
cell_chart.setHorizontalAlignment(com.itextpdf.text.Element.ALIGN_CENTER);// 设置内容水平居中显示
cell_chart.setVerticalAlignment(com.itextpdf.text.Element.ALIGN_MIDDLE); // 设置垂直居中
table_chart.addCell(cell_chart);
}
}
document.add(table_chart);
}
}else if("chart".equals(elemen)){
String attributeValue2 = element2.attributeValue("src");
attributeValue2=attributeValue2.replace("@", "\\\\");
float[] widthes = { 50f };// 设置表格的列宽和列数
com.itextpdf.text.pdf.PdfPTable hiddenTable = new com.itextpdf.text.pdf.PdfPTable(widthes);// 建立一个pdf表格
hiddenTable.setSpacingBefore(11f); //设置表格上空间
hiddenTable.setTotalWidth(500);// 设置表格的宽度
hiddenTable.setWidthPercentage(100);//设置表格宽度为%100
hiddenTable.getDefaultCell().disableBorderSide(1);
hiddenTable.getDefaultCell().disableBorderSide(2);
hiddenTable.getDefaultCell().disableBorderSide(4);
hiddenTable.getDefaultCell().disableBorderSide(8);
com.itextpdf.text.Image upgif = com.itextpdf.text.Image.getInstance(attributeValue2);
upgif.scalePercent(120f);//设置缩放的百分比%7.5
upgif.setAlignment(com.itextpdf.text.Element.ALIGN_RIGHT);
cell = new com.itextpdf.text.pdf.PdfPCell(new com.itextpdf.text.Paragraph("", subBoldFontChinese));//描述
cell.setHorizontalAlignment(com.itextpdf.text.Element.ALIGN_RIGHT);// 设置内容水平居中显示
cell.addElement(upgif);
cell.setPaddingTop(0f); //设置内容靠上位置
cell.setPaddingBottom(0f);
cell.setPaddingRight(20f);
cell.setBorder(Rectangle.NO_BORDER);//设置单元格无边框
hiddenTable.addCell(cell);
document.add(hiddenTable);
}else if ("dsc".equals(elemen)) {
List<Element> elements3 = element2.elements();
if(elements3.size()>0){
for (Element element3 : elements3) {
List<Element> elements4 = element3.elements();
StringBuffer buffer=new StringBuffer();
for (Element object : elements4) {
buffer.append(object.getText());
}
String string = buffer.toString();
Pattern p = Pattern.compile(":");
Matcher matcher = p.matcher(string);
String replaceFirst = matcher.replaceFirst("");
if(replaceFirst.length()==0){continue; }
com.itextpdf.text.Paragraph title_dsc=new com.itextpdf.text.Paragraph(replaceFirst,subFontChinese);
title_dsc.setAlignment(com.itextpdf.text.Element.ALIGN_LEFT);
title_dsc.setSpacingBefore(10f);
document.add(title_dsc);
}
}
}
}
}
}
}
}
最后,关闭该document对象
if(null!=document){
document.close();
}