如何用 c#插入多张图片到word里面

如何用 c#插入多张图片到word里面,我的代码只会每次都覆盖旧图片,没怎么学过c#,都是网上复制粘贴写的,求代#码告知,谢谢

private void button4_Click_1(object sender, EventArgs e)
{

        openFileDialog1.Filter = "*.png|*.png|*.jpg|*.jpg|*.bmp|*.bmp*";

        DialogResult dr = openFileDialog1.ShowDialog();
        int i = 0;

        if (dr == DialogResult.OK)

        {
            
            pictureBox1.Visible = true;

            pictureBox1.Image = new Bitmap(openFileDialog1.FileName);

            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

            listBox2.Items.Add(openFileDialog1.FileName);


            Spire.Doc.Document doc = new Spire.Doc.Document();
            
            //添加section和段落
            Spire.Doc.Section section = doc.AddSection();
            Spire.Doc.Documents.Paragraph para = section.AddParagraph();



            //加载图片到System.Drawing.Image对象, 使用AppendPicture方法将图片插入到段落
          DocPicture picture = doc.Sections[0].Paragraphs[0].AppendPicture(pictureBox1.Image);     //还有这段的section【0】。paragraph【0】什么意思
          



            //保存到文档
            doc.SaveToFile("C:\\Image.doc", FileFormat.Doc);


        }

    }

你把DocPicture picture = doc.Sections[0].Paragraphs[0].AppendPicture(pictureBox1.Image)这一句改为DocPicture picture = para.AppendPicture(pictureBox1.Image)试试呢。每次加载一张图片就添加一个段落,你前面已经添加了段落para,为什么后面不用这个新加的para,而要获取第一个段落呢

刚看错要求了,不好意思,你加个for循环包含那句AppendPicture,然后不断插入图片,最终再执行doc.savetofile就好了

  1. 在word中插入一个标签(此处略)
  2. 在程序中创建读取word模板并识别到mark标记,(此处略)
  3. 插入图片并完成图片设置悬浮,并附相关属性。
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

// 插入将显示在重叠文本后面的浮动图像,并将其与页面中心对齐。
Shape shape = builder.InsertImage(ImageDir + "Logo.jpg");
shape.WrapType = WrapType.None;
shape.BehindText = true;
shape.RelativeHorizontalPosition = RelativeHorizontalPosition.Page;
shape.RelativeVerticalPosition = RelativeVerticalPosition.Page;
shape.HorizontalAlignment = HorizontalAlignment.Center;
shape.VerticalAlignment = VerticalAlignment.Center;

doc.Save(ArtifactsDir + "Image.CreateFloatingPageCenter.docx");
WrapType.None 是设置悬浮,更多属性如下表
属性名 值 描述
None 3 形状周围没有文字环绕。形状放置在文本后面或前面。
Inline 0 形状与文本保持在同一层上,并被视为字符。
TopBottom 1 文本在形状的顶部停止,并在形状下方的行上重新开始。
Square 2 围绕形状的方形边界框的所有边换行文字。
Tight 4 紧紧围绕形状的边缘,而不是围绕边界框。
Through 5 与“Tight”相同,但包裹在形状的任何打开部分内。

段落也要增加 要不然总是覆盖第一个段落图片


DocPicture picture = doc.Sections[0].Paragraphs[0].AppendPicture(pictureBox1.Image);    // 段落1 
DocPicture picture = doc.Sections[0].Paragraphs[1].AppendPicture(pictureBox1.Image);    // 段落2
DocPicture picture = doc.Sections[0].Paragraphs[3].AppendPicture(pictureBox1.Image);    // // 段落3

```


using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;

namespace MultiLinePictureWatermark
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载Word文档
            Document doc = new Document();
            doc.LoadFromFile("test.docx");

            //遍历所有section
            for (int i = 0; i < doc.Sections.Count; i++)
            {
                Section section = doc.Sections[i];

                //获取section的页眉
                HeaderFooter header = section.HeadersFooters.Header;
                
                //添加段落到页眉
                Paragraph paragraph1 = header.AddParagraph();

                //加载水印图片
                DocPicture picture = new DocPicture(doc);
                picture.LoadImage("panda.png");
                picture.TextWrappingStyle = TextWrappingStyle.Behind;

                //复制图片
                for (int p = 0; p < 5; p++)
                {
                    for (int q = 0; q < 3; q++)
                    {
                        picture = (DocPicture)picture.Clone();
                        picture.VerticalPosition = 50 + 150 * p;
                        picture.HorizontalPosition = 10 + 140 * q;
                        paragraph1.ChildObjects.Add(picture);
                    }
                }
            }

            //保存文档
            doc.SaveToFile("MultiLinePictureWatermatk.docx", FileFormat.Docx2013);
        }
    }
}

逻辑是这样的,通过每次点击button来上传一张图片,所以for循环不知道要设置多少上限,我试过for(i=0;;i++),但是不知道什么时候跳出循环,因为用户上传多少张照片我也不知道,求各位大神指点一下

本质就是word的宏, 你找找api 会有一个 光标移动的命令, 插入后 移动光标到末尾就好, 我用java实现过类似功能, 不移动光标的话, 贴图进去后, 默认清空就是当前光标选中了刚刚的图, 在执行就把图覆盖了,