A. poi生成word後word裡面的圖片不變形
你好,你是問poi生成word後如何保證word裡面的圖片不變形嗎?
1、確保生成的圖片盡可能地與最終需要插入的Word文檔保持相同的比例。可以通過設置圖片大小或縮放來實現。
2、在將圖片插入到Word文檔之前,最好在一個圖片編輯軟體中打開並進行調整,以便將其完全適配Word頁面並按照正確的比例顯示。
3、推薦使用POI中提供的setAutoSize(true)方法自動調整頁面布局大小,這樣可以確保文本和圖片都能夠均勻分布且沒有間隔。
4、在將圖片插入到Word文檔中時,可以選擇「不鎖定縱橫比」選項搭清,以確保圖片在Word文檔中不變形。poi是基於OfficeOpenXML標准(OOXML)和Microsoft的OLE2復液擾合文檔格式(OLE2)處理各種文件知埋前格式的開源項目。
B. poi word 圖片 設置位置
選中圖片 右鍵 選擇大小和位置 選擇 文字環繞 在選擇 浮於文字上方即可
C. java 中用poi讀取word和用docx4j讀取word
不知道你是具體讀取Word裡面的什麼元素,下面以讀取文字和圖片為例吧,兩個代碼示例,你參考看看:
讀取文本
import com.spire.doc.Document;
import java.io.FileWriter;
import java.io.IOException;
public class ExtractText {
public static void main(String[] args) throws IOException {
//載入Word文檔
Document document = new Document();
document.loadFromFile("C:\Users\Administrator\Desktop\sample.docx");
//獲取文檔中的文本保存為String
String text=document.getText();
//將String寫入Txt文件
writeStringToTxt(text,"ExtractedText.txt");
}
public static void writeStringToTxt(String content, String txtFileName) throws IOException {
FileWriter fWriter= new FileWriter(txtFileName,true);
try {
fWriter.write(content);
}catch(IOException ex){
ex.printStackTrace();
}finally{
try{
fWriter.flush();
fWriter.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}}
2. 讀取圖片
import com.spire.doc.Document;
import com.spire.doc.documents.DocumentObjectType;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.interfaces.ICompositeObject;
import com.spire.doc.interfaces.IDocumentObject;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class ExtractImages {
public static void main(String[] args) throws IOException {
//載入Word文檔
Document document = new Document();
document.loadFromFile("C:\Users\Administrator\Desktop\sample.docx");
//創建Queue對象
Queue nodes = new LinkedList();
nodes.add(document);
//創建List對象
List images = new ArrayList();
//遍歷文檔中的子對象
while (nodes.size() > 0) {
ICompositeObject node = nodes.poll();
for (int i = 0; i < node.getChildObjects().getCount(); i++) {
IDocumentObject child = node.getChildObjects().get(i);
if (child instanceof ICompositeObject) {
nodes.add((ICompositeObject) child);
//獲取圖片並添加到List
if (child.getDocumentObjectType() == DocumentObjectType.Picture) {
DocPicture picture = (DocPicture) child;
images.add(picture.getImage());
}
}
}
}
//將圖片保存為PNG格式文件
for (int i = 0; i < images.size(); i++) {
File file = new File(String.format("output/圖片-%d.png", i));
ImageIO.write(images.get(i), "PNG", file);
}
}
}
注意這里使用的jar包是spire.doc.jar,需要在java程序中先導入jar文件。
D. poi操作word好像只能獲取版式為「嵌入型」的圖片,而其它版式的圖片如何獲取比如:"四周型"的。
poi沒用過不知道,WORD中「嵌入型」的圖片是與文字等同處理的,與前後字元緊密聯系,佔一行,只是它把一行撐得很高,如果你把行間距設為固定且小於圖片高度,則圖片顯示不全。其他版式均與此不同。
E. 請教用POI向word中插入圖片的基本步驟。
請看乎譽消圖片中虛檔的例歲知子
F. 請問用poi可以向word中插入圖片么
可以!
G. 我想用POI在Word里插入一張圖片,這是我的測試代碼。執行之後word打不開!錯誤如圖中的提示
publicvoidaddPicture(stringfilepath,stringoldfileName,uintid)
{
System.IO.FileStreamgfs=newSystem.IO.FileStream(filepath,System.IO.FileMode.Open,System.IO.FileAccess.Read);
XWPFParagraphpara=doc.CreateParagraph();
XWPFRunr=para.CreateRun();
XWPFPicturepic=r.AddPicture(gfs,(int)NPOI.XWPF.UserModel.PictureType.JPEG,oldfileName,1000000,1000000);
NPOI.OpenXmlFormats.Dml.WordProcessing.CT_Inlineinline=r.GetCTR().GetDrawingList()[0].inline[0];
inline.docPr.id=id;//默認插入少了這個ID號,它就是圖片的序號,從1開始編號的。這個是我折騰了一整天弄才弄好的。
gfs.Close();
}
H. POI操作word插入相同圖片
這么做還是有個小問題,就是連續插入兩個圖片,不在同一行。
解決方案是給createPicture添加一個參數XWPFParagraph paragraph,換掉方法內部的
調用的時候,插入的兩個圖片用同一個paragraph,代碼如下
XWPFParagraph paragraph = doc.createParagraph();
// 插入第一個圖片
doc.createPicture(paragraph, 。。。);
//還可以插入一些文字唯粗
// doc.createRun().setText(" -----> ");
// 插入第二個圖片
doc.createPicture(paragraph, 。。。);
--------------- 原因:
word的模型是
整岩山液個是一個document
然後裡面有多很多個paragraph,
段落
段落和段落之間按照回車換行分割
每一段內,又可以有多個range
在這個定義的插入顯示的圖片的類里
一上來就創建了一個段落
只要把兩次插入的圖片,放到同一個段落
就在一行了。沒有回車了。
通過這個方法,把段落從插入圖片中提出來,還可以在兩個圖片之間,加入其它東西,比較文字或空格來定位。
————————————————
版權聲明:本文為CSDN博主「kimmking」的原創文章粗物,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/KimmKing/java/article/details/8205439
I. poi讀取word 。內容中包含圖片,怎麼整體讀取數據呢!(也就是需要整體當做一條數據插入資料庫)
文件當整體那就是位元組序列,與文件格式無關,也就是說是word還是exe都是等同的