diff --git a/QuestPDF/Drawing/DocumentGenerator.cs b/QuestPDF/Drawing/DocumentGenerator.cs index 3d33328..5c98388 100644 --- a/QuestPDF/Drawing/DocumentGenerator.cs +++ b/QuestPDF/Drawing/DocumentGenerator.cs @@ -20,6 +20,13 @@ namespace QuestPDF.Drawing RenderDocument(canvas, document); } + internal static void GenerateXps(Stream stream, IDocument document) + { + var metadata = document.GetMetadata(); + var canvas = new XpsCanvas(stream, metadata); + RenderDocument(canvas, document); + } + internal static ICollection GenerateImages(IDocument document) { var metadata = document.GetMetadata(); diff --git a/QuestPDF/Drawing/PdfCanvas.cs b/QuestPDF/Drawing/PdfCanvas.cs index c736eca..fd7b1df 100644 --- a/QuestPDF/Drawing/PdfCanvas.cs +++ b/QuestPDF/Drawing/PdfCanvas.cs @@ -4,43 +4,13 @@ using SkiaSharp; namespace QuestPDF.Drawing { - internal class PdfCanvas : SkiaCanvasBase + internal class PdfCanvas : SkiaDocumentCanvasBase { - private SKDocument Document { get; } - - public PdfCanvas(Stream stream, DocumentMetadata documentMetadata) - { - Document = SKDocument.CreatePdf(stream, MapMetadata(documentMetadata)); - } - - ~PdfCanvas() - { - Document.Dispose(); - } - - public override void BeginDocument() + public PdfCanvas(Stream stream, DocumentMetadata documentMetadata) + : base(SKDocument.CreatePdf(stream, MapMetadata(documentMetadata))) { } - - public override void EndDocument() - { - Canvas.Dispose(); - - Document.Close(); - Document.Dispose(); - } - - public override void BeginPage(Size size) - { - Canvas = Document.BeginPage(size.Width, size.Height); - } - - public override void EndPage() - { - Document.EndPage(); - Canvas.Dispose(); - } private static SKDocumentPdfMetadata MapMetadata(DocumentMetadata metadata) { diff --git a/QuestPDF/Drawing/SkiaDocumentCanvasBase.cs b/QuestPDF/Drawing/SkiaDocumentCanvasBase.cs new file mode 100644 index 0000000..16818c1 --- /dev/null +++ b/QuestPDF/Drawing/SkiaDocumentCanvasBase.cs @@ -0,0 +1,45 @@ +using System.IO; +using QuestPDF.Infrastructure; +using SkiaSharp; + +namespace QuestPDF.Drawing +{ + internal class SkiaDocumentCanvasBase : SkiaCanvasBase + { + private SKDocument Document { get; } + + public SkiaDocumentCanvasBase(SKDocument document) + { + Document = document; + } + + ~SkiaDocumentCanvasBase() + { + Document.Dispose(); + } + + public override void BeginDocument() + { + + } + + public override void EndDocument() + { + Canvas.Dispose(); + + Document.Close(); + Document.Dispose(); + } + + public override void BeginPage(Size size) + { + Canvas = Document.BeginPage(size.Width, size.Height); + } + + public override void EndPage() + { + Document.EndPage(); + Canvas.Dispose(); + } + } +} \ No newline at end of file diff --git a/QuestPDF/Drawing/XpsCanvas.cs b/QuestPDF/Drawing/XpsCanvas.cs new file mode 100644 index 0000000..c885ef8 --- /dev/null +++ b/QuestPDF/Drawing/XpsCanvas.cs @@ -0,0 +1,15 @@ +using System.IO; +using QuestPDF.Infrastructure; +using SkiaSharp; + +namespace QuestPDF.Drawing +{ + internal class XpsCanvas : SkiaDocumentCanvasBase + { + public XpsCanvas(Stream stream, DocumentMetadata documentMetadata) + : base(SKDocument.CreateXps(stream, documentMetadata.RasterDpi)) + { + + } + } +} \ No newline at end of file diff --git a/QuestPDF/Fluent/GenerateExtensions.cs b/QuestPDF/Fluent/GenerateExtensions.cs index 0027da0..ead590e 100644 --- a/QuestPDF/Fluent/GenerateExtensions.cs +++ b/QuestPDF/Fluent/GenerateExtensions.cs @@ -8,6 +8,8 @@ namespace QuestPDF.Fluent { public static class GenerateExtensions { + #region PDF + public static byte[] GeneratePdf(this IDocument document) { using var stream = new MemoryStream(); @@ -26,6 +28,32 @@ namespace QuestPDF.Fluent DocumentGenerator.GeneratePdf(stream, document); } + #endregion + + public static byte[] GenerateXps(this IDocument document) + { + using var stream = new MemoryStream(); + document.GenerateXps(stream); + return stream.ToArray(); + } + + public static void GenerateXps(this IDocument document, string filePath) + { + using var stream = new FileStream(filePath, FileMode.Create); + document.GenerateXps(stream); + } + + public static void GenerateXps(this IDocument document, Stream stream) + { + DocumentGenerator.GenerateXps(stream, document); + } + + #region XPS + + #endregion + + #region Images + public static IEnumerable GenerateImages(this IDocument document) { return DocumentGenerator.GenerateImages(document); @@ -47,5 +75,7 @@ namespace QuestPDF.Fluent index++; } } + + #endregion } } \ No newline at end of file