java itext生成rtf文档

      要用itext来生成rtf文档,首先需下载三个包,分别是:iText-2.1.7.jar、iText-rtf-2.1.7.jar以及iTextAsian.jar,这几个包已上传,可从“itext应用包”下载。

      网上有很多这方面的应用讲解,我也下载了一些说明,可以借鉴。

      具体应用如下:

 

     iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。

 

     iText中用文本块(Chunk)、短语(Phrase)和段落(paragraph)处理文本。

 

     文本块(Chunk)是处理文本的最小单位。

     

     短语(Phrase)由一个或多个文本块(Chunk)组成,可以通过短语(Phrase)成员函数add将一个文本块(Chunk)加到短语(Phrase)中,如:phrase6.add(chunk)。

 

     段落(paragraph)由一个或多个文本块(Chunk)或短语(Phrase)组成,相当于WORD文档中的段落概念,同样可以设定段落的字体大小、颜色等属性。

 

     

 

/**
*生成rtf文档,如果成功则反回true,然后保存到数据库,否则将不会向数据库插入
*@param1 单选题
*@param1 多选题
*@realPath文件保存路径
*@f_questionTitle 标题
*@f_today 当前时间
*@fileIndex 文件生成次数
*@return boolean
*/
public boolean createRTFContext(ArrayList list1,ArrayList list2,String realPath,String f_questionTitle,String today,String fileIndex) throws DocumentException, IOException {   
  		
  		try {       
           //调用createFolder方法创建文件夹
			String currentFolder = createFolder(realPath,today);
			
			//String fileIndex = today+"第"+fileCount+"次";
			
          //真正需保存到数据库的文件路径
			String strFileName = realPath+currentFolder+"/"+fileIndex+f_questionTitle+".rtf";
			
			
			Document document = new Document(PageSize.A4);   
			RtfWriter2.getInstance(document, new FileOutputStream(strFileName));   
			document.open();  
			
			/*if(strFileName==null) strFileName="";

               //获得列表需显示的文件名
			String fileName = strFileName.substring(strFileName.lastIndexOf("/")+1,strFileName.length()-4);*/
			   
			// 设置中文字体   
			BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);   
			// 标题字体风格   
			Font titleFont = new Font(bfChinese, 16, Font.BOLD);   
			// 小标题字体风格   
			Font subTitleFont = new Font(bfChinese, 14, Font.BOLD);   
			// 正文字体风格   
			Font contextFont = new Font(bfChinese, 12, Font.NORMAL);   
			// 页眉页脚字体风格   
			Font headerFooterFont = new Font(bfChinese, 10, Font.BOLD);   
			    
			// footer页角显示页数   
			Table footer = new Table(1);   
			footer.setBorder(0);   
			footer.setWidth(100);         
   
			Paragraph pageNumber = new Paragraph("第 ");   
			pageNumber.add(new RtfPageNumber());   
			pageNumber.add(new Chunk(" 页"));   
			pageNumber.setAlignment(Paragraph.ALIGN_RIGHT);   
			pageNumber.setFont(headerFooterFont);   
			Cell cell02 = new Cell(pageNumber);    
			cell02.setBorder(0);   
			footer.addCell(cell02);   
			               
			document.setFooter(new RtfHeaderFooter(footer));   
			// 设置rtf标题  
			Paragraph title = new Paragraph(fileIndex+f_questionTitle);   
			title.setAlignment(Element.ALIGN_CENTER);   
			title.setFont(titleFont); 
			document.add(title);   
			
			Paragraph subSigleTitle = new Paragraph("一、单选题");   
			subSigleTitle.setFont(subTitleFont);   
			subSigleTitle.setSpacingBefore(10);  // 本段与上一段之间的空行   
			subSigleTitle.setFirstLineIndent(0); // 本段行首缩进
			document.add(subSigleTitle);  
			// 试题内容  
			S_test_question s = new S_test_question ();
			    for (int i = 0; i < list1.size(); i++) {   //单选题
			    	
			    	s = (S_test_question) list1.get(i); 
			        String contextString = (i+1)+"、"+s.getf_questions();   
			        String rest = contextString.replaceAll("\r"," ");
			        contextString = rest;
			        Paragraph context = new Paragraph(contextString);   
			        context.setAlignment(Element.ALIGN_LEFT);   
			        context.setFont(contextFont);  
			        context.setSpacingBefore(10);   // 本段与上一段之间的空行  
			        context.setFirstLineIndent(0);  // 本段行首缩进  
			        document.add(context);  
			    }  
			    
			    Paragraph subMultiTitle = new Paragraph("二、多选题");   
			    subMultiTitle.setFont(subTitleFont);   
			    subMultiTitle.setSpacingBefore(10);  // 本段与上一段之间的空行   
			    subMultiTitle.setFirstLineIndent(0); // 本段行首缩进   
			    document.add(subMultiTitle);  
			    
			    
			    for (int i = 0; i < list2.size(); i++) { //多选题
			    	int index = list1.size()+1;
			    	s = (S_test_question) list2.get(i); 
			        String contextString = (index+i)+"、"+s.getf_questions();   
			        String rest = contextString.replaceAll("\r"," ");
			        contextString = rest;
			        Paragraph context = new Paragraph(contextString);   
			        context.setAlignment(Element.ALIGN_LEFT);   
			        context.setFont(contextFont);  
			        context.setSpacingBefore(10);   // 本段与上一段之间的空行  
			        context.setFirstLineIndent(0);  // 本段行首缩进  
			        document.add(context);  
			    }  
			    
			    document.newPage();   //分页,下一页
			    //在表格末尾添加答案  
			    //String fileCount = fileName.substring(fileName.length()-3,fileName.length()-1);
			    Paragraph subAnswerTitle = new Paragraph(fileIndex+"试题答案");   
			    subAnswerTitle.setFont(subTitleFont);   
			  //subAnswerTitle.setSpacingBefore(100);  // 本段与上一段之间的空行   
			    subAnswerTitle.setFirstLineIndent(0); // 本段行首缩进   
			    document.add(subAnswerTitle);  
			    
			    for (int i = 0; i < list1.size(); i++) { //单选题答案
			    	
			    s = (S_test_question) list1.get(i); 
			    String answerString =(i+1)+"、"+s.getf_answer()+"   ";
			   //Paragraph anwser = new Paragraph(answerString);
			   //anwser.setAlignment(Element.ALIGN_LEFT); 
			   //document.add(anwser1); 
			    Chunk chunk = new Chunk(); 
			    chunk.append(answerString);
			    Phrase phAnwser = new Phrase();
			    phAnwser.add(chunk);
			    
			    document.add(phAnwser); 
			    }
			    for (int i = 0; i < list2.size(); i++) { //多选题答案
			    	int index = list1.size()+1;
			        s = (S_test_question) list2.get(i); 
			        String answerString =(index+i)+"、"+s.getf_answer()+"   ";
			        //Paragraph anwser1 = new Paragraph(answerString);
			        //anwser1.setAlignment(Element.ALIGN_LEFT);
			        //document.add(anwser1); 
			        Chunk chunk = new Chunk(answerString); 
			        Phrase phAnwser = new Phrase();
			        phAnwser.add(chunk);
			        document.add(phAnwser); 
			           
			        }
			    document.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return false;
		} catch (BadElementException e) {
			e.printStackTrace();
			return false;
		} catch (DocumentException e) {
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
		return true;   
    } 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值