npoi向word插入图片总结

npoi插入word,一把辛酸一把泪呀,开始总是不能插入图片,一插入就word就打不开了,网上百度,好多人都有这个问题,后来看到一篇poi博客poi博客介绍到这个是一个poi项目的bug。后来就一直在想怎么解决这个bug,悻然我们.net也有大神的存在,博客解决了这个问题npoi博客,但是我照着他的套路做,总是不成功,提示“未将对象引用设置到对象的实例”,好崩溃,后来让老大过来帮忙,终于解决了。特别提示:不同npoi版本对word操作有很大影响。博主曾经试验过很多npoi版本,最后确定npoi2.1.3,兼容性良好。(最后成功整理好的代码,换了其他版本,就不行,就是这么神奇,最新版本2.2.1也不行,想不通poi团队怎么会允许这个bug存在这么长时间)。下面开始正式介绍。

一、介绍这个插入图片的bug

你在网上看到的代码可能是这个样子:

C# Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
XWPFDocument doc = new XWPFDocument();

XWPFParagraph p1 = doc.CreateParagraph();

XWPFRun x = p1.CreateRun();

using (FileStream fsImg = new FileStream("E:/1.jpg",

FileMode.Open, FileAccess.Read))

{

x.AddPicture(fsImg, (int)PictureType.PNG, "asd",

(int)(400.0 * 9525), (int)(300.0 * 9525));

}

using (FileStream fs = new FileStream("1.docx", FileMode.Create))

{

doc.Write(fs);

}

上面这段代码初次运行,没有任何问题,word也能打得开,因为是初次创建word,里面没有任何内容。但是你若将FileMode.Create换成FileMode.Append,你再试试,打开word,就会出现下面这个界面:

这是为什么呢?据那篇博客介绍,这是因为在向有内容的word插入图片时,没有正确写入xml文件。那么这个xml文件从哪里看呢?word文件是可以用winRAR打开的,你用winRAR打开就看到了。

结论:上述代码在首次创建word时可以插入图片,当word中有内容的时候追加,就会产生错误写入xml,从而出现打不开word的局面。

二、解决办法

既然不能Append,那我们就在首次创建word的时候,将所有图片一次性加入吧。代码如下:

C# Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
for (int i = 0; i < text.Count; i++)
{
    XWPFParagraph par = doc.CreateParagraph();
    par.Alignment = ParagraphAlignment.LEFT;//左对齐
    XWPFRun run = par.CreateRun();
    run.FontFamily = "宋体";
    run.FontSize = 12;
    run.SetBold(false);
    par.IndentationFirstLine = 500;//首行缩进
    run.SetText(text[i].ToString());//为每段设置值
    //每段后面都加入一张图片
    using (FileStream fsImg = new FileStream(@"C:\Users\lx\Desktop\10.jpg", FileMode.Open, FileAccess.Read))
    {
        run.AddPicture(fsImg, (int)PictureType.JPEG, "10.jpg", (int)(500.0 * 9525), (int)(400.0 * 9525));
    }

}

XWPFParagraph  hm_xp = doc.CreateParagraph();
hm_xp.CreateRun().AddBreak();   //分页
using (FileStream fsa = new FileStream(@"C:\Users\lx\Desktop\11.doc", FileMode.Create, FileAccess.Write))
{
    doc.Write(fsa);
}

附上npoi插入页码教程:插入页码
注:每插入一张图片,都必须开启一次文件流,注意是必须,一个文件流只能插入一张图片,所以,最好的办法就是循环。

本次博客就分享到这里,我们下次再会。

npoi插入word图片(终于解决插入图片后打不开word)相关推荐

  1. 解决Xshell7安装后打不开的问题

    解决Xshell7安装后打不开的问题 1.右击我的电脑/计算机→管理. 2.找到服务列表(计算机管理(本地)→服务和应用程序→服务). 3.找到 FlexBet Licensing Service服务 ...

  2. word中,解决插入形状后固定位置不变。

    在office上的word中,如果插入形状后,默认"对象随文字移动".当出现文字或者图片的格式出现更换,该形状就会随着变化位置.或者将word转换为PDF格式后,形状也会出现位置变 ...

  3. 终于解决!图片随鼠标移动在FireFox下实现,另附一个好玩的图片随鼠标伸缩效果

    不用left/top处理(用padding代替): <html> <head> <script type="text/javascript"> ...

  4. ie浏览器html图片兼容,解决webp图片格式IE浏览器不兼容性问题

    这两天把博客,图片格式改了一下,今天晚上,正好用ie浏览器打开pdf文件,然后突然想起,试试这个浏览器的兼容性, 发现图片加载不出来了,报错了 无法对位于 URL"https://img.b ...

  5. chrome浏览器不能显示本地图片办法解决(图片预览)

    近期开发项目时有个功能是实现图片预览,但是我将图片路径赋值给img标签的src时,预览的显示是这样的. 唉.我就郁闷了,再仔细一看,浏览器给我加了个路径啊. 这是什么鬼东西啊. 试了一下replace ...

  6. android无限轮播banner图片并且解决banner图片只有2张出现白板的情况,触摸即不轮播

    //主页面代码 public class BannerActivity extends Activity { private ViewPager mViewPager;     private Lin ...

  7. 使用VS Code 使用pygame加载不出图片;Python的pygame打不开图片,怎么解决?由于图片运行报错

    首先,我开始也是打不开的,因为我是先用的Pycham转过来使用的,然后使用了VS也使用以下的代码,注意是pygame.image.load()这段程序 ''' @Description: In Use ...

  8. win打印显示打印服务器错误,由于打印机的当前设置有问题,windos无法打印_由于打印机设置word无法打印解决方法...

    朋友们在日常办公时可能会遇到需要打印word文档的情况,但是有可能会出现一些错误,导致我们无法正常打印,例如由于打印机的当前设置有问题,windos无法打印的错误提示,那么为什么会出现这种情况呢?其实 ...

  9. 【Get深一度】Microsoft Office 2013 Word中图片插入后变模糊解决办法

     Microsoft Office 2013 Word中图片插入后变模糊解决办法 作者在使用Word时发现插入的图片变模糊了,这个问题以前也经常遇到,只是从未上心过,这次花点心思解决一下,也给众多 ...

最新文章

  1. css3 动画 火箭,CSS3 火箭发射动画 寓意创新起航
  2. N个免费DevOps开源工具,没用过,至少应该了解!
  3. SQL Server 2000 Service Pack 4 中所修复的 bug 的列表
  4. angular2新手学习笔记(1)概述
  5. 如何在Spyder中运行spark
  6. 游戏与算法的必经之路
  7. nginx 知识点 :ctx_index and index
  8. Wget CVE-2014-4877:FTP 符号链接任意文件系统访问
  9. 使用JUnit的ExpectedException和@Rule测试自定义异常
  10. android代码移除焦点,android-如何从单个editText移除焦点
  11. Python钉钉报警及Zabbix集成钉钉报警
  12. 腾讯广告算法大赛 | 这是一篇雪中送炭的赛题宝典
  13. 交流信号叠加直流偏置_T型偏置器与隔直器,二者应用之对比
  14. HTML5 简介与安装
  15. sensor 驱动调试小结
  16. 打开计算机网络自动连接,电脑如何自动连接上网 开机自动拨号连接宽带的方法【步骤】...
  17. Linux Mint系统常用软件安装
  18. 四川托普计算机学校官网,四川中等职业技术学院
  19. Nginx_01_Nginx三大基础功能(静态服务器、虚拟主机、负载均衡/服务端代理)
  20. 计算机原理与应用 第二章——ARM处理器

热门文章

  1. 测试测试测试测试测试测试测试测试测试测试
  2. 只有程序员才能看懂的爆笑段子?超级实用和搞笑哦!!!
  3. Android 开发凉了吗!
  4. 【226期】面试问我,HashMap 的默认初始容量是多少,我该怎么说?
  5. Scratch之召开趣味运动会
  6. xilinx下载器hs3
  7. [BZOJ] 2054 疯狂的馒头
  8. 中国社科发布:十大调查研究咨询机构公司
  9. 数据感知控件之浮想联翩
  10. linux中使用matplotlib缺失中文字体的解决方案