poi导出word

发布于 2021-12-03 06:42:42 字数 688 浏览 948 评论 3

@Kent_Chen 你好,想跟你请教个问题:poi导出word 时,给表格里的中文设置 字体样式的时候不好使,给英文就可以?怎么可以给中文设置字体样式啊?急!!!!



XWPFRun newRun = para.insertNewRun(i);
//复制样式
newRun.setColor(run.getColor());
System.out.println(runText + "==" + run.getFontFamily() + "===" + run.getFontSize());
newRun.setFontFamily(run.getFontFamily());
if (run.getFontSize() > 0)
{
newRun.setFontSize(run.getFontSize());
}


newRun.setUnderline(run.getUnderline());
newRun.setBold(run.isBold());
newRun.setItalic(run.isItalic());
newRun.setStrike(run.isStrike());

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

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

发布评论

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

评论(3

反话 2021-12-03 23:41:44

poi导出word 毕竟没有office自己的VBA接口来的更自然,尤其是涉及到中文的问题。用PageOffice在客户端导出生成Word吧,反正生成的word文件都是要打开的,不如就真的是在客户端在线打开word的时候调用PageOffice封装的VBA接口生成文件。

清欢 2021-12-03 20:09:45

我说一个思路吧,因为时间比较紧没办法尝试,不过基本上是可行的。

首先,word2007版以后,将后缀名.docx改为.zip之后,你可以在zip中看到word组成是由多个XML和一些资源附件比如图片什么的组成的。

其中documnt.xml是主题。poi和docx4j等都是通过对他的操作来完成文档展示的。所以word的样式是否生效和document.xml中的定义是直接相关的。你可以打开一个看一下就能看到里面的结构。

XWPFRun有一个getCTR方法可以获得document.xml中RUN的XML内容,getCTR下有setRPR来放置内容和样式

以下这行代码可以获取到RUN中嵌套图片的大小:

XWPFRun r1 = p1.createRun();
  List<CTDrawing> drawings = r1.getCTR().getDrawingList();
        for (CTDrawing ctDrawing : drawings) {
            List<CTAnchor> anchors = ctDrawing.getAnchorList();
            for (CTAnchor ctAnchor : anchors) {
                System.out.println(ctAnchor.getExtent().getCx() + ctAnchor.getExtent().getCy());
            }
        }

同样的通过操作CTR可以完成对样式的设置。

我下面这行代码执行是失败的,但大体上这个方向是正确的,我后面会再测试一下,好了我会在这个帖子回复。

r2.getCTR().getRPr().getRFonts().setHAnsi("YouYuan");

青萝楚歌 2021-12-03 10:52:00

不是字体的颜色,是字体的类型,setFontFamily("黑体"),就这个不管用,英文的文本管用,只要是中文的,设置后,打开word后就变成默认的"宋体"了,下面是我程序的关键代码:

newRun.setText(runText);
newRun.setColor(run.getColor());
newRun.setFontFamily(run.getFontFamily());
newRun.setFontSize(run.getFontSize());
newRun.setUnderline(run.getUnderline());
newRun.setBold(run.isBold());
newRun.setItalic(run.isItalic());
newRun.setStrike(run.isStrike())

我看了poi api 上说setFontFamily 只对字符集(0-127)起效用,我不知道问题究竟出在哪里,你能不能在你那试试,帮我看看这个问题呢?

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