首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

POI 创建07word 后插入图片 遇到的有关问题?

2012-12-15 
POI 创建07word 后插入图片 遇到的问题??本帖最后由 long1867 于 2010-01-11 20:14:03 编辑项目需要生成一

POI 创建07word 后插入图片 遇到的问题??
本帖最后由 long1867 于 2010-01-11 20:14:03 编辑 项目需要生成一个Word格式的统计报表
[实现思路]
1.依据POI.XWPF提供的例子,创建好了生成07Word的Java程序
2.接着用JFreeChart生成报表中的用到的图表(保存为图片)
3.最后再把图表插入到Word中
[问题描述] 
1和2都实现了,今天实现最后一步的时候才发现,POI没有相关的方法来实现插入图片。。。一下子被打回原型。。傻了!
[寻求帮助]
大伙们有遇到过类似问题么?是如果实现的。。。请分享一下你们的经验和想法!万分感谢啊!!!

下面贴上POI自带的一个生成07Word的例子:[/color]
-------------------------------------------
import java.io.FileOutputStream; 

import org.apache.poi.xwpf.usermodel.*; 

/** 
* A simple WOrdprocessingML document created by POI XWPF API 

* @author Yegor Kozlov 
*/ 
public class SimpleDocument { 

    public static void main(String[] args) throws Exception { 
        XWPFDocument doc = new XWPFDocument(); 
        
        XWPFParagraph p1 = doc.createParagraph(); 
        p1.setAlignment(ParagraphAlignment.CENTER); 
        p1.setBorderBottom(Borders.DOUBLE); 
        p1.setBorderTop(Borders.DOUBLE); 

        p1.setBorderRight(Borders.DOUBLE); 
        p1.setBorderLeft(Borders.DOUBLE); 
        p1.setBorderBetween(Borders.SINGLE); 

        p1.setVerticalAlignment(TextAlignment.TOP); 

        XWPFRun r1 = p1.createRun(); 
        r1.setBold(true); 
        r1.setText("The quick brown fox"); 
        r1.setBold(true); 
        r1.setFontFamily("Courier"); 
        r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH); 
        r1.setTextPosition(100); 

        XWPFParagraph p2 = doc.createParagraph(); 
        p2.setAlignment(ParagraphAlignment.RIGHT); 

        //BORDERS 
        p2.setBorderBottom(Borders.DOUBLE); 
        p2.setBorderTop(Borders.DOUBLE); 
        p2.setBorderRight(Borders.DOUBLE); 
        p2.setBorderLeft(Borders.DOUBLE); 
        p2.setBorderBetween(Borders.SINGLE); 

        XWPFRun r2 = p2.createRun(); 
        r2.setText("jumped over the lazy dog"); 
        r2.setStrike(true); 
        r2.setFontSize(20); 

        XWPFRun r3 = p2.createRun(); 
        r3.setText("and went away"); 
        r3.setStrike(true); 


        r3.setFontSize(20); 
        r3.setSubscript(VerticalAlign.SUPERSCRIPT); 

        XWPFParagraph p3 = doc.createParagraph(); 
        p3.setWordWrap(true); 
        p3.setPageBreak(true); 
                
        //p3.setAlignment(ParagraphAlignment.DISTRIBUTE); 
        p3.setAlignment(ParagraphAlignment.BOTH); 
        p3.setSpacingLineRule(LineSpacingRule.EXACT); 

        p3.setIndentationFirstLine(600); 

        XWPFRun r4 = p3.createRun(); 
        r4.setTextPosition(20); 
        r4.setText("To be, or not to be: that is the question: " 
                + "Whether 'tis nobler in the mind to suffer " 
                + "The slings and arrows of outrageous fortune, " 
                + "Or to take arms against a sea of troubles, " 
                + "And by opposing end them? To die: to sleep; "); 
        r4.addBreak(BreakType.PAGE); 
        r4.setText("No more; and by a sleep to say we end " 
                + "The heart-ache and the thousand natural shocks " 
                + "That flesh is heir to, 'tis a consummation " 
                + "Devoutly to be wish'd. To die, to sleep; " 
                + "To sleep: perchance to dream: ay, there's the rub; " 
                + "......."); 
        r4.setItalic(true); 
//This would imply that this break shall be treated as a simple line break, and break the line after that word: 

        XWPFRun r5 = p3.createRun(); 
        r5.setTextPosition(-10); 
        r5.setText("For in that sleep of death what dreams may come"); 
        r5.addCarriageReturn(); 


        r5.setText("When we have shuffled off this mortal coil," 
                + "Must give us pause: there's the respect" 
                + "That makes calamity of so long life;"); 
        r5.addBreak(); 
        r5.setText("For who would bear the whips and scorns of time," 
                + "The oppressor's wrong, the proud man's contumely,"); 
        
        r5.addBreak(BreakClear.ALL); 
        r5.setText("The pangs of despised love, the law's delay," 
                + "The insolence of office and the spurns" + "......."); 

        FileOutputStream out = new FileOutputStream("c:\\simple.docx"); 
        doc.write(out); 
        out.close(); 
    } 
}
[解决办法]
poi主要还是用来处理Excel,处理word的功能很弱,不知道能不能插入图片,一般我处理word都是用jacob
[解决办法]

引用:
poi主要还是用来处理Excel,处理word的功能很弱,不知道能不能插入图片,一般我处理word都是用jacob

本来一开始也是打算用Jacob的,不过还没开始就被经理否决了,觉得受平台限制。。。现在感觉是自己挖了个坑,然后自己跳了进去。。。折腾一天了。。。还没有思路。。。真让人着急啊。。
[解决办法]
看apache官网上说poi应该还不支持word 2007
http://poi.apache.org/hwpf/index.html中这么说
It does not support the new Word 2007 .docx file format, which is not OLE2 based.
意思是他不支持新的word2007文档格式,因为他不是以OLE2为基础的
[解决办法]
引用:
看apache官网上说poi应该还不支持word 2007
http://poi.apache.org/hwpf/index.html中这么说
It does not support the new Word 2007 .docx file format, which is not OLE2 based.
意思是他不支持新的word2007文档格式,因为他不是以OLE2为基础的

word 07 可以啊,我上面的代码就是POI自带的一个例子,只是插入图片这一块让人很抓狂。。。还没有找到解决方法。。。
[解决办法]
楼主 我试过这个例子,没找到怎么生成单元格的方法,请教下楼主
[解决办法]
引用:
引用:
 看apache官网上说poi应该还不支持word 2007
 http://poi.apache.org/hwpf/index.html中这么说
 It does not support the new Word 2007 .docx file format, which is not OLE2 based.
 意思是他不支持新的word2007文档格式,因为他不是以OLE2为基础的

 word 07 可以啊,我上面的代码就是POI自带的一个例子,只是插入图片这一块让人很抓狂。。。还没有找到解决方法。。。


说不支持是指docx格式,估计你还是生成的dox,因为docx才是07专有格式。word向下兼容,你装的07自然能打开普通的doc格式文档了。
------解决方案--------------------


纠正,不是dox是doc
[解决办法]
期待中,为什么没有了,讨论到着结束了,还是有答案了?
[解决办法]
不知道你的这个问题解决没有,现在我也遇到这样一个问题,能把你的代码分享一下吗,非常感谢

热点排行