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 添加圖片數據的方法進行添加圖片。

 

之前研究的。。。有時間再記錄吧

 

  以上方法是通過研究源碼得到,學習中請多研究源碼。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM