DocumentMap/Índice para DocumentViewer e chamar um hiperlink por nome ou número de link para documentos XPS
-
18-09-2020 - |
Pergunta
Tenho arquivos XPS com marcadores de cabeçalho.Se você abrir o documento de origem no Word e for em visualizar->Mapa do Documento, verá todos os marcadores à esquerda.É possível obter essa mesma funcionalidade no DocumentViewer, como você obteria com um documento PDF em algum tipo de leitor de PDF?
Além disso, o RequestNavigateEventHandler mostra que cada hiperlink/marcador em um documento XPS tem um Uri específico que é algo como "C:\meu caminho\para\arquivo.xps#PG_N_LNK_X" onde X é um número exclusivo para o link e N é o número de página.Gostaria de descobrir uma maneira de chamar um marcador pelo título.Por exemplo, se eu tivesse uma seção chamada "Tela principal" que estava na página 8 do arquivo XPS, o Uri desse marcador terminaria em algo como #PG_8_LNK_3.É possível obter esse Uri no cabeçalho do marcador?
Solução
Para aqueles que se perguntam, os documentos XPS são simplesmente arquivos zip.Extraia o zip e analise o arquivo XML \ Documents \ 1 \ Docstructurure.Strute para as entradas do contorno.
Outras dicas
Dê uma olhada em:
Como abrir um XPS em marcadores específicos
O método "GetBookmarks" na última resposta extrai os marcadores do arquivo XPS.O método "GotoBookmarkElement" navega até o marcador.
Uma maneira mais rápida de navegar até o marcador pode ser feita definindo a propriedade Frame.Source:
DocFrame.Source = new Uri(string.Format("pack://file:,,,{0}/FixedDocSeq.fdseq#{1}", _filePath.Replace('\\', ','), bookmark.Name));
A string de entrada para o Uri-Constructor é semelhante a:
"pack://file:,,,C:,temp,Help,Manual.xps/FixedDocSeq.fdseq#PG_6_LNK_380"
para um arquivo localizado em:
"C:\\temp\\Help\\Manual.xps"