자바 조작 워드 모드
xml 방식 으로 워드 의 장단 점 내 보 내기:
장점:
1.코드 양 이 적 고 스타일,내용 이 쉽게 제어 되 며 인쇄 가 변형 되 지 않 으 며 office 기준 에 부합 합 니 다.
2.Linux 플랫폼 을 지원 하고 office 설 치 를 요구 하지 않 습 니 다.
3.고정 형식 문서 출력 을 실현 할 수 있 습 니 다.
4.그림 추가 지원;
단점:
1.워드 템 플 릿 을 미리 설계 하고 교체 할 곳 을 특수 태그 로 표시 해 야 합 니 다.
2.워드 에 그림 을 추가 하려 면 템 플 릿 을 디자인 할 때 그림 을 추가 하여 자 리 를 차지 한 다음 에 xml 템 플 릿 문 서 를 수 동 으로 편집 해 야 합 니 다.
1.XmlWord 클래스 사용(org.w3c.dom 로 XML 조작)
XmlWord 클래스 소스 코드:XmlWord.txt
예제 코드 에 사용 할 템 플 릿:2.xml
【주】:템 플 릿 을 만 드 는 office 는 2003 및 이상 버 전이 필요 합 니 다.
사용 절차:
1.워드 템 플 릿 내 보 내기;
2.XmlWord 대상 만 들 기;
3.템 플 릿 표시 가 여러 개 있 으 면 list 에 저장 합 니 다.메모리 교체 값;
4.워드 문서 생 성;
[예제 코드]:
XmlWordtest=newXmlWord();
//1,템 플 릿 불 러 오기
Documentdoc=test.LoadXml("2.xml");
/2.표 시 를 설정 합 니 다.tagList 에 저 장 된 표 시 는 템 플 릿 에 있 는 태그 와 일치 해 야 합 니 다.
ListtagList=newArrayList();
tagList.add("${test_name}");
tagList.add("${test_no}");
//3、표 시 를 채 우 는 값 을 설정 합 니 다.dataList 에 저 장 된 데이터 순 서 는 tagList 에 저 장 된 태그 순서 와 일치 합 니 다.
ListdataList=newArrayList();
dataList.add("----용례 명");
dataList.add("----용례 번호");
/4、태그 와 태그 값 을 dataMap 에 저장 합 니 다.
test.setData(tagList,dataList);
//5,교체 값
/*그림 추가*/
test.replacePic(doc.getDocumentElement(),"${img}","8.jpg",imgStr);
test.replaceTagContext(doc.getDocumentElement());
//6,문서 쓰기
test.doc2DocFile(doc,"xmlword.doc");
2.특별 설명
1.워드 템 플 릿 제작:
office 2003 및 이상 버 전 을 사용 하여 내 보 낼 워드 템 플 릿 을 작성 한 다음 문서 의 스타일 을 편집 하고 동적 으로 채 워 야 할 내용 을 특수 태그 로 대체 합 니 다.예 를 들 어 인 스 턴 스 코드 의 태그(${testname})마지막 으로 편집 한 워드 문 서 를'워드 2003 XML 문서(*.xml)'형식 으로 저장 하고 템 플 릿 을 프로젝트 에 배치 합 니 다.
2.그림 추가:
워드 에 그림 을 추가 하려 면 첫 번 째 템 플 릿 을 만 들 때 그림 이 자 리 를 차지 하 는 것 을 추가 한 다음 xml 문 서 를 열 면 아래 의 base 64 인 코딩 코드 를 볼 수 있 습 니 다.
iVBO……CC
base 64 코드 를 예 를 들 어${p 로 바 꾸 면w_picpath},다음 과 같 습 니 다:
${p_w_picpath}
여기 주의">${pw_picpath}
3.XmlWord 클래스 설명
Properties:
변량
설명 하 다.
MapdataMap
템 플 릿 에 여러 개의 태그 가 있 을 때 태그 값 과 데 이 터 를 저장 합 니 다.
Methods:
방법.
매개 변수
반환 값
LoadXml(Stringfilename):xml 문 서 를 불 러 옵 니 다.
filename:템 플 릿 경로
문서 대상 을 성공 적 으로 되 돌려 줍 니 다.실패 반환 null
getImageStr(StringimgFile):String 그림 변환
ImgFile:그림 전체 경로 이름
그림 base 64 문자열 되 돌리 기
doc2docFile(Documentdocfile,Stringfilename):boolean 은 Document 대상 을 Doc 파일 로 저장 합 니 다.
filename:저 장 된 파일 이름 document:저장 해 야 할 Document 대상
true:저장 성공 false:저장 실패
replaceTagContext(Elementelement,Stringtag,Stringdata):Element 교체 표지 내용:단일 태그(텍스트 교체 에 만 사용)
element:내용 을 채 울 노드 tag:템 플 릿 에 data:데이터 표시
교 체 된 노드 되 돌리 기
replaceTagContext(Element element):Element 교체 표지 내용:여러 개의 태그,이 방법 을 사용 하기 전에 setData 방법 을 먼저 호출 합 니 다(텍스트 만 바 꾸 는 데 사 용 됩 니 다)
element:내용 을 바 꿀 노드
교 체 된 노드 되 돌리 기
replacePic(Objectelement,Stringtag,StringimgName,StringimgStr):Element 에 그림 을 추가 합 니 다.이 방법 은 한 장의 그림 추가 에 만 적 용 됩 니 다.다 중 그림 추가 시 이 방법 원본 코드 를 참고 할 수 있 습 니 다.
element:내용 을 바 꿀 노드 tag:템 플 릿 에 그림 태그 imgName:그림 이름,워드 에 그림 이 여러 장 있 으 면 그림 이름 은 유일한 imgStr:그림 디 코딩 후의 base 64 문자열 이 어야 합 니 다.
교 체 된 노드 되 돌리 기
이 종 류 는 현재 텍스트,그림 의 차례 교체 만 지원 할 수 있 으 며 텍스트 와 그림 의 동시 교 체 는 실현 되 지 않 습 니 다.
템 플 릿:
내 보 내기 후 효과:
XmlWord 클래스 코드:
packagecom.hxh.test;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.Date;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.transform.Transformer;importjavax.xml.transform.TransformerFactory;importjavax.xml.transform.dom.DOMSource;importjavax.xml.transform.stream.StreamResult;importorg.w3c.dom.Document;importorg.w3c.dom.Element;importorg.w3c.dom.NodeList;importsun.misc.BASE64Encoder;publicclassXmlWord{private Map dataMap = new HashMap();public MapgetDataMap(){returndataMap;}publicvoid setDataMap(MapdataMap){this.dataMap =dataMap;}/*** *@paramtagList *@paramdataList *@paramdataMap*/publicvoid setData(List tagList,ListdataList){Iterator it1 =tagList.iterator();Iterator it2 =dataList.iterator();while(it1.hasNext()){this.dataMap.put(it1.next(),it2.next());}}/*** xml *@paramfilename *@return Document , null*/publicDocumentLoadXml(Stringfilename){Documentdoc= null;try{DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=factory.newDocumentBuilder();doc= (Document) builder.parse(newFile(filename));}catch(Exceptione){System.out.println(" xml ");e.printStackTrace();}returndoc;}/*** *@return base64 *@throwsException*/publicStringgetImageStr(StringimgFile){InputStreamin= null;BASE64Encoderencoder= null;byte[] data = null;try{in= newFileInputStream(imgFile);}catch(FileNotFoundExceptione){System.out.println(" !");e.printStackTrace();}try{data= newbyte[in.available()];in.read(data);in.close();}catch(IOExceptione){e.printStackTrace();}encoder= newBASE64Encoder();returnencoder.encode(data);}/***doc2XmlFile* Document xml *@returntrue: flase: *@paramfilename *@paramdocument document */publicbooleandoc2XmlFile(Documentdocument,Stringfilename){boolean flag = true;try{TransformerFactorytransFactory=TransformerFactory.newInstance();Transformertransformer=transFactory.newTransformer();DOMSourcesource=newDOMSource();source.setNode(document);StreamResultresult=newStreamResult();FileOutputStreamfileOutputStream= newFileOutputStream(filename);result.setOutputStream(fileOutputStream);transformer.transform(source,result);fileOutputStream.close();}catch(Exceptionex){flag= false;ex.printStackTrace();}returnflag;}/*** : *@paramelement *@paramtag *@paramdata *@return *@throwsException*/publicElementreplaceTagContext(Objectelement,Stringtag,Stringdata){ElementxElement= null;xElement=(Element)element;NodeListtElements= xElement.getElementsByTagName("w:t");//w:t for(int i=0; i){ElementtElement=(Element)tElements.item(i);if(tElement.getTextContent().equals(tag)){tElement.setTextContent(data);}}returnxElement;}/*** : *@paramelement *@return *@throwsException*/publicElementreplaceTagContext(Elementelement){ElementxElement=element;NodeListtElements= xElement.getElementsByTagName("w:t");//w:t
Set dataSet = this.dataMap.keySet();Iterator it =dataSet.iterator();while(it.hasNext()){Stringtag=it.next();Stringdata=dataMap.get(tag);for(int i=0; i){ElementtElement=(Element)tElements.item(i);if(tElement.getTextContent().equals(tag)){tElement.setTextContent(data);}}}returnxElement;}/*** *@paramelement *@paramtag *@paramimgName , word , *@paramimgStr base64 *@return */publicElementreplacePic(Elementelement,Stringtag,StringimgName,StringimgFile){ElementxElement=element;NodeListtElements= xElement.getElementsByTagName("w:binData");//w:t pkg:binaryData
String wName = "wordml://"+imgName;for(int i=0; i){ElementpicElement=(Element)tElements.item(i);if(picElement.getTextContent().equals(tag)){picElement.setTextContent(this.getImageStr(imgFile));/* */picElement.setAttribute("w:name",wName);//
Element p_w_picpathdataElement = (Element) xElement.getElementsByTagName("v:p_w_picpathdata").item(i);p_w_picpathdataElement.setAttribute("src",wName);}}returnxElement;}/*** *@paramparentElement *@paramimgFile *@paramisnewLine *@return */public Element addPic(Element parentElement,String imgFile,booleanisnewLine){Documentparent=parentElement.getOwnerDocument();Elementp= null;Elementpict= null;ElementbinData= null;Elementshape= null;Elementp_w_picpathdata= null;Stringsrc= "wordml://" + newDate().getTime();if(isnewLine){p= parent.createElement("w:p");}pict= parent.createElement("w:pict");binData= parent.createElement("w:binData");binData.setAttribute("w:name",src);binData.setAttribute("xml:space", "preserve");binData.setTextContent(this.getImageStr(imgFile));shape= parent.createElement("v:shape");p_w_picpathdata= parent.createElement("v:p_w_picpathdata");p_w_picpathdata.setAttribute("src",src);// shape.appendChild(p_w_picpathdata);pict.appendChild(binData);pict.appendChild(shape);if(isnewLine){p.appendChild(pict);parentElement.appendChild(p);}else{parentElement.appendChild(pict);}returnparentElement;}/*** *@paramparentElement *@paramdata *@return*/publicElementaddParagraph(ElementparentElement,Stringdata){Documentparent=parentElement.getOwnerDocument();Elementp= null;Elementr= null;Elementt= null;p= parent.createElement("w:p");r= parent.createElement("w:r");t= parent.createElement("w:t");t.setTextContent(data);// r.appendChild(t);p.appendChild(r);parentElement.appendChild(p);returnparentElement;}}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.