为有中文需求的客户提供多渠道中文技术支持.

Thu Oct 29, 2020 3:30 am

需求:如何在doc文档,指定页数中插入图片呢,例如:我想在第1页、3页、5页....奇数页中,指定位置插入想要的图片

参考的code里,是以节来操作,拿到一个任意文档,默认只有一节,仅能控制图片在第一页的位置,如何能够放到想要页数的位置呢,求教!

jerry_shj
 
Posts: 3
Joined: Wed Oct 28, 2020 9:31 am

Thu Oct 29, 2020 7:02 am

您好,

感谢咨询。
请注意,Word文档是流式排版,实际上它的结构中没有“页”这一属性。也就是说,无法获取到具体的某一页。因此对于您期望的直接在某一页添加图片,抱歉无法实现。
不过您可以在Word文档中手动插入一些标记,比如书签这种。我们Spire.Doc可以实现通过标记定位到需要插入图片的位置,然后添加图片。下面代码展示了如何通过书签插入图片,供您参考。
Code: Select all
            string input = @"Bookmark.docx";
            Document doc = new Document();
            doc.LoadFromFile(input);

            BookmarksNavigator bn = new BookmarksNavigator(doc);
            bn.MoveToBookmark("Image", true, false);

            Section section0 = doc.AddSection();
            Paragraph paragraph = section0.AddParagraph();
            Image image = Image.FromFile(@"E-iceblueLogo.png");
            DocPicture picture = paragraph.AppendPicture(image);
            bn.InsertParagraph(paragraph);
            doc.Sections.Remove(section0);

            string output = "InsertImageAtBookmark.docx";
            doc.SaveToFile(output, FileFormat.Docx);


Sincerely,
Brian
E-iceblue support team
User avatar

Brian.Li
 
Posts: 1271
Joined: Mon Oct 19, 2020 3:04 am

Thu Oct 29, 2020 10:51 am

感谢您的回复:
我们想要实现的效果是,在不修改原文件的情况下,在不同页实现图片的插入。
您说word文档是流式布局的,那有没有办法通过比对一个固定的位置(像是文本的起始位置),来实现图片不同页的展示呢?
拿到任意一个word文档,如果不做任何加工操作,是否真的只能在第一页的指定位置插入图片呢?

jerry_shj
 
Posts: 3
Joined: Wed Oct 28, 2020 9:31 am

Fri Oct 30, 2020 6:51 am

您好,

抱歉,这个做不到。对于流式排版类型的文档,是无法判断每页的开始位置和结束位置的。您只能通过文档的某些标记来进行定位,比如我上面说的书签,或者是分页符等等。
另外,您也可以通过查找某个词语,然后获取它所在的段落再添加图片,如下所示。
Code: Select all
            string input = @"Bookmark.docx";
            Document doc = new Document();
            doc.LoadFromFile(input);
            Image image = Image.FromFile(@"E-iceblueLogo.png");

            TextSelection[] selections = doc.FindAllString("Word", true, false);
            int index = 0;
            TextRange range = null;

            foreach (TextSelection selection in selections)
            {
                range = selection.GetAsOneRange();
                index = range.OwnerParagraph.ChildObjects.IndexOf(range);
                range.OwnerParagraph.AppendPicture(image);
            }

            doc.SaveToFile("ReplaceWithImage.docx", FileFormat.Docx);


Sincerely,
Brian
E-iceblue support team
Last edited by Brian.Li on Fri Oct 30, 2020 7:18 am, edited 2 times in total.
User avatar

Brian.Li
 
Posts: 1271
Joined: Mon Oct 19, 2020 3:04 am

Fri Oct 30, 2020 7:02 am

好的,明白了,非常感谢您百忙之中的回复

jerry_shj
 
Posts: 3
Joined: Wed Oct 28, 2020 9:31 am

Fri Oct 30, 2020 7:28 am

您好,

不客气。
如果在使用我们产品的过程中,还有别的问题,欢迎随时联系我们。
祝您一切顺利!

Sincerely,
Brian
E-iceblue support team
User avatar

Brian.Li
 
Posts: 1271
Joined: Mon Oct 19, 2020 3:04 am

Return to 中文技术支持