Есть ли способ определить, на какой странице находится сноска в документе Word, с помощью vsto? - PullRequest
0 голосов
/ 13 апреля 2020

Я разрабатываю (переписываю) связанную пару надстроек Word. Назначение надстроек для генерации концептуального индекса рукописи. Надстройка первого этапа реализована в word- js и позволяет пользователю вставлять записи индекса в документ; Затем он объединяет эти записи в индекс, который он помещает в новый раздел в конце документа, с заполнителями для фактических номеров страниц записей. Это связано с тем, что в word- js API нет никаких зацепок с номерами страниц документа.

Надстройка второго этапа разрешает эти заполнители, заменяя их фактическими номерами страниц. Этот этап реализован во ВСТО (C#). Вот как выглядит код для разрешения номера страницы:

    private int[] FindAndReturnPage(Range range, string[] index_id)
    {
    // index_id consists of two strings, the index number (1-3) and the entry id
        int pageNumStart = -1; // if nothing is found we return -1
        int pageNumEnd = -1;
        Find finderStart = range.Find;
        finderStart.ClearFormatting(); // removes formatting to make the find work better
        finderStart.Text = "XE Startindex_" + index_id[0] + "_id_" + index_id[1]; // eg: XE Startindex_1_000014
        finderStart.Execute();
        if (finderStart.Found)
        {
            range.Select();
            pageNumStart = Globals.ThisAddIn.Application.Selection.Range.get_Information(WdInformation.wdActiveEndPageNumber);

    // in case the index entry spans more than one page, there might be an Endindex too
            Find finderEnd = range.Find;
            finderEnd.ClearFormatting();
            finderEnd.Text = "XE Endindex_" + index_id[0] + "_id_" + index_id[1]; // eg: XE Endindex_1_000014
            finderEnd.Execute();
            if (finderEnd.Found)
            {
                range.Select();
                pageNumEnd = Globals.ThisAddIn.Application.Selection.Range.get_Information(WdInformation.wdActiveEndPageNumber);
            }
    }
    int[] both = { pageNumStart, pageNumEnd };
    return both;
}

Это прекрасно работает для записей указателя в основном содержании документа. Но нам также необходимо разрешить номера страниц записей, созданных внутри сносок и сносок. Сноски не являются проблемой, поскольку они (почти) всегда находятся на той же странице, что и их якоря. Но сноски являются проблемой. Я могу запустить этот же код в диапазоне, который определен из коллекции сносок или сносок. Но Range.get_Information(WDInformation.wdActiveEndPageNumber) возвращает номер страницы привязки, а не номер страницы, где появляется сама сноска (это может быть сотни страниц позже).

Есть ли способ определить, на какой странице на самом деле находится сноска, не якорь, а сама сноска?

Спасибо.

...