【オリジナル】dom 4 jでwordテンプレートの内容を読み込み、修正してword文書を作成する


最近はプロジェクトをしていますが、お客様から提供されたワードドキュメントを動的にダウンロードサービスを提供する必要があります.インターネットでN以上の資料を探しましたが、word文書に対しては完璧ではないことがたくさん分かりました.例えば、JACOBとJAVA 2 WORDは、この二つはwindowsプラットフォームでしか使えません.プラットフォームを跨ぐシステムにとっては、虚構に等しいです.あとはapacheのpoiコンポーネントです.poiはexcleの操作にはいいですが、wordの操作はまだ開発段階にあります.普通の機能が多く、wordの操作にはほとんど使い道がありません.残念ながら、多くの資料を調べてみましたが、ワードをmht形式またはxml形式の文書に変換することができます.最初はmhtを修正したいのですが、効果があまりよくないことが分かりました.フォーマットの問題は制御しにくいです.tfも同じです.特に中国語の問題です.その後、仕方がなくて、試した心理を持ってxml文書を使ってみたら、効果もあまりよくないと分かりました.複雑です.でも、上記の方法に対しては一番いいと思います.プロジェクトの需要に迫られて、仕方がないです.今はこの方法を使うしかないです.
この方法はdom 4 jを使ってxmlファイルを説明します.効果もいいし、簡単です.深く入ったらまた書きましょう.テストの時に書いた種類を先に貼ります.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


public class UpdateReport {
	
	public static void main(String[] args) {
		UpdateReport up = new UpdateReport();
		// word     xml  ,    xml    
		up.UpdateXmlFile("d:\\1.xml", "d:\\2.xml");
	}

	/**
	 *   xml  ,      
	 * @param filename     
	 * @param newfilename	      
	 * @return
	 */
	public void UpdateXmlFile(String filename,String newfilename){
		//  dom4j  xml  
	       try{
	           SAXReader saxReader = new SAXReader(); 
	           Document document = saxReader.read(new FileInputStream(new File(filename)));
	           
	           //    
	           List list = document.selectNodes("//w:t" ); 
	           Iterator iter = list.iterator();
	           while(iter.hasNext()){
	        	   Element element = (Element)iter.next();
	        	   String str = element.getText();
	        	   //             ,         $xxx$  
	        	   if(str != null && "$rid$".equals(str.trim())) {
	        		   System.out.println(element.getText());
	        		   element.setText("LCZC10010");
	        	   }
	           }
	           
	           
	           //          
, , // List list1 = document.selectNodes("//w:binData" ); Iterator iter1 = list1.iterator(); while(iter1.hasNext()){ Element element = (Element)iter1.next(); String str = element.getText(); str = str.replaceAll("
", ""); element.setText(str); } // dom4j document try{ XMLWriter writer = null; /** */ //OutputFormat format = OutputFormat.createPrettyPrint(); //OutputFormat format = OutputFormat.createCompactFormat(); //OutputFormat format = new OutputFormat(); // , OutputFormat format = new OutputFormat(""); // , format.setLineSeparator(""); /** XML , UTF-8, , */ format.setEncoding("UTF-8"); writer= new XMLWriter(new FileOutputStream(new File(newfilename)),format); writer.write(document); writer.flush(); writer.close(); }catch(Exception ex){ ex.printStackTrace(); } // , // Writer writer = new OutputStreamWriter(new FileOutputStream(newfilename)); // document.write(writer); // writer.flush(); // writer.close(); }catch(Exception ex){ ex.printStackTrace(); } } }