Определите размер страницы при записи в документ XPS
Я пытаюсь написать документ XPS в фоновом потоке, и я не могу использовать PageContent или FixedPage, поскольку требуется поток STA. Причина в том, что загрузка занимает довольно много времени и блокирует пользовательский интерфейс.
Это прекрасно работает, но размер страницы не правильный, или если у меня есть альбомная страница, это все еще по умолчанию?! размер в средстве просмотра документов.
Вопрос есть. Во что я должен поместить DrawingVisual, чтобы иметь возможность изменять размер страницы / ориентацию без использования PageContent или FixedPage?
// XPS package definition
var packetName = "undefined";
var stream = new MemoryStream();
var uri = new Uri($"pack://{packetName}.xps", UriKind.Absolute);
PackageStore.RemovePackage(uri);
var package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite);
PackageStore.AddPackage(uri, package);
// Creating the XPS document
var xpsDocument = new XpsDocument(package, CompressionOption.NotCompressed, new Uri($"pack://{packetName}.xps", UriKind.Absolute).AbsoluteUri);
// XPS document writer
var docWriter = XpsDocument.CreateXpsDocumentWriter(xpsDocument);
var pageCount = renderer.FormattedDocument.PageCount;
for (int pageNumber = 1; pageNumber <= pageCount; pageNumber++) {
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
// Populating the drawing context logic here
drawingContext.Close();
var container = new ContainerVisual();
container.Children.Add(drawingVisual);
list.Add(container);
}
visualcollator.BeginBatchWrite();
foreach (var item in list) {
visualcollator.Write(item);
}
visualcollator.EndBatchWrite();
DocumentViewer = xpsDoc.GetFixedDocumentSequence();