@@ -3,6 +3,7 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\LehrerApp.Templating\LehrerApp.Templating.csproj" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" />
|
||||
<PackageReference Include="PdfPig" />
|
||||
<PackageReference Include="xunit" />
|
||||
<PackageReference Include="xunit.runner.visualstudio"><PrivateAssets>all</PrivateAssets></PackageReference>
|
||||
</ItemGroup>
|
||||
|
||||
@@ -96,6 +96,43 @@ public sealed class TemplatingTests : IDisposable
|
||||
System.Text.Encoding.ASCII.GetString(pdf), @"/Type\s*/Page\b"));
|
||||
}
|
||||
|
||||
// Regression: RenderFlow fensterte Seiten bisher nur über einen SVG-viewBox-Y-Offset, den
|
||||
// QuestPDFs Svg()-Renderer nicht respektiert - dadurch landete auf jeder Folgeseite (nahezu)
|
||||
// der komplette Zeicheninhalt erneut, statt nur des jeweiligen Ausschnitts (siehe Slice() in
|
||||
// QuestTemplateRenderer.DrawingElementRenderer). Prüft per echter PDF-Textextraktion, dass
|
||||
// seitenspezifische Marker nur auf ihrer jeweiligen Seite auftauchen.
|
||||
[Fact]
|
||||
public void FlowDrawBox_ZerschneidetInhaltEchtStattIhnAufFolgeseitenZuWiederholen()
|
||||
{
|
||||
var template = new LoadedTemplate(new TemplateManifest
|
||||
{
|
||||
Placeholders = [new("Marker", PlaceholderType.Drawing, true)],
|
||||
}, new LayoutParser().Parse("PAGE 210 297 mm\nFLOWDRAWBOX 20 20 170 100 $Marker"),
|
||||
new Dictionary<string, byte[]>());
|
||||
var drawing = new DrawingValue(
|
||||
[
|
||||
new DrawStringEx(0, 0, 12, 170, "MARKERTOP", DrawingTextAlignment.AlignLeft, 10),
|
||||
new DrawStringEx(0, 90, 12, 170, "MARKERNEARBOTTOM", DrawingTextAlignment.AlignLeft, 10),
|
||||
new DrawStringEx(0, 105, 12, 170, "MARKERAFTERBOUNDARY", DrawingTextAlignment.AlignLeft, 10),
|
||||
new DrawStringEx(0, 190, 12, 170, "MARKERBOTTOM", DrawingTextAlignment.AlignLeft, 10),
|
||||
], 200);
|
||||
|
||||
var pdf = new QuestTemplateRenderer().RenderToPdf(template,
|
||||
new DictionaryProvider(new Dictionary<string, PlaceholderValue> { ["Marker"] = drawing }));
|
||||
using var document = UglyToad.PdfPig.PdfDocument.Open(pdf);
|
||||
var pages = document.GetPages().Select(p => p.Text).ToList();
|
||||
|
||||
Assert.Equal(2, pages.Count);
|
||||
Assert.Contains("MARKERTOP", pages[0]);
|
||||
Assert.Contains("MARKERNEARBOTTOM", pages[0]);
|
||||
Assert.DoesNotContain("MARKERAFTERBOUNDARY", pages[0]);
|
||||
Assert.DoesNotContain("MARKERBOTTOM", pages[0]);
|
||||
Assert.DoesNotContain("MARKERTOP", pages[1]);
|
||||
Assert.DoesNotContain("MARKERNEARBOTTOM", pages[1]);
|
||||
Assert.Contains("MARKERAFTERBOUNDARY", pages[1]);
|
||||
Assert.Contains("MARKERBOTTOM", pages[1]);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FlowDrawBox_PaginertHohenDeklarativenZeichenraum()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user