使用 NPOI 将图像添加到 Word docx 文件

2024-01-04

我开始使用 NPOI 创建 Word 文档,并且尝试将简单的图像添加到文档中,但它没有显示。 (不过我可以让文字显示得很好)。

这是我的代码:

    var wDoc = new XWPFDocument();
    var bytes = File.ReadAllBytes(Settings.Configuration.WebsiteRootPath + "images/logo-large.png");
    wDoc.AddPictureData(bytes, (int)PictureType.JPEG);

我也尝试过这个:

    var wDoc = new XWPFDocument();
    using (Stream s = File.OpenRead(Settings.Configuration.WebsiteRootPath + "images/logo-large.png"))
    {
        wDoc.CreateParagraph().CreateRun().AddPicture(s, (int)PictureType.JPEG, "logo-large.png", 200, 200);
    }

不走运 - 两种情况下的文档都是空白的。

我究竟做错了什么?


最后我找到了 .netCore 的解决方法。 问题出在生成的 document.xml 中。以下代码:

  var p0 = doc.Paragraphs[0];
  var r0 = p0.CreateRun();
  r0.AddPicture(image, 6,"logo.png",Units.ToEMU(width),Units.ToEMU(height));

生成xml节点:

   <wp:docPr name="Drawing 0" descr="logo.png"/>

缺少属性 ID。当您将此节点更改为:

<wp:docPr name="Drawing 0" id="0" descr="logo.png"/>

一切都应该有效。即使您的文档中已有图像并且仅用于第一个记录,也会发生这种情况。我找不到修复它的原因和方法(可能是导出部分中的某些内容),但是如果您将此 id 更改为其他值,它将起作用:

var p0 = doc.Paragraphs[0];
var r0 = p0.CreateRun();
r0.AddPicture(image, 6, "logo.png", Units.ToEMU(width), Units.ToEMU(height));
var docPr = ((NPOI.OpenXmlFormats.Dml.WordProcessing.CT_Drawing)r0.GetCTR().Items[0]).inline[0].docPr;
docPr.id = 1000;

仅文件中的第一张图像需要此操作。如果您有更多图像,以下代码也应该有效:

var p0 = doc.Paragraphs[0];
var r0 = p0.CreateRun();
r0.AddPicture(image, 6, "logo.png", Units.ToEMU(width), Units.ToEMU(height)); 
var docPr = ((NPOI.OpenXmlFormats.Dml.WordProcessing.CT_Drawing)r0.GetCTR().Items[0]) .inline[0].docPr;
docPr.id = 1000;
var p1 = doc.Paragraphs[1];
var r1 = p1.CreateRun();
r1.AddPicture(image2, 6, "cat.png", Units.ToEMU(width2), Units.ToEMU(height2));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 NPOI 将图像添加到 Word docx 文件 的相关文章

随机推荐

  • 从 Silverlight 客户端添加自定义 SOAP 标头

    我正在尝试在 Silverlight 客户端和 Java 服务器之间设置 Web 服务 我需要从 Silverlight 客户端发送用户名令牌 用户名 密码 以进行身份 验证 由于这是一个概念验证 我想让事情变得简单并使用 HTTP 作为我
  • 如何修复错误无法修改标头信息 - 标头已由[重复]发送

    这个问题在这里已经有答案了 我在 codeigniter 中遇到以下类型的错误 我无法解决它 任何人都知道此错误的原因是什么 A PHP Error was encountered Severity Warning Message Cann
  • 我们如何指导屏幕阅读器正确地强调/强调/发音单词

    我正在寻求改善新闻网站上的屏幕阅读器体验 具体来说 我在 Mac 上通过 VoiceOver 进行测试 遇到了以下问题 采取以下句子 直播 发生有新闻价值的事件 在这里 我们希望 LIVE 与 alive l v 但 VoiceOver 将
  • 检索解决方案的路径?

    我们目前正在为我们的公司设置 Team Build 2010 我正在尝试使用工作流活动来检索当前正在构建的解决方案的确切本地路径 我还没有找到获得这个值的方法 有人知道如何 不编写自定义活动 吗 服务器或本地路径之一就足够了 即 TeamP
  • 可以避免在 Java 中默认调用 super() 吗?

    假设由于某种原因我不想隐式调用super 这是默认完成的 class Animal public Animal System out println Constructing an animal class Dog extends Anim
  • 在 python 中使用 oauth2 服务帐户向 Google API 进行身份验证

    我已按照以下说明进行操作https developers google com accounts docs OAuth2ServiceAccount https developers google com accounts docs OAu
  • EntityManager 在 JBoss JSF bean 中的 merge() 上抛出 TransactionRequiredException

    我在 JBoss 5 0 1GA 上设置了一个 JSF 应用程序 以在表中显示用户列表 并允许通过每个用户旁边的按钮删除单个用户 当deleteUser被调用时 调用被传递到一个UserDAOBean 它获取从JBoss注入的EntityM
  • 詹金斯订书机请求失败,没有有效的面包屑

    我正在开发一个 Jenkins 插件 现在我陷入了一个困境 我试图使用 JavaScript 代理获取方法的返回值 如下所述here https wiki jenkins io display JENKINS AJAX with JavaS
  • 带有 LDAP 身份验证的 OWIN

    这是我的场景 我有一个使用 Owin 作为身份验证机制的 MVC 5 应用程序 默认模板在登录操作中调用 SignInManager PasswordSignInAsync 我想覆盖该操作以使用 LDAP 验证用户 而不是查看数据库 我可以
  • 如何同步一系列 Promise?

    我有一个 Promise 对象数组 必须按照它们在数组中列出的顺序来解析 即在前一个元素被解析之前我们不能尝试解析一个元素 作为方法Promise all does 如果一个元素被拒绝 我需要链立即拒绝 而不尝试解析下一个元素 我该如何实现
  • 编写 Spark 作业时是否有理由不使用 SparkContext.getOrCreate?

    我正在编写与 Datastax 中的 Cassandra 对话的 Spark 作业 有时 在执行 Spark 作业中的一系列步骤时 获取新 RDD 比加入旧 RDD 更容易 您可以通过调用来做到这一点SparkContext getOrCr
  • 在 MATLAB 中显示梯度图像的颤动图

    我有一个形象 我想显示使用 MATLAB 中的梯度函数获得的梯度图像的颤动图 最好叠加在梯度图像上 I imread image png gx gy gradient double rgb2gray I g abs gx abs gy fi
  • 具有安全用户身份验证和注册第三方应用程序的简单 PHP REST 服务器

    我正在考虑编写一个 PHP REST API 允许注册用户与第三方应用程序的 Web 服务进行交互 我需要 API 能够做的是 提供对安全用户身份验证的支持 允许注册用户与第三方应用程序的服务交互 该应用程序应事先在系统上注册并获得批准 类
  • 考虑重复,在数组中存储随机值

    这是一个新版本这个帖子 https stackoverflow com questions 4990164 estimating the probability of 3 people sharing a birthday为了将编程问题与概
  • 通用类的类助手?

    我正在使用 Delphi 2009 是否可以为通用类 即 TQueue 编写一个类帮助器 显而易见的 TQueueHelper
  • 如何从具有或不具有背景大小的文件夹创建精灵(使用指南针)

    我想将指南针生成的图标精灵用于两种不同的场景 使用原始大小的图标 使用 CSS3 属性使用与较小版本相同的图标background size 我首先这样做 logo spacing 20px import logo png include
  • NHibernate;删除子项也会删除父项吗?

    为什么是当我删除子级 员工 时 父级 商店 也被删除 我配置为约定 Cascade All The 用户输入序列很简单 从空数据库开始 添加家长 保存 加载 加载 重新加载完整对象图 添加一个孩子 保存 加载 删除子项 结果 数据库为空 父
  • Spotify 自动播放列表管理与 PHP 后端和速率限制

    两个问题 问题1 我们需要从我们的后端 PHP 管理 Spotify 用户的 4 个播放列表 无需用户登录 我们网站的访问者可以向我们的网站提交多首他们喜欢的歌曲 在此基础上 我们创建并管理 4 个播放列表 其中包含 提交最多的歌曲 我们希
  • 如何显示用户时区的时间

    我使用的是rails 3 0 5 并且已将created at 和updated at 存储在UTC 中 现在我想显示用户时区中的created at时间 我相信可以从浏览器中选择用户的时区 然后将时间转换为用户的时区 我确信 Rails
  • 使用 NPOI 将图像添加到 Word docx 文件

    我开始使用 NPOI 创建 Word 文档 并且尝试将简单的图像添加到文档中 但它没有显示 不过我可以让文字显示得很好 这是我的代码 var wDoc new XWPFDocument var bytes File ReadAllBytes