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

Mon Oct 10, 2022 3:46 am

您好:

一个docx文件中有表格, 文本框, 页眉页脚, 其中都可能有图片

我想把上面提到的文件中所有的图片提取出去(页眉页脚中的图片不处理),

然后自己手动进行图片进行处理(文件名不会更改),

最后想把图片, 再原大小, 原位置替换回去, 这可以实现吗?

下面是测试的图片提取的代码

Code: Select all
//初始化一个Document实例并加载Word文档
Document doc = new Document();
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\Test.docx");

int index = 0;
//遍历Word文档中每一个section
foreach (Section section in doc.Sections)
{
    //遍历section中的每个段落
    foreach (Paragraph paragraph in section.Paragraphs)
    {
        //遍历段落中的每个DocumentObject
        foreach (DocumentObject docObject in paragraph.ChildObjects)
        {
            //判断DocumentObject是否为图片
            if (docObject.DocumentObjectType == DocumentObjectType.Picture)
            {
                //保存图片到指定路径并设置图片格式
                DocPicture picture = docObject as DocPicture;
                String imageName = String.Format(@"C:\Users\Administrator\Desktop\images\Image-{0}.png", index);
                picture.Image.Save(imageName, System.Drawing.Imaging.ImageFormat.Png);
                index++;
            }
        }
   }
}

keLi1680
 
Posts: 30
Joined: Sun Oct 02, 2022 2:35 am

Mon Oct 10, 2022 8:52 am

您好,

感谢您的留言。
对于您的需求,您可以参考下面代码:

Code: Select all
//初始化一个Document实例并加载Word文档
            Document doc = new Document();
            doc.LoadFromFile(@"../../data/Test.docx");

            int index = 0;
  //遍历Word文档中每一个section
            foreach (Section section in doc.Sections)
            {
                //遍历section中的每个段落
                foreach (Paragraph paragraph in section.Body.Paragraphs)
                {
                    //遍历段落中的每个DocumentObject
                    foreach (DocumentObject docObject in paragraph.ChildObjects)
                    {
                        //判断DocumentObject是否为图片
                        if (docObject.DocumentObjectType == DocumentObjectType.Picture)
                        {
                            //获取原始图片的宽、高、位置
                            DocPicture picture = docObject as DocPicture;                                                 
                            float width = picture.Width;
                            float height = picture.Height;
                            float verticalPosition = picture.VerticalPosition;
                            float horizontalPosition = picture.HorizontalPosition;
                            String name = "Image-"+index+".png";
                            //新图片替换旧图片,并设置宽、高、位置属性
                            picture.LoadImage(@"../../image_new/"+name);
                            picture.Width = width;
                            picture.Height = height;
                            picture.VerticalPosition = verticalPosition;
                            picture.HorizontalPosition = horizontalPosition;         
                        }
                  }
             }
        }

如果您还有任何问题,欢迎随时联系。

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Tue Oct 11, 2022 12:40 am

Abel.He wrote:您好,

感谢您的留言。
对于您的需求,您可以参考下面代码:

Code: Select all
//初始化一个Document实例并加载Word文档
            Document doc = new Document();
            doc.LoadFromFile(@"../../data/Test.docx");

            int index = 0;
  //遍历Word文档中每一个section
            foreach (Section section in doc.Sections)
            {
                //遍历section中的每个段落
                foreach (Paragraph paragraph in section.Body.Paragraphs)
                {
                    //遍历段落中的每个DocumentObject
                    foreach (DocumentObject docObject in paragraph.ChildObjects)
                    {
                        //判断DocumentObject是否为图片
                        if (docObject.DocumentObjectType == DocumentObjectType.Picture)
                        {
                            //获取原始图片的宽、高、位置
                            DocPicture picture = docObject as DocPicture;                                                 
                            float width = picture.Width;
                            float height = picture.Height;
                            float verticalPosition = picture.VerticalPosition;
                            float horizontalPosition = picture.HorizontalPosition;
                            String name = "Image-"+index+".png";
                            //新图片替换旧图片,并设置宽、高、位置属性
                            picture.LoadImage(@"../../image_new/"+name);
                            picture.Width = width;
                            picture.Height = height;
                            picture.VerticalPosition = verticalPosition;
                            picture.HorizontalPosition = horizontalPosition;         
                        }
                  }
             }
        }

如果您还有任何问题,欢迎随时联系。

Sincerely
Abel
E-iceblue support team


感谢您的帮助!

运行代码后, 只替换了段落中的图片, 表格和文本框中的图片并没有替换

keLi1680
 
Posts: 30
Joined: Sun Oct 02, 2022 2:35 am

Tue Oct 11, 2022 6:37 am

您好,

感谢您的反馈。
我将从段落、文本框、表格中提取图片与替换图片的完整代码放在下面附件中。
如果您还有任何问题,欢迎随时联系。

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Tue Oct 11, 2022 7:32 am

Abel.He wrote:您好,

感谢您的反馈。
我将从段落、文本框、表格中提取图片与替换图片的完整代码放在下面附件中。
如果您还有任何问题,欢迎随时联系。

Sincerely
Abel
E-iceblue support team


非常感谢您的帮助!

替换代码中,每种对象替换前少了下面一行代码:
DocPicture picture = docObject as DocPicture;

添加后代码可以正确执行, 替换的结果很准确, 速度也很快!

keLi1680
 
Posts: 30
Joined: Sun Oct 02, 2022 2:35 am

Tue Oct 11, 2022 7:52 am

您好,

感谢您的反馈。
如果您还其他任何问题,欢迎随时联系。

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 1010
Joined: Tue Mar 08, 2022 2:02 am

Return to 中文技术支持