NPOI向word中插入图片的Bug解决方案

本文介绍如何使用NPOI库自定义地在Word文档中插入图片,并提供了一个具体的实现示例。该方法可以避免因图片插入而导致的文档无法打开的问题。

NPOI包中插入图片,会导致最终生成的word打不开。使用自定义的插入。

 public class XWPFInsertPicture
    {
        public void WordIndertPicTest()
        {
            try
            {
                var wordDoc = new XWPFDocument();
                var picAbsolutePath = @"D:\test.jpg";
                if (File.Exists(picAbsolutePath))
                {
                    var picID = wordDoc.AddPictureData(new FileStream(picAbsolutePath, FileMode.Open), (int)PictureType.JPEG);
                    CreatePicture(wordDoc, picID, 800, 400);
                }

                var outputPath = Path.Combine(@"D:\", Guid.NewGuid().ToString() + ".docx");
                var writeStream = new FileStream(outputPath, FileMode.Create);
                wordDoc.Write(writeStream);
                writeStream.Close();
            }
            catch (Exception ex)
            {


            }

        }

        public static void CreatePicture(XWPFDocument doc, string id, int width, in
NPOI是一个用于.NET平台上操作Microsoft Office文件(如Excel、Word等)的开源库。在使用NPOI处理Word文档并插入图片时,你需要首先引用NPOI的`HSSF.usermodel`和`HWPF.usermodel`命名空间,因为Word文档的操作通常涉及到`HWPF`部分。 下面是一个简单的示例代码片段,演示如何使用NPOIWord文档中插入图片: ```csharp using NPOI.HWPF.UserModel; using NPOI.IO; using System.Drawing; // 加载Word文档 using var stream = File.OpenRead("input.docx"); var document = new HSSFWorkbook(stream); // 获取主节(Main Document Part) var mainDocumentPart = document.GetPartByType(HWPFRelation.MAIN_DOCUMENT); // 创建一个绘图对象 HWPFPictureData pictureData = document.CreatePictureData(); pictureData.Biometric = BitConverter.GetBytes((int)PictType.PICT); byte[] imageData = // 这里需要你的图片字节数组 // 设置图片数据 using (MemoryStream ms = new MemoryStream(imageData)) { pictureData.SetImage(ms); } // 创建图片段落,并插入到文档中 var drawing = mainDocumentPart.GetNext DrawingPart(); drawing.RelationshipId = "rId1"; var pic = drawing.CreatePackagePart().CreateRelationship(pictureData.Id, RelationshipType.IMAGE_OBJECT); document.AddPictureData(pictureData); // 定义图片的位置和大小 float left = 50f; // 左侧距离 float top = 100f; // 上方距离 float width = 100f; // 图片宽度 float height = 100f; // 图片高度 var picShape = document.CreateDrawingMLPart<PicShape>(); picShape.SpacerWidth = width; picShape.SpacerHeight = height; picShape.Left = left; picShape.Top = top; docPart.Document.Body.AppendChild(picShape); // 关闭流和文档 document.Close(); stream.Close(); ``` 记得将`imageData`替换为你实际要插入图片字节数组。完成以上步骤后,图片就被成功插入到指定位置了。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值