Npoi XWPF Word 导出时插入图片无法显示 bug 完美解决
一、来自客户的需求
最近客户来个新需求生成一个word 标签纸,并且需要在标签纸上插入一个logo,并且将erp 中的数据取出来自动写在文档上,不由得淡淡一笑,这不难呀!
于是乎我就写下了这样的代码:
插入文字段落
XWPFParagraph m_xp = doc.CreateParagraph();
LableInfo lable = lableInfos[i];
XWPFRun xwpfRun = m_xp.CreateRun();//创建段落文本对象
xwpfRun.SetTextPosition(-10);
xwpfRun.FontSize = 15;//字体大小
xwpfRun.IsBold = false;//是否加粗
xwpfRun.SetFontFamily("黑体", FontCharRange.None);//设置字体(如:微软雅黑,华文楷体,宋体)
xwpfRun.AppendText("产品名称:");
插入图片
XWPFParagraph gp = doc.CreateParagraph();
FileStream gfs = new FileStream(@"..\..\logo.png", FileMode.Open, FileAccess.Read);
gp.SpacingAfterLines = -1;
XWPFRun gr = gp.CreateRun();
gr.AddPicture(gfs, (int)PictureType.PNG, "image1.png", 2009000, 400000);
gfs.Close();
是不是很轻松就搞定了。
没想到弹出这么个框框,眼前一黑啊!!!!!
二、解决Npio 插入图片报错问题
1、找出问题
用WinRAR打开,对比下正常情况下的数据和报错那个文件的数据有什么不同
找到document.xml 文件,对比下两个文件的差异
错误的文件
正确的文件
2、解决问题
对比发现用代码插入的图片xml 文件和手动操作word插入图片的xml 并非一样,因此我们需要更换下xml就可以解决问题了。
上代码:
public static void CreatePicture(XWPFRun run, string id, int width , int height )
{
try
{
int EMU = 9525;
width *= EMU;
height *= EMU;
CT_Inline inline = run.GetCTR().AddNewDrawing().AddNewInline();
inline.distT = inline.distB = inline.distL = inline.distR = 0;
inline.graphic = new NPOI.OpenXmlFormats.Dml.CT_GraphicalObject(); NPOI.OpenXmlFormats.Dml.CT_GraphicalObjectData graphicData = inline.graphic.AddNewGraphicData();
graphicData.uri = "http://schemas.openxmlformats.org/drawingml/2006/picture"; string picXmlstr = "";
using (StreamReader sr = new StreamReader(@"C:\001.txt", Encoding.UTF8))
{
picXmlstr = sr.ReadToEnd();
} graphicData.AddPicElement(picXmlstr); CT_PositiveSize2D extent = inline.AddNewExtent(); extent.cx = width;
extent.cy = height;
CT_EffectExtent effectExtent = new CT_EffectExtent();
effectExtent.l =(long)19050;
effectExtent.t = effectExtent.r = effectExtent.b = 0;
inline.effectExtent = effectExtent; CT_NonVisualDrawingProps docPr = inline.AddNewDocPr();
docPr.id = 6;
docPr.name = "图片" + id;
docPr.descr = "logo.png"; CT_NonVisualGraphicFrameProperties cT_Non = new CT_NonVisualGraphicFrameProperties();
NPOI.OpenXmlFormats.Dml.CT_GraphicalObjectFrameLocking cT_Graphical =new NPOI.OpenXmlFormats.Dml.CT_GraphicalObjectFrameLocking();
cT_Graphical.noChangeAspect = true;
cT_Non.graphicFrameLocks = cT_Graphical;
inline.cNvGraphicFramePr = cT_Non;
}
catch (Exception ex)
{ }
}
picXmlstr 是一个xml 文件
<pic:pic xmlns:pic="http://schemas.openxmlformats.org/drawingml/2006/picture">
<pic:nvPicPr>
<pic:cNvPr id="0" name="logo.png" />
<pic:cNvPicPr />
</pic:nvPicPr>
<pic:blipFill>
<a:blip r:embed="rId4" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" />
<a:stretch xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:fillRect />
</a:stretch>
</pic:blipFill>
<pic:spPr>
<a:xfrm xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:off x="0" y="0" />
<a:ext cx="1505160" cy="476317" />
</a:xfrm>
<a:prstGeom prst="rect" xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
<a:avLst />
</a:prstGeom>
</pic:spPr>
</pic:pic>
调用代码入下:
XWPFParagraph wPFParagraph = doc.CreateParagraph();
FileStream gfs = new FileStream(@"..\..\logo.png", FileMode.Open, FileAccess.Read);
var picID = doc.AddPictureData(gfs, (int)PictureType.PNG);
gfs.Close();gfs.Dispose();
CreatePicture(wPFParagraph.CreateRun(), picID, 2009000, 400000);
3、大功告成
Npoi XWPF Word 导出时插入图片无法显示 bug 完美解决的更多相关文章
- 在word中粘贴的图片为什么显示不完整
一.背景 整理系统测试说明文档,截得图片粘贴到word中显示不完整. 二.错误问题 问题:在word中粘贴的图片为什么显示不完整,如图所示: 三.分析问题: 原因是原来设置的行间距是固定值,图片也作一 ...
- 2.4.5 用NPOI操作EXCEL--插入图片
我们知道,在Excel中是可以插入图片的.操作菜单是“插入->图片”,然后选择要插入图片,可以很容易地在Excel插入图片.同样,在NPOI中,利用代码也可以实现同样的效果.在NPOI中插入图片 ...
- Word批量调整插入图片大小
做标书,word中需要插入大量图片,实为一些证书.文件的扫描文件.但插入后,大小不是想要的,太小了,打印出来看不清.需要调整,需要批量调整. 这是一个不错的方法: 选中第一张图片,按页面调整大小到适合 ...
- swiper.js在隐藏/显示切换时,轮播出现bug的解决办法
swiper在 swiper-container正常状态下显示,轮播是没有问题,但是当 swiper-container由隐藏切换至显示时(比如做图片查看时)会出现滑动bug,滑动卡顿而且最后一张可以 ...
- XML-20100: (Fatal Error) Expected ';'. xml转word 导出时异常
因为数据中包含特殊字符.需要进行转译. < < 小于号 > > 大于号 & & 和 ' ’ 单引号 " " 双引号 XML ...
- C#.net中当地址有中文时,图片无法显示解决方法
原文发布时间为:2008-11-05 -- 来源于本人的百度文章 [由搬家工具导入] 搞了半天都无法正常显示图片, string path = Server.MapPath("." ...
- web页面上展示图片时,图片不显示,报错:ERR_CONTENT_LENGTH_MISMATCH
问题描述 前端页面加载css,和js文件的时候,经常出现ERR_CONTENT_LENGTH_MISMATCH的报错情况. 查找问题 在单独打开hearder中css,js的网络地址是能打开的 ...
- IOS下图片不能显示问题的解决办法
最近遇到这样一个问题,在HTML5手机页面中,直接给<img>标签设置宽高,即便图片路径正常,在IOS真机下也是无法显示的,而在安卓以及浏览器的模拟真机上都是正常显示的,这是为什么呢? h ...
- 关于django配置好静态文件后打开相关图片页显示404的解决方法
在url里设置以上代码即可,即可解决图片显示异常(出现此问题的根本原因是django版本)django3后需要加以上代码)
随机推荐
- PyQt(Python+Qt)学习随笔:Qt Designer中主窗口对象documentMode属性
documentMode属性表示当前主窗口是否启用文档模式,如果是则主窗口的选项卡部件会以适合操作文档的模式呈现,这类似于macOS上的文档模式. 设置此属性时,界面上不会呈现选项卡部件框架.此模式当 ...
- Hello TLM
前言 目标 了解TLM程序的基本过程.TLM的英文全称是Transaction Level Modeling,中文翻译为事务级建模.它是在SystemC基础上的一个扩展库. 功能描述 模块A向模块B发 ...
- jenkins+git部署环境,出现Failed to connect to repository : Command "git ls-remote -h http://gitlab.xxxxx.git HEAD" returned status code 128stdout: stderr: fatal: repository 'http://gitlab.xxxxx.git' not fou
1.部署jenkins+git源码管理的方式,源码管理报128stdout 源码管理出现如下错误: Failed to connect to repository : Command "gi ...
- Java基础学习之异常处理(6)
@ 目录 1.异常是什么 1.1.Error 1.2.Exception 2.异常处理机制 2.1.捕获异常 2.2.抛出异常 3.自定义异常 3.1.自定义检查性异常 3.2.自定义运行时异常 1. ...
- ARC109F - 1D Kingdom Builder
一行格子,其中小于\(0\)的格子为白色,大于\(n\)的格子为黑色,中间的格子颜色由题目给出. 有一些格子需要被标记.标记按照以下规则进行:选择一个颜色\(c\),找到一个未标记的 旁边有标记点的 ...
- 学习笔记:四边形不等式优化 DP
定义 & 等价形式 四边形不等式是定义在整数集上的二元函数 \(w(x, y)\). 定义:对于任意 \(a \le b \le c \le d\),满足交叉小于等于包含(即 \(w(a, c ...
- uwsgi+nginx 基于linux的各种离谱错误
1.常见的排查方法 1.nginx错误 启动报错 systemctl restart nginx tail -f /var/log/nginx/error.log 在浏览器中访问抱错 tail -f ...
- 清轩网络引导页HTML源码
本文有216个文字,大小约为1KB,预计阅读时间1分钟后续可以自己修改,模板还是挺好看的 本网站为清轩编写完成,也就是清轩网络自用的网站官网,界面非常好看, 只不过网站无后台,编辑动态的时候需要手动加 ...
- sqli-labs less13-20(各种post型头部注入)
less-13 POST型双查询注入 less-14 POST型双查询注入 less-15 POST型布尔注入 less-16 POST型布尔注入 less-17 POST型报错注入(updatexm ...
- PHPCMS V9.6.3的后台漏洞分析
PHPCMS V9.6.3后台的漏洞分析 1.利用文件包含创建任意文件getshell 漏洞文件:\phpcmsv9\phpcms\modules\block\block_admin.php 漏洞产生 ...