DocumentMap / Tabella dei contenuti per DocumentViewer e chiamare un collegamento ipertestuale per nome o numero di collegamento per documenti XPS

StackOverflow https://stackoverflow.com/questions/3293856

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?

È stato utile?

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"
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top