/// <summary> /// Convert a FixedDocument to an XPS file. /// </summary> /// <param name="fixedDoc">The FixedDocument to convert.</param> /// <param name="outputStream">The output stream.</param> public static void ConvertToXps(FixedDocument fixedDoc, Stream outputStream) { var package = Package.Open(outputStream, FileMode.Create); var xpsDoc = new XpsDocument(package, CompressionOption.Normal); XpsDocumentWriter xpsWriter = XpsDocument.CreateXpsDocumentWriter(xpsDoc); // xps documents are built using fixed document sequences var fixedDocSeq = new FixedDocumentSequence(); var docRef = new DocumentReference(); docRef.BeginInit(); docRef.SetDocument(fixedDoc); docRef.EndInit(); ((IAddChild)fixedDocSeq).AddChild(docRef); // write out our fixed document to xps xpsWriter.Write(fixedDocSeq.DocumentPaginator); xpsDoc.Close(); package.Close(); }
private void AddPages(DocumentReference documentReference, RollUpFixedDocument document) { var fixedDocument = new FixedDocument(); documentReference.SetDocument(fixedDocument); foreach (var page in document.Pages) { var pageContent = new PageContent(); if (page.BaseUri == null) { ((IAddChild) pageContent).AddChild(page.FixedPage); } else { pageContent.Source = page.Source; ((IUriContext) pageContent).BaseUri = page.BaseUri; } pageContent.GetPageRoot(true); fixedDocument.Pages.Add(pageContent); } }
private void FillDocumentReference(DocumentReference documentReference, RollUpFixedDocument document) { if (document.BaseUri != null) { documentReference.Source = document.Source; (documentReference as IUriContext).BaseUri = document.BaseUri; } else if (document.FixedDocument != null) { documentReference.SetDocument(document.FixedDocument); } else { AddPages(documentReference, document); } }
// --------------- CreatePopulatedFixedDocumentSequence --------------- /// <summary> /// Creates a FixedDocumentSequence with content.</summary> /// <param name="pq"> /// The print queue to print to.</param> /// <returns> /// A FixedDocumentSequence with content.</returns> public FixedDocumentSequence CreatePopulatedFixedDocumentSequence( PrintQueue pq) { // Create FixedDocumentSequence FixedDocumentSequence fixedDocumentSequence = new FixedDocumentSequence(); // Add Documents to a Fixed Document Sequence DocumentReference documentRef = new DocumentReference(); documentRef.SetDocument(CreateFixedDocumentWithPages(pq)); fixedDocumentSequence.References.Add(documentRef); return fixedDocumentSequence; }
private static void Add(string path, FixedDocumentSequence fixedDocumentSequence) { using (var doc = new XpsDocument(path, FileAccess.Read)) { var sourceSequence = doc.GetFixedDocumentSequence(); if (sourceSequence != null) { foreach (var dr in sourceSequence.References) { var newDocumentReference = new DocumentReference { Source = dr.Source }; var baseUri = ((IUriContext)dr).BaseUri; ((IUriContext)newDocumentReference).BaseUri = baseUri; var fd = newDocumentReference.GetDocument(true); newDocumentReference.SetDocument(fd); fixedDocumentSequence.References.Add(newDocumentReference); } } } }
private FixedDocumentSequence CreateFixedDocumentSequence(IEnumerable<IEnumerable<string>> projects, Size areaExtent, Size areaOrigin, bool fixedStrokeThickness, DiagramTable table) { var fixedDocumentSeq = new FixedDocumentSequence() { Name = "diagrams" }; foreach (var diagrams in projects) { var fixedDocument = CreateFixedDocument(diagrams, areaExtent, areaOrigin, fixedStrokeThickness, table); var documentRef = new DocumentReference(); documentRef.BeginInit(); documentRef.SetDocument(fixedDocument); documentRef.EndInit(); (fixedDocumentSeq as IAddChild).AddChild(documentRef); } return fixedDocumentSeq; }