Added support for XPS rendering

This commit is contained in:
Marcin Ziąbek
2021-11-19 00:22:45 +01:00
parent 7c7d461c4b
commit 79cc5f1507
5 changed files with 100 additions and 33 deletions
+7
View File
@@ -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<byte[]> GenerateImages(IDocument document)
{
var metadata = document.GetMetadata();
+3 -33
View File
@@ -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)
{
@@ -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();
}
}
}
+15
View File
@@ -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))
{
}
}
}
+30
View File
@@ -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<byte[]> GenerateImages(this IDocument document)
{
return DocumentGenerator.GenerateImages(document);
@@ -47,5 +75,7 @@ namespace QuestPDF.Fluent
index++;
}
}
#endregion
}
}