/// <inheritdoc/> public void Save(Stream stream, object item, object options) { if (item == null) { return; } var ic = options as IImageCache; if (options == null) { return; } IShapeRenderer renderer = new SkiaSharpRenderer(_serviceProvider, true, 72.0); renderer.State.DrawShapeState.Flags = ShapeStateFlags.Printable; renderer.State.ImageCache = ic; var presenter = new ExportPresenter(); IProjectExporter exporter = new PdfSkiaSharpExporter(renderer, presenter, 72.0f); if (item is IPageContainer page) { var dataFlow = _serviceProvider.GetService <IDataFlow>(); var db = (object)page.Data.Properties; var record = (object)page.Data.Record; dataFlow.Bind(page.Template, db, record); dataFlow.Bind(page, db, record); exporter.Save(stream, page); } else if (item is IDocumentContainer document) { var dataFlow = _serviceProvider.GetService <IDataFlow>(); dataFlow.Bind(document); exporter.Save(stream, document); } else if (item is IProjectContainer project) { var dataFlow = _serviceProvider.GetService <IDataFlow>(); dataFlow.Bind(project); exporter.Save(stream, project); } }
private void UpdateSvg() { bool exportPresenter = _previewWindow.svgExport.IsChecked == true; bool showPrintable = _previewWindow.svgPrintable.IsChecked == true; Task.Factory.StartNew(() => { try { IImageCache ic = _projectEditor.Project; var container = _projectEditor.Project.CurrentContainer; var renderer = new SkiaSharpRenderer(true, 96.0); if (!showPrintable) { renderer.State.DrawShapeState.Flags = ShapeStateFlags.Printable; } renderer.State.ImageCache = _projectEditor.Project; var presenter = exportPresenter ? (ContainerPresenter) new ExportPresenter() : (ContainerPresenter) new EditorPresenter(); using (var ms = new MemoryStream()) { using (var stream = new SKManagedWStream(ms)) { using (var writer = new SKXmlStreamWriter(stream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)container.Width, (int)container.Height), writer)) { presenter.Render(canvas, renderer, container, 0, 0); } stream.Flush(); } var svg = Encoding.ASCII.GetString(ms.GetBuffer(), 0, (int)ms.Length); Dispatcher.Invoke(() => { _previewWindow.svgText.Text = svg; }); } } catch (Exception) { } }); }
/// <inheritdoc/> public void Save(Stream stream, object item, object options) { if (item == null) { return; } var ic = options as IImageCache; if (options == null) { return; } var renderer = new SkiaSharpRenderer(_serviceProvider); renderer.State.DrawShapeState.Flags = ShapeStateFlags.Printable; renderer.State.ImageCache = ic; var presenter = new ExportPresenter(); IProjectExporter exporter = new SvgSkiaSharpExporter(renderer, presenter); if (item is IPageContainer page) { var dataFlow = _serviceProvider.GetService <IDataFlow>(); var db = (object)page.Data.Properties; var record = (object)page.Data.Record; dataFlow.Bind(page.Template, db, record); dataFlow.Bind(page, db, record); exporter.Save(stream, page); } else if (item is IDocumentContainer document) { throw new NotSupportedException("Saving documents as svg drawing is not supported."); } else if (item is IProjectContainer project) { throw new NotSupportedException("Saving projects as svg drawing is not supported."); } }
/// <inheritdoc/> void IFileWriter.Save(string path, object item, object options) { if (string.IsNullOrEmpty(path) || item == null) { return; } var ic = options as IImageCache; if (options == null) { return; } var renderer = new SkiaSharpRenderer(true, 96.0); renderer.State.DrawShapeState.Flags = ShapeStateFlags.Printable; renderer.State.ImageCache = ic; var presenter = new ExportPresenter(); IProjectExporter exporter = new SvgSkiaSharpExporter(renderer, presenter); if (item is XContainer) { exporter.Save(path, item as XContainer); } else if (item is XDocument) { throw new NotSupportedException("Saving documents as svg drawing is not supported."); } else if (item is XProject) { throw new NotSupportedException("Saving projects as svg drawing is not supported."); } }
/// <inheritdoc/> void IFileWriter.Save(string path, object item, object options) { if (string.IsNullOrEmpty(path) || item == null) { return; } var ic = options as IImageCache; if (options == null) { return; } ShapeRenderer renderer = new SkiaSharpRenderer(true, 72.0); renderer.State.DrawShapeState.Flags = ShapeStateFlags.Printable; renderer.State.ImageCache = ic; var presenter = new ExportPresenter(); IProjectExporter exporter = new PdfSkiaSharpExporter(renderer, presenter, 72.0f); if (item is XContainer) { exporter.Save(path, item as XContainer); } else if (item is XDocument) { exporter.Save(path, item as XDocument); } else if (item is XProject) { exporter.Save(path, item as XProject); } }