DocumentMap / Tabella dei contenuti per DocumentViewer e chiamare un collegamento ipertestuale per nome o numero di collegamento per documenti XPS
-
18-09-2020 - |
Domanda
Ho file XPS con segnalibri di intestazione.Se si apre il documento di origine in Word e vai a View-> Mappa dei documenti, vedi tutti i segnalibri a sinistra.È possibile ottenere questa stessa funzionalità in DocumentViewer, come se tu possa ottenere con un documento PDF in una sorta di lettore PDF?
Inoltre, il richiestoNavyEventHandler mostra che ogni collegamento ipertestuale / bookmark in un documento XPS ha un URI specifico che è qualcosa come "C: \ My Path \ to \ file.xps # pg_n_lnk_x" dove x è un numero univoco per il collegamento eN è il numero di pagina.Vorrei capire un modo per chiamare un segnalibro con la sua intestazione.Ad esempio, se avessi una sezione chiamata "schermo principale" che era a pagina 8 del file XPS, l'URI per quel segnalibro terminerà qualcosa come # PG_8_LNK_3.Per me è possibile ottenere quell'URI dall'intestazione dei segnalibri?
Soluzione
Per coloro che si chiedono, i documenti XPS sono semplicemente file ZIP.Estrai la zip e analizza il file XML \ Documents \ 1 \ Docstructure.strop per le voci del contorno.
Altri suggerimenti
Dai un'occhiata a:
Come aprire un XPS in un segnalibro specificato
Il metodo "Getbookmarks" nell'ultima risposta estrae i segnalibri dal file XPS.Il metodo "gotobookmarkelement" naviga al segnalibro.
Un modo più veloce per navigare verso il segnalibro potrebbe essere fatto impostando la proprietà Frame.Source:
DocFrame.Source = new Uri(string.Format("pack://file:,,,{0}/FixedDocSeq.fdseq#{1}", _filePath.Replace('\\', ','), bookmark.Name));
.
La stringa di input per l'aspetto dell'Uri-Costruttore come:
"pack://file:,,,C:,temp,Help,Manual.xps/FixedDocSeq.fdseq#PG_6_LNK_380"
.
per un file che si trova in:
"C:\\temp\\Help\\Manual.xps"
.