Click here to Skip to main content
15,881,938 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I have this code where I'm creating an XPS document and set it to the document viewer, also the document viewer is in a frame which allows me to navigate inside the viewer to a specific bookmark(according to this link).

C#
var fixedDocument = ...XPS document logic here...;

// Set up fresh XpsDocument
var stream = new MemoryStream();
var uri = new Uri("pack://document.xps", UriKind.Absolute);
var package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite);
PackageStore.AddPackage(uri, package);
var xpsDoc = new XpsDocument(package, CompressionOption.NotCompressed, uri.AbsoluteUri);

// Write FixedDocument to the XpsDocument
var docWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
docWriter.Write(fixedDocument);

FixedDocumentSequence document = xpsDoc.GetFixedDocumentSequence();

viewer.DocFrame.Source = ((System.Windows.Markup.IUriContext)document).BaseUri;
// Display XpsDocument in DocumentViewer
viewer.Preview.Viewer.Document = xpsDoc.GetFixedDocumentSequence();
DocFrame.Source is correct "pack://pack:,,document.xps,/FixedDocumentSequence.fdseq"


The problem is when I try to navigate to a specific bookmark in the document like

C#
var uri = new Uri("pack://pack:,,document.xps,/FixedDocumentSequence.fdseq#asd");
DocFrame.Navigate(uri);

I get the error "Application identity is not set." A new document viewer is generated but the visualization point is on the top most page (default) meaning that it is not moving at all.

What I have tried:

C#
var fixedDocument = ...XPS document logic here...;

// Set up fresh XpsDocument
var stream = new MemoryStream();
var uri = new Uri("pack://document.xps", UriKind.Absolute);
var package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite);
PackageStore.AddPackage(uri, package);
var xpsDoc = new XpsDocument(package, CompressionOption.NotCompressed, uri.AbsoluteUri);

// Write FixedDocument to the XpsDocument
var docWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
docWriter.Write(fixedDocument);

FixedDocumentSequence document = xpsDoc.GetFixedDocumentSequence();

viewer.DocFrame.Source = ((System.Windows.Markup.IUriContext)document).BaseUri;
// Display XpsDocument in DocumentViewer
viewer.Preview.Viewer.Document = xpsDoc.GetFixedDocumentSequence();
DocFrame.Source is correct "pack://pack:,,document.xps,/FixedDocumentSequence.fdseq"
Posted

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900