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都是等同的