Как проверить, на какой странице текстового документа расположена фигура / изображение, используя C # Interop - PullRequest
0 голосов
/ 23 ноября 2018

Используя

var shapes = currentDocument.Shapes;
foreach (Shape shape in shapes)
    if (shape.Type == MsoShapeType.msoPicture)
    {
        InlineShapeHelper.ReplaceInlineShape(...);
        break;
    }

Я могу заменить первое изображение в "currentDocument".

Как определить, на какой странице находится изображение (или в этом случае также достаточно: еслиэто на первой странице)?

Я хочу заменить определенное изображение на первой странице, так возможно ли вообще извлечь изображение или проверить, если изображение является тем, которое я ищу?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Чтобы ответить на ваш конкретный вопрос: Как я могу определить, на какой странице находится изображение?

Метод get_Information может вернуть номер страницы данного Range, используя перечисление Word.WdInformation.wdActiveEndPageNumber.

A Shape всегда привязан к определенному символу в документе - это свойство Range формы (Shape.Anchor).

В следующем примере кода показано, какЗацикливание фигур в документе, получить их имя и номер страницы.Обратите внимание, что если известен Shape.Name, то можно подобрать объект Shape напрямую (Shapes["Name As String"]).Но вы должны быть осторожны с именами, сгенерированными приложением Word, когда Shape вставляется, поскольку Word может изменить имя, которое он назначает себе в любое время.Если имя присваивается с помощью кода, это имя остается статическим - Word не изменит его.

         Word.ShapeRange shpRange = doc.Content.ShapeRange;
        foreach (Word.Shape shp in shpRange)
        {
            System.Diagnostics.Debug.Print(shp.Name + ", " + shp.Anchor.get_Information(Word.WdInformation.wdActiveEndPageNumber).ToString());
        }
0 голосов
/ 23 ноября 2018

Один из способов, который я нашел сразу после публикации вопроса, - сгенерировать хеш-код изображения:

var shapes = currentDocument.Shapes;
foreach (Shape shape in shapes)
    if (shape.Type == MsoShapeType.msoPicture)
    {
        int hash = shape.GetHashCode();
        InlineShapeHelper.ReplaceInlineShape(...);
        break;
    }

Но мне все равно будут интересны другие, лучшие, более элегантные решения и возможностьузнать номер страницы.

...