POIテンプレートによるwordのエクスポート


最近、会社が私に下してくれた任務はますます面白くなってきた.この2,3日するのはjqueryのスタイルの問題で、tabのスタイルに変更します.これは難しくないですが、一番面倒なのは業務です.ほほほ、もちろんこれは今日のブログのポイントではありません.
先日完成したばかりの任務はPOIを使ってテンプレートからwordをエクスポートし、1日半かけて完成した.最初はきっと技术の仕事だと思って、そこでとてもhappyのインターネットを利用して资料を探して、1周また1周探して、ずっとどういうことが分からないで、最后に1つのウェブサイトを见てやっと分かって、もとはこのようなことです:(先に私の参考のウェブサイトを贴ってきます)
http://topic.csdn.net/u/20110415/17/6cfbe1a1-ccdf-420e-b868-38b9a4ca13e0.html(最後の文では、テンプレートをxmlファイルとして保存し、xmlを書き換えます)
テンプレートをxmlファイルとして保存し、xmlを書き換えるという言葉が私の問題解決のポイントであり、もちろんこれからも技術的な問題ではなく、力が働くことを確定しました.ほほほ.
具体的なプロセスは次のとおりです.
1、wordテンプレートファイルを定義する:
あなたのテンプレートwordを開いて、xml形式として保存して、必要に応じて、対応するラベルにidなどのattributeを追加して、後での操作を便利にします.次にディレクトリの下に配置します(後の呼び出しの準備)
2、xmlファイルの読み書きを準備する環境、poi環境
私はdom 4 jを使っているので、dom 4 jのjarパッケージをプロジェクトにコピーすればいいです.poi関連jarパッケージをプロジェクトにコピー
3、xmlファイルの読み書き
コードは次のとおりです.
HttpServletResponse response = ServletActionContext.getResponse();
		HttpServletRequest request = ServletActionContext.getRequest();


		String destFilePath = request.getSession().getServletContext()
								.getRealPath("\\");
		
// dom4j  xml  (    )
		SAXReader reader = new SAXReader();
		//      : conf\\testReportTemplate.xml
	    Document  document = reader.read(new File(destFilePath+"WEB-INF\\testReportTemplate.xml"));
	    Element root = document.getRootElement();
	    
	    //        (         xml       w:body,w:sect      ,          w:,               w:,             p、r、t,    w:p w:r w:t。

	    Element wbody = root.element("body"); 
	    Element wsect = wbody.element("sect");
	    
	    //    section   ,          ,              
	    List<Element> sections = wsect.elements("sub-section");
	//  section,  section   ID ,       ,       
	  for (Element eleSection : sections) {
		    	String eleSectionId = eleSection.attributeValue("id");
		if ("testMethodSection".equalsIgnoreCase(eleSectionId)) {
					if (testingWorkInfoVO.getTestingMethod() != null) {
						eleSection.addElement("w:p")
							.addElement("w:r")
							.addElement("w:t")
							.setText(testingWorkInfoVO.getTestingMethod());//          
					}
					continue;
				}
		if ("testContentSection".equalsIgnoreCase(eleSectionId)) {
					if (testingWorkInfoVO.getTestingContent() != null) {
						eleSection.addElement("w:p")
						.addElement("w:r")
						.addElement("w:t")
						.setText(testingWorkInfoVO.getTestingContent());//          
					}
					continue;
				}
	}
4、poiをwordにエクスポート
ByteArrayInputStream bais = new ByteArrayInputStream(document.asXML().getBytes("utf-8"));
		POIFSFileSystem fs = new POIFSFileSystem();
		DirectoryEntry directory = fs.getRoot();
		DocumentEntry de = directory.createDocument("WordDocument", bais);

		//     
		OutputStream fos = response.getOutputStream();

		//        
		String outputFileName = null; //     
		
				
		String destFile = destFilePath + "word_template\\"; //      ;
		outputFileName = "    " + ".doc";

		destFile = destFilePath + outputFileName; //       
		
		response.setContentType("application/octet-stream");
		response.setHeader("name", destFile);
		response.setHeader("Content-disposition", "attachment; filename=\""
				+ URLEncoder.encode(outputFileName, "UTF-8") + "\""); //

		fos.flush();
		fs.writeFilesystem(fos);
		bais.close();
		fos.flush();
		fos.close();
、基本的には終わりです.ほほほ.質問があったらいつでもメッセージをください.すぐに返事します.
6、添付:xml形式のwordテンプレートのxmlコードを少し貼り付けます(私の上の例と一致しません):
<w:document mc:Ignorable="w14 wp14" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">

<w:body><w:p w:rsidR="007B7334" w:rsidRDefault="00FB1288" w:rsidP="00FB1288"><w:pPr><w:pStyle w:val="2"/><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr><w:t> 、</w:t></w:r><w:bookmarkStart w:id="0" w:name="_GoBack"/><w:bookmarkEnd w:id="0"/><w:r><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr><w:t>     </w:t></w:r></w:p><w:p w:rsidR="00FB1288" w:rsidRDefault="00FB1288" w:rsidP="00FB1288"><w:pPr><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr></w:pPr></w:p><w:p w:rsidR="00FB1288" w:rsidRDefault="00FB1288" w:rsidP="00FB1288"><w:pPr><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr></w:pPr></w:p><w:p w:rsidR="00FB1288" w:rsidRDefault="00FB1288" w:rsidP="00FB1288"><w:pPr><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr></w:pPr></w:p><w:p w:rsidR="00FB1288" w:rsidRDefault="00FB1288" w:rsidP="00FB1288"><w:pPr><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr></w:pPr></w:p><w:p w:rsidR="00FB1288" w:rsidRDefault="00FB1288" w:rsidP="00FB1288"><w:pPr><w:pStyle w:val="2"/></w:pPr><w:r><w:rPr><w:rFonts w:hint="eastAsia"/></w:rPr><w:t> 、     </w:t></w:r></w:p><w:sectPr w:rsidR="00FB1288"><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0"/><w:cols w:space="425"/><w:docGrid w:type="lines" w:linePitch="312"/></w:sectPr></w:body>
</w:document>