diff --git a/readme.md b/readme.md index 4ffffde..c6a1b5e 100644 --- a/readme.md +++ b/readme.md @@ -55,6 +55,29 @@ Other [compares](https://github.com/VerifyTests/Verify/blob/main/docs/comparer.m * https://github.com/VerifyTests/Verify.ImageSharp.Compare +### Outputs + +`Initialize` accepts an optional `QuestPdfOutputs` to control which outputs a document is split into: + + * `Png`: render each page to a png. When omitted, pages are not rasterized at all. + * `All`: the default. + +The pdf target is not controlled by this setting. Use `VerifierSettings.ExcludeTargets("pdf")` to exclude it. + + + +```cs +[ModuleInitializer] +public static void Init() +{ + QuestPDF.Settings.License = LicenseType.Community; + // Skip rendering pages to png + VerifyQuestPdf.Initialize(QuestPdfOutputs.None); +} +``` +snippet source | anchor + + ### Code that generates a document diff --git a/src/Directory.Build.props b/src/Directory.Build.props index ce04e0a..a9613cd 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ CS1591;CS0649;NU1608;NU1109 - 2.9.0 + 2.10.0 1.0.0 preview enable diff --git a/src/StaticSettingsTests/ModuleInitializer.cs b/src/StaticSettingsTests/ModuleInitializer.cs new file mode 100644 index 0000000..ee60645 --- /dev/null +++ b/src/StaticSettingsTests/ModuleInitializer.cs @@ -0,0 +1,14 @@ +public static class ModuleInitializer +{ + #region InitializeOutputs + + [ModuleInitializer] + public static void Init() + { + QuestPDF.Settings.License = LicenseType.Community; + // Skip rendering pages to png + VerifyQuestPdf.Initialize(QuestPdfOutputs.None); + } + + #endregion +} diff --git a/src/StaticSettingsTests/StaticSettingsTests.csproj b/src/StaticSettingsTests/StaticSettingsTests.csproj new file mode 100644 index 0000000..b2f2689 --- /dev/null +++ b/src/StaticSettingsTests/StaticSettingsTests.csproj @@ -0,0 +1,18 @@ + + + net10.0 + Exe + + + + + + + + + + + + + + diff --git a/src/StaticSettingsTests/Tests.VerifyDocument.verified.pdf b/src/StaticSettingsTests/Tests.VerifyDocument.verified.pdf new file mode 100644 index 0000000..c914dfa Binary files /dev/null and b/src/StaticSettingsTests/Tests.VerifyDocument.verified.pdf differ diff --git a/src/StaticSettingsTests/Tests.VerifyDocument.verified.txt b/src/StaticSettingsTests/Tests.VerifyDocument.verified.txt new file mode 100644 index 0000000..2de2447 --- /dev/null +++ b/src/StaticSettingsTests/Tests.VerifyDocument.verified.txt @@ -0,0 +1,10 @@ +{ + Pages: 2, + Settings: { + ContentDirection: LeftToRight, + PDFA_Conformance: None, + PDFUA_Conformance: None, + ImageCompressionQuality: High, + ImageRasterDpi: 288 + } +} \ No newline at end of file diff --git a/src/StaticSettingsTests/Tests.cs b/src/StaticSettingsTests/Tests.cs new file mode 100644 index 0000000..da22713 --- /dev/null +++ b/src/StaticSettingsTests/Tests.cs @@ -0,0 +1,22 @@ +public class Tests +{ + [Test] + public Task VerifyDocument() + { + var document = Document.Create(container => + { + container.Page(AddPage); + container.Page(AddPage); + }); + return Verify(document); + } + + static void AddPage(PageDescriptor page) + { + page.Size(PageSizes.A5); + page.Margin(1, Unit.Centimetre); + page.DefaultTextStyle(_ => _.FontSize(20)); + page.Content() + .Text("Hello World"); + } +} diff --git a/src/Verify.QuestPDF.slnx b/src/Verify.QuestPDF.slnx index d1693f7..00bd92c 100644 --- a/src/Verify.QuestPDF.slnx +++ b/src/Verify.QuestPDF.slnx @@ -10,6 +10,7 @@ + \ No newline at end of file diff --git a/src/Verify.QuestPDF/QuestPdfOutputs.cs b/src/Verify.QuestPDF/QuestPdfOutputs.cs new file mode 100644 index 0000000..2fe687a --- /dev/null +++ b/src/Verify.QuestPDF/QuestPdfOutputs.cs @@ -0,0 +1,25 @@ +namespace VerifyTests; + +/// +/// Controls which outputs a QuestPDF document is split into when verified. +/// The pdf target is not controlled here; use VerifierSettings.ExcludeTargets("pdf") for that. +/// +[Flags] +public enum QuestPdfOutputs +{ + /// + /// No outputs. Only the source document (and info) is emitted. + /// + None = 0, + + /// + /// Render each page to a png target. + /// When omitted, page images are not rendered at all. + /// + Png = 1, + + /// + /// All outputs. + /// + All = Png +} diff --git a/src/Verify.QuestPDF/VerifyQuestPdf.cs b/src/Verify.QuestPDF/VerifyQuestPdf.cs index 3b8ace7..c7a4016 100644 --- a/src/Verify.QuestPDF/VerifyQuestPdf.cs +++ b/src/Verify.QuestPDF/VerifyQuestPdf.cs @@ -6,7 +6,10 @@ public static class VerifyQuestPdf public static bool Initialized { get; private set; } - public static void Initialize() + static QuestPdfOutputs outputs = QuestPdfOutputs.All; + + /// Which outputs a document is split into. Defaults to . + public static void Initialize(QuestPdfOutputs outputs = QuestPdfOutputs.All) { if (Initialized) { @@ -14,6 +17,7 @@ public static void Initialize() } Initialized = true; + VerifyQuestPdf.outputs = outputs; InnerVerifier.ThrowIfVerifyHasBeenRun(); VerifierSettings @@ -26,7 +30,21 @@ public static void Initialize() VerifierSettings.RegisterFileConverter( conversion: (document, settings) => { - var pages = document.GenerateImages().ToList(); + var includePng = outputs.HasFlag(QuestPdfOutputs.Png); + // Rasterizing pages is expensive, so only do it when png output is enabled. + // Otherwise the page count comes from the much cheaper vector svg generation. + List pages = []; + int pageCount; + if (includePng) + { + pages = document.GenerateImages().ToList(); + pageCount = pages.Count; + } + else + { + pageCount = document.GenerateSvg().Count; + } + if (!settings.GetPagesToInclude(out var pagesToInclude)) { pagesToInclude = _ => true; @@ -73,7 +91,7 @@ public static void Initialize() return new( info: new { - Pages = pages.Count, + Pages = pageCount, Metadata = NullIfEmpty(metadata), Settings = document.GetSettings(), },