MarcinZiabek 3 years ago
parent
commit
a14e9ca61f

+ 1 - 1
QuestPDF.Examples/QuestPDF.Examples.csproj

@@ -11,7 +11,7 @@
         <PackageReference Include="nunit" Version="3.13.2" />
         <PackageReference Include="nunit" Version="3.13.2" />
         <PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
         <PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
-        <PackageReference Include="SkiaSharp" Version="2.80.3" />
+        <PackageReference Include="SkiaSharp" Version="2.80.4" />
         <PackageReference Include="Svg.Skia" Version="0.5.10" />
         <PackageReference Include="Svg.Skia" Version="0.5.10" />
     </ItemGroup>
     </ItemGroup>
 
 

+ 50 - 0
QuestPDF.Examples/TextExamples.cs

@@ -567,5 +567,55 @@ namespace QuestPDF.Examples
                     });
                     });
                 });
                 });
         }
         }
+        
+        [Test]
+        public void TextShaping_Unicode()
+        {
+            RenderingTest
+                .Create()
+                .PageSize(600, 100)
+                
+                .ProduceImages()
+                .ShowResults()
+                .Render(container =>
+                {
+                    container
+                        .Padding(35)
+                        .MinimalBox()
+                        .Background(Colors.Grey.Lighten2)
+                        .Text(text =>
+                        {
+                            text.DefaultTextStyle(TextStyle.Default.FontSize(20));
+                            
+                            text.Span("Complex Unicode structure: ");
+                            
+                            
+                            text.Span("T̶̖̔͆͆̽̔ḩ̷̼̫̐̈́̀͜͝͝ì̶͇̤͓̱̣͇͓͉̎s̵̡̟̹͍̜͉̗̾͛̈̐́͋͂͝͠ͅ ̴̨͙͍͇̭̒͗̀́͝ì̷̡̺͉̼̏̏̉̌͝s̷͍͙̗̰̖͙̈̑̂̔͑͊̌̓̊̇͜ ̶̛̼͚͊̅͘ṭ̷̨̘̣̙̖͉͌̏̂̅͑̄̽̕͝ȅ̶̲̲̙̭͈̬̣͔̝͔̈́͝s̸̢̯̪̫͓̭̮̓̀͆͜ț̸̢͉̞̥̤̏̌̓͝").FontColor(Colors.Red.Medium);
+                            
+                            
+                            text.Span(".");
+                        });
+                });
+        }
+        
+        [Test]
+        public void TextShaping_Arabic()
+        {
+            RenderingTest
+                .Create()
+                .PageSize(500, 100)
+                
+                .ProduceImages()
+                .ShowResults()
+                .Render(container =>
+                {
+                    container
+                        .Padding(25)
+                        .MinimalBox()
+                        .Background(Colors.Grey.Lighten2)
+                        .Text("ينا الألم. في بعض الأحيان ونظراً للالتزامات التي يفرضها علينا")
+                        .FontSize(20);
+                });
+        }
     }
     }
 }
 }

+ 0 - 79
QuestPDF.Examples/TextShapingTests.cs

@@ -1,79 +0,0 @@
-using NUnit.Framework;
-using QuestPDF.Examples.Engine;
-using QuestPDF.Fluent;
-using SkiaSharp;
-using SkiaSharp.HarfBuzz;
-
-namespace QuestPDF.Examples
-{
-    public class TextShapingTests
-    {
-        // [Test]
-        // public void ShapeText()
-        // {
-        //     using var textPaint = new SKPaint
-        //     {
-        //         Color = SKColors.Black,
-        //         Typeface = SKTypeface.CreateDefault(),
-        //         IsAntialias = true,
-        //         TextSize = 20
-        //     };
-        //
-        //     using var backgroundPaint = new SKPaint
-        //     {
-        //         Color = SKColors.LightGray
-        //     };
-        //
-        //     RenderingTest
-        //         .Create()
-        //         .PageSize(550, 250)
-        //         .ProduceImages()
-        //         .ShowResults()
-        //         .Render(container =>
-        //         {
-        //             //var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec odio ipsum, aliquam a neque a, lacinia vehicula lectus.";
-        //             //var arabic = "ينا الألم. في بعض الأحيان ونظراً للالتزامات التي يفرضها علينا الواجب والعمل سنتنازل غالباً ونرفض الشعور";
-        //
-        //             var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
-        //             var arabic = "ينا الألم. في بعض الأحيان ونظراً للالتزامات التي يفرضها علينا";
-        //
-        //             var text = arabic;
-        //             var metrics = textPaint.FontMetrics;
-        //
-        //             container
-        //                 .Padding(25)
-        //                 .Canvas((canvas, space) =>
-        //                 {
-        //                     canvas.Translate(0, 20);
-        //
-        //                     var width = MeasureText(text, textPaint);
-        //                     var widthReal = textPaint.MeasureText(text);
-        //                     canvas.DrawRect(0, metrics.Descent, width, metrics.Ascent - metrics.Descent, backgroundPaint);
-        //
-        //                     canvas.DrawShapedText(text, 0, 0, textPaint);
-        //
-        //                     canvas.Translate(0, 40);
-        //                     canvas.DrawText(text, 0, 0, textPaint);
-        //                 });
-        //         });
-        // }
-
-        [Test]
-        public void MeasureTest()
-        {
-            using var textPaint = new SKPaint
-            {
-                Color = SKColors.Black,
-                Typeface = SKTypeface.CreateDefault(),
-                IsAntialias = true,
-                TextSize = 20
-            };
-            
-            var lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec odio ipsum, aliquam a neque a, lacinia vehicula lectus.";
-            var arabic = "ينا الألم. في بعض الأحيان ونظراً للالتزامات التي يفرضها علينا";
-            //            012345678901234567890123456789012345678901234567890123456
-            var shaper = new SKShaper(textPaint.Typeface);
-            var result = shaper.Shape(lorem, textPaint);
-        } 
-    }
-}

+ 2 - 1
QuestPDF.Previewer/QuestPDF.Previewer.csproj

@@ -48,7 +48,8 @@
         <PackageReference Include="Avalonia.Markup.Xaml.Loader" Version="0.10.10" />
         <PackageReference Include="Avalonia.Markup.Xaml.Loader" Version="0.10.10" />
         <PackageReference Include="Avalonia.ReactiveUI" Version="0.10.10" />
         <PackageReference Include="Avalonia.ReactiveUI" Version="0.10.10" />
         <PackageReference Include="ReactiveUI" Version="17.1.50" />
         <PackageReference Include="ReactiveUI" Version="17.1.50" />
+        <PackageReference Include="SkiaSharp.NativeAssets.Linux.NoDependencies" Version="2.80.4" />
         <PackageReference Include="System.Reactive" Version="5.0.0" />
         <PackageReference Include="System.Reactive" Version="5.0.0" />
-        <PackageReference Include="SkiaSharp" Version="2.80.3" />
+        <PackageReference Include="SkiaSharp" Version="2.80.4" />
     </ItemGroup>
     </ItemGroup>
 </Project>
 </Project>

+ 1 - 1
QuestPDF.ReportSample/QuestPDF.ReportSample.csproj

@@ -12,7 +12,7 @@
         <PackageReference Include="nunit" Version="3.13.2" />
         <PackageReference Include="nunit" Version="3.13.2" />
         <PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
         <PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
-        <PackageReference Include="SkiaSharp" Version="2.80.3" />
+        <PackageReference Include="SkiaSharp" Version="2.80.4" />
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>

+ 1 - 1
QuestPDF.UnitTests/QuestPDF.UnitTests.csproj

@@ -10,7 +10,7 @@
         <PackageReference Include="nunit" Version="3.13.2" />
         <PackageReference Include="nunit" Version="3.13.2" />
         <PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
         <PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.0" />
         <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.7.0" />
-        <PackageReference Include="SkiaSharp" Version="2.80.3" />
+        <PackageReference Include="SkiaSharp" Version="2.80.4" />
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>

+ 3 - 3
QuestPDF/QuestPDF.csproj

@@ -3,7 +3,7 @@
         <Authors>MarcinZiabek</Authors>
         <Authors>MarcinZiabek</Authors>
         <Company>CodeFlint</Company>
         <Company>CodeFlint</Company>
         <PackageId>QuestPDF</PackageId>
         <PackageId>QuestPDF</PackageId>
-        <Version>2022.6.0-prerelease</Version>
+        <Version>2022.6.0</Version>
         <PackageDescription>QuestPDF is an open-source, modern and battle-tested library that can help you with generating PDF documents by offering friendly, discoverable and predictable C# fluent API.</PackageDescription>
         <PackageDescription>QuestPDF is an open-source, modern and battle-tested library that can help you with generating PDF documents by offering friendly, discoverable and predictable C# fluent API.</PackageDescription>
         <PackageReleaseNotes>$([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)/Resources/ReleaseNotes.txt"))</PackageReleaseNotes>
         <PackageReleaseNotes>$([System.IO.File]::ReadAllText("$(MSBuildProjectDirectory)/Resources/ReleaseNotes.txt"))</PackageReleaseNotes>
         <LangVersion>9</LangVersion>
         <LangVersion>9</LangVersion>
@@ -23,8 +23,8 @@
     </PropertyGroup>
     </PropertyGroup>
 
 
     <ItemGroup>
     <ItemGroup>
-      <PackageReference Include="SkiaSharp" Version="2.80.3" />
-      <PackageReference Include="SkiaSharp.HarfBuzz" Version="2.80.3" />
+      <PackageReference Include="SkiaSharp" Version="2.80.4" />
+      <PackageReference Include="SkiaSharp.HarfBuzz" Version="2.80.4" />
     </ItemGroup>
     </ItemGroup>
 
 
     <ItemGroup>
     <ItemGroup>

+ 8 - 3
QuestPDF/Resources/ReleaseNotes.txt

@@ -1,4 +1,9 @@
-Implemented support for the text shaping algorithm that fixes rendering more advanced languages such as Arabic. 
-Improved exception message when SkiaSharp throws the TypeInitializationException (when additional dependencies are needed).
-Fixed: a rare case when the Row.AutoItem does not calculate properly the width of its content.
+Integrated the text-shaping algorithm. This change significantly improves the Unicode compatibility. Also, it extends support for more advanced languages (e.g. Arabic) that:
+1) Combine multiple text characters and display them as a single visual glyph.
+2) Are displayed in the right-to-left order. 
+
+Improved the exception message when SkiaSharp throws the TypeInitializationException. On some operating systems, SkiaSharp requires additional dependencies installed as nuget packages. This change should help developers determine how to choose and install them correctly. 
+
+Fixed: a rare case when the Row.AutoItem() does not correctly calculate the width of its content. 
+
 Fixed: the QuestPDF Previewer does not work with content-rich documents.
 Fixed: the QuestPDF Previewer does not work with content-rich documents.

+ 1 - 1
readme.md

@@ -59,7 +59,7 @@ Install-Package QuestPDF
 dotnet add package QuestPDF
 dotnet add package QuestPDF
 
 
 // Package reference in .csproj file
 // Package reference in .csproj file
-<PackageReference Include="QuestPDF" Version="2022.5.0" />
+<PackageReference Include="QuestPDF" Version="2022.6.0" />
 ```
 ```
 
 
 [![Nuget version](https://img.shields.io/badge/package%20details-QuestPDF-blue?logo=nuget)](https://www.nuget.org/packages/QuestPDF/)
 [![Nuget version](https://img.shields.io/badge/package%20details-QuestPDF-blue?logo=nuget)](https://www.nuget.org/packages/QuestPDF/)