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 添加图片数据的方法进行添加图片。

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

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

  • 相关阅读:
    C# 为WebBrowser设置代理,打开网页
    C# WebBrowser 设置代理完全解决方案
    java读取文件的几种方式性能比较
    .NET 对文件和文件夹操作的介绍
    java利用反射打印出类的结构
    java输出月的日历控制台
    java 实现二分查找算法
    java实现快速排序
    解决window 12 service 不能调用excel ,报"System.Runtime.InteropServices.COMException (0x800A03EC)
    3 webpack 4 加vue 2.0生产环境搭建
  • 原文地址:https://www.cnblogs.com/AardWolf/p/11268068.html
Copyright © 2011-2022 走看看