要用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;
}