如何用 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就好了
// 插入将显示在重叠文本后面的浮动图像,并将其与页面中心对齐。
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实现过类似功能, 不移动光标的话, 贴图进去后, 默认清空就是当前光标选中了刚刚的图, 在执行就把图覆盖了,