zoukankan      html  css  js  c++  java
  • POI 生成word各类问题(设置中文字体,重复图片插入等怪问题......)

    一、设置字体(中文)

    // 创建 段落
    XWPFParagraph xp = j.addParagraph();
    // 创建 XWPFRun 对象
    XWPFRun title = xp.createRun();
    
    // 普通设置字体方法
    title.setFontFamily("仿宋");
    
    // ----实测以上方法只是改了ASCII码的字体,并没有什么软用
    // 以下是研究出来改中文字体的
    
    // 新建 字体配置对象
    CTFonts font = title.getCTR().addNewRPr().addNewRFonts();
    //中文
    font.setEastAsia("黑体");
    // ASCII
    font.setAscii("仿宋");    //上一种方法setFontFamily() 其实只调用了这个方法
    // 其他字符(有想法可以自己去研究一下是什么字符的):
    font.setCs("仿宋");
    font.setHAnsi("楷体");

     二、插入重复图片时只获取已存在图id,而无法添加的问题

      稍微描述一下这个问题吧,就是要插入一个相同的图片时,会遇到POI去读取原先的这个图片id再获取,而不是去新添加这个图片,导致批量插入图片时出现图片紊乱和错误。

    /* 先说明一下这个问题的产生原因
     * 该问题是由于POI源码中的
     * XWPFDocument 类的图片添加方法
     * .addPictureData(byte[] pictureData, int format)
     * 在处理图片插入时判断已存在图片的方法:
     * 当重复的图片需要插入时,会直接调用原图id
     * 而不会再往 pictures 列表里再插入,那列表的长度自然也就不会改变
     */
    解决办法,这里就文字说明一下。
    1.把你 写入 word的工具类继承 POI 的 XWPFDocument 类,这样在写方法时会比较方便,因为 XWPFDocument 类的很多属性都是 protect 的。
    2.去看改方法的源码,找到添加图片数据的代码,改写成你想要的逻辑。
    3.调用你自写的 XWPFDocument 添加图片数据的方法进行添加图片。

    之前研究的。。。有时间再记录吧

      以上方法是通过研究源码得到,学习中请多研究源码。。。

  • 相关阅读:
    PHP 文件写入和读取(必看篇)
    FormData
    JAVA中使用MD5加密实现密码加密
    使用JSONObject生成和解析json
    spring的@Transactional注解详细用法
    获取当前运行函数和方法的名字
    getattr的使用
    python socket编程入门级
    python字典解析
    我看到的最棒的Twisted入门教程!
  • 原文地址:https://www.cnblogs.com/AardWolf/p/11268068.html
Copyright © 2011-2022 走看看