DocumentMap / Table of Contents для DocumentViewer и вызов гиперссылки по имени или номеру ссылки для документов XPS

У меня есть файлы XPS с закладками заголовков. Если вы откроете исходный документ в Word и перейдете к просмотру-> Карта документа, вы увидите все закладки слева. Возможно ли получить такую ​​же функциональность в DocumentViewer, как если бы вы получили PDF-документ в каком-то PDF-ридере?

Кроме того, RequestNavigateEventHandler показывает, что каждая гиперссылка / закладка в документе XPS имеет определенный Uri, который выглядит примерно так: «C: \ my path \ to \ file.xps # PG_N_LNK_X», где X - уникальный номер для ссылки, а N - это номер страницы. Хотелось бы придумать способ вызова закладки по заголовку. Например, если бы у меня был раздел под названием «Главный экран», который находился на странице 8 файла XPS, Uri для этой закладки заканчивался бы примерно как # PG_8_LNK_3. Могу ли я получить этот Uri из заголовка закладки?


person Kizaru    schedule 20.07.2010    source источник


Ответы (2)


Для тех, кому интересно, документы XPS - это просто файлы ZIP. Распакуйте zip-архив и проанализируйте XML-файл \ Documents \ 1 \ DocStructure.Struct на предмет записей схемы.

person Kizaru    schedule 05.08.2010

Взгляни на:

Как открыть XPS в указанных закладках

Метод GetBookmarks в последнем ответе извлекает закладки из XPS-файла. Метод GotoBookmarkElement выполняет переход к закладке.

Более быстрый способ перехода к закладке можно сделать, установив свойство Frame.Source:

DocFrame.Source = new Uri(string.Format("pack://file:,,,{0}/FixedDocSeq.fdseq#{1}", _filePath.Replace('\\', ','), bookmark.Name));

Входная строка для Uri-Constructor выглядит так:

"pack://file:,,,C:,temp,Help,Manual.xps/FixedDocSeq.fdseq#PG_6_LNK_380"

для файла, который находится в:

"C:\\temp\\Help\\Manual.xps"
person HHenn    schedule 09.08.2016