Java导出Word问题

发布于 2021-12-02 11:31:46 字数 249 浏览 780 评论 10

最近在做导出 word 功能,我采用的方法是:

使用 freemarker 生成含有数据的完整的 html文件,使用POI保存为doc文件,生成的doc文件可以正常打开,但是发现:

1. 生成的doc文件不分页,是一个整体

2. 更头疼的是:在本地对生成的doc文件进行编辑,保存后会跟随多生成一个 xx.files 目录,里面放置一些文件;

不知道大家有没有做过导出 word 功能的,我要导出的word带有表格等信息

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

倚栏听风 2021-12-08 17:17:46
//使用的是Apache POI
public static String readWord(InputStream ins)throws Exception
    {
    	StringBuffer sRet=new StringBuffer();
    	byte[] bContent = null;
        ByteArrayOutputStream outs = null;
        byte[] head = new byte[8];
        byte[] bHead = new byte[] {-48, -49, 17, -32, -95, -79, 26, -31};
        boolean bFlag = false;
        ByteArrayInputStream bis=null;
        try {
        	if(ins==null)
        	{
        		throw new Exception("文件流不存在!");
        	}
			outs = new ByteArrayOutputStream();
			bContent = new byte[2048];
			int j = -1;
			while ((j = ins.read(bContent)) != -1)
			{
			    outs.write(bContent, 0, j);
			}
			outs.flush();
			bContent = outs.toByteArray();
			outs.close();
			
			for (int i = 0; i < head.length; i++)
            {
                if (bContent[i] != bHead[i])
                {
                    bFlag = true;
                    break;
                }
            }
			bis=new ByteArrayInputStream(bContent);

            if (bFlag)//word 2007
            {
            	XWPFParagraph xph=null;
            	XWPFDocument document = new XWPFDocument(bis);
                /** 操作Word段落begin */
                Iterator<XWPFParagraph> it = document.getParagraphsIterator();
                while (it.hasNext())
                {
                    xph = it.next();
                    sRet.append(xph.getParagraphText()+"n");
                }
            }
            else//word2003
            {
            	HWPFDocument document = new HWPFDocument(bis);
            	Range bodyRange = document.getRange();
            	Paragraph ph=null;
            	// 段落
                for (int h = 0; h < bodyRange.numParagraphs(); h++)
                {
                    ph = bodyRange.getParagraph(h);
                    sRet.append(ph.text());
                }
            }
            
		} catch (Exception e) {
			throw e;
		}finally
		{
			outs.close();
		}
    	return sRet.toString();
    }

温柔少女心 2021-12-08 17:17:34

一群广告,java导出word直接调用windows的com组件提供的服务就好,poi还不如openoffice,opencoffice不如微软的自己的com组件。不过这个方案需要一台windows服务器。

狼亦尘 2021-12-08 17:17:12

Java导出Word最好还是选用专业产品,不管是POI还是JXL都不是调用的Office原生接口生成的文件格式多半会有问题,我自己就试过,模板稍微调整生成的文件内容就错乱了,搞的头都大了,后来买了一个第三方的产品PageOffice,集成简单,功能也不弱,推荐参考一下www.zhuozhengsoft.com,下载中心有免费试用的开发包。

甜柠檬 2021-12-08 17:17:02

用jxl吧,简单易用,我天天做报表,jxl、poi、jacob都用过,不过还是jxl用着最方便最省事,一般的需求完全可以满足了

已下线请稍等 2021-12-08 17:09:49

引用来自#6楼“袁柯”的帖子

我用的是 jxl操作 word,很方便的, 档主可以试一试

绝情姑娘 2021-12-08 16:57:55

我用的是 jxl操作 word,很方便的, 档主可以试一试

明月松间行 2021-12-08 16:38:04

简单易用难免花银子啊 不想花钱就得多动脑了 我也是过来学习的

断爱 2021-12-08 16:19:15

LS的知道为什么吗?

当时做excel和word表格到入数据库,我用POI死的心都有了,POI的word是做的最好的,但是现在作者好像被微软收编了,已不再更新,而aspose用的就很方便。

饿,我绝对不是在推销aspose

悲喜皆因你 2021-12-08 02:50:36

LS的,这个显然不是LZ想要的解决之道~哈哈哈~

不过确实没有用POI操作过word,一直都是操作excel,等着看看有没有用过的通知给指点指点,俺也跟着学学~

凯凯我们等你回来 2021-12-08 00:52:10

饿 本来这里不该说,不过你可以尝试用一下aspose.word.for.java,不开源,不免费,单认证价格$8000

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文