2012-05-30 71 views
1

我的要求是我应该阅读模板文件并更改其内容中的某些值并将其写回另一个文件。最重要的是它应该具有与模板相同的样式。使用POI创建Word文件

我面对的问题是我能够读写,但它很难转移样式。特别是我很累,试图将段落样式应用于文档。请帮助我.....这是我的代码

public static void main(String[] args) { 
    try { 
      HWPFDocument templateFile = new HWPFDocument(new FileInputStream("D:\\POI\\testPOIin.doc")); 
      HWPFDocument blankFile = new HWPFDocument(new FileInputStream("D:\\POI\\blank.doc")); 

     ParagraphProperties pp = templateFile.getRange().getParagraph(4).cloneProperties(); 
     blankFile.getRange().insertAfter(pp, 0); 
     OutputStream out = new FileOutputStream("D:\\POI\\testPOIout.doc"); 
     blankFile.write(out); 

     } catch (FileNotFoundException fnfe) { 
      // TODO: Add catch code 
      fnfe.printStackTrace(); 
     } catch (Exception ioe) { 
      // TODO: Add catch code 
      ioe.printStackTrace(); 
     } 
    } 
} 

请让我知道我做错了.....

+0

你是故意使用旧的二进制文档格式,而不是更新的docx格式? – JasonPlutext

+0

为什么不复制整个文件,打开副本,进行更改并保存?应该比试图复制部分文件和样式简单得多... – Gagravarr

+0

感谢您的回复家伙......但是我需要在文档中完成它是我的主要要求.....并且我尝试采取整个文件的副本更改放置我需要,并写在一个新的文件中....但我仍然发现我的路线错位....这是我首先我想实现一个段落适当的对齐方式。 – Oceanvijai

回答

0

我也有过类似的任务和调查后,我创建了解决方案,但它仅适用于docx文件:

public static void main(String[] args) throws Exception { 
    FileOutputStream fos = new FileOutputStream(new File("transformed.docx")); 
    XWPFDocument doc = new XWPFDocument(new FileInputStream(new File("original.docx"))); 
    for(XWPFParagraph p:doc.getParagraphs()){ 
     for(XWPFRun r:p.getRuns()){ 
      for(CTText ct:r.getCTR().getTList()){ 
       String str = ct.getStringValue(); 
       if(str.contains("NAME")){ 
        str = str.replace("NAME", "Java Dev"); 
        ct.setStringValue(str); 
       } 
      } 
     } 
    } 
    doc.write(fos); 
} 

它对低级元素进行操作,因此可以保存样式和其他道具。希望它能帮助别人。