JAVA生产报表导出成PDF格式(报表中的内容存储在String字符串中,需要解析,业务特殊)

本文详细介绍了如何使用Java和iText库自动生成包含大标题、时间信息、报表类型、查询时间、具体报表内容(包括图片和表格)的PDF文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//生产的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();
			}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值