Browse Source

Changed default library font from Calibry to Lato. This font is also included with the library

MarcinZiabek 3 years ago
parent
commit
71e2743409

+ 3 - 3
QuestPDF.ReportSample/Typography.cs

@@ -6,8 +6,8 @@ namespace QuestPDF.ReportSample
 {
 {
     public static class Typography
     public static class Typography
     {
     {
-        public static TextStyle Title => TextStyle.Default.FontFamily(Fonts.Calibri).FontColor(Colors.Blue.Darken3).FontSize(26).Black();
-        public static TextStyle Headline => TextStyle.Default.FontFamily(Fonts.Calibri).FontColor(Colors.Blue.Medium).FontSize(16).SemiBold();
-        public static TextStyle Normal => TextStyle.Default.FontFamily(Fonts.Verdana).FontColor(Colors.Black).FontSize(10).LineHeight(1.2f);
+        public static TextStyle Title => TextStyle.Default.FontFamily(Fonts.Lato).FontColor(Colors.Blue.Darken3).FontSize(26).Black();
+        public static TextStyle Headline => TextStyle.Default.FontFamily(Fonts.Lato).FontColor(Colors.Blue.Medium).FontSize(16).SemiBold();
+        public static TextStyle Normal => TextStyle.Default.FontFamily(Fonts.Lato).FontColor(Colors.Black).FontSize(10).LineHeight(1.2f);
     }
     }
 }
 }

+ 40 - 1
QuestPDF/Drawing/FontManager.cs

@@ -1,7 +1,9 @@
 using System;
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Concurrent;
+using System.Collections.Generic;
 using System.IO;
 using System.IO;
 using System.Linq;
 using System.Linq;
+using System.Reflection;
 using HarfBuzzSharp;
 using HarfBuzzSharp;
 using QuestPDF.Fluent;
 using QuestPDF.Fluent;
 using QuestPDF.Infrastructure;
 using QuestPDF.Infrastructure;
@@ -20,6 +22,11 @@ namespace QuestPDF.Drawing
         private static ConcurrentDictionary<object, SKFont> Fonts = new();
         private static ConcurrentDictionary<object, SKFont> Fonts = new();
         private static ConcurrentDictionary<object, TextShaper> TextShapers = new();
         private static ConcurrentDictionary<object, TextShaper> TextShapers = new();
 
 
+        static FontManager()
+        {
+            RegisterLibraryDefaultFonts();
+        }
+        
         private static void RegisterFontType(SKData fontData, string? customName = null)
         private static void RegisterFontType(SKData fontData, string? customName = null)
         {
         {
             foreach (var index in Enumerable.Range(0, 256))
             foreach (var index in Enumerable.Range(0, 256))
@@ -49,6 +56,38 @@ namespace QuestPDF.Drawing
             using var fontData = SKData.Create(stream);
             using var fontData = SKData.Create(stream);
             RegisterFontType(fontData);
             RegisterFontType(fontData);
         }
         }
+        
+        public static void RegisterFontFromEmbeddedResource(string pathName)
+        {
+            using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(pathName);
+            RegisterFont(stream);
+        }
+        
+        private static void RegisterLibraryDefaultFonts()
+        {
+            var fontFileNames = new[]
+            {
+                "Lato-Black.ttf",
+                "Lato-BlackItalic.ttf",
+                
+                "Lato-Bold.ttf",
+                "Lato-BoldItalic.ttf",
+                
+                "Lato-Regular.ttf",
+                "Lato-Italic.ttf",
+                
+                "Lato-Light.ttf",
+                "Lato-LightItalic.ttf",
+                
+                "Lato-Thin.ttf",
+                "Lato-ThinItalic.ttf"
+            };
+            
+            fontFileNames
+                .Select(x => $"QuestPDF.Resources.DefaultFont.{x}")
+                .ToList()
+                .ForEach(RegisterFontFromEmbeddedResource);
+        }
 
 
         internal static SKPaint ColorToPaint(this string color)
         internal static SKPaint ColorToPaint(this string color)
         {
         {
@@ -156,7 +195,7 @@ namespace QuestPDF.Drawing
             return TextShapers.GetOrAdd(style.PaintKey, _ => new TextShaper(style));
             return TextShapers.GetOrAdd(style.PaintKey, _ => new TextShaper(style));
         }
         }
         
         
-        internal static SKFont FoFont(this TextStyle style)
+        internal static SKFont ToFont(this TextStyle style)
         {
         {
             return Fonts.GetOrAdd(style.PaintKey, _ => style.ToPaint().ToFont());
             return Fonts.GetOrAdd(style.PaintKey, _ => style.ToPaint().ToFont());
         }
         }

+ 1 - 1
QuestPDF/Drawing/TextShaper.cs

@@ -132,7 +132,7 @@ namespace QuestPDF.Drawing
             
             
             using var skTextBlobBuilder = new SKTextBlobBuilder();
             using var skTextBlobBuilder = new SKTextBlobBuilder();
             
             
-            var positionedRunBuffer = skTextBlobBuilder.AllocatePositionedRun(textStyle.FoFont(), endIndex - startIndex + 1);
+            var positionedRunBuffer = skTextBlobBuilder.AllocatePositionedRun(textStyle.ToFont(), endIndex - startIndex + 1);
             var glyphSpan = positionedRunBuffer.GetGlyphSpan();
             var glyphSpan = positionedRunBuffer.GetGlyphSpan();
             var positionSpan = positionedRunBuffer.GetPositionSpan();
             var positionSpan = positionedRunBuffer.GetPositionSpan();
                 
                 

+ 1 - 0
QuestPDF/Helpers/Fonts.cs

@@ -13,6 +13,7 @@
         public const string CourierNew = "Courier New";
         public const string CourierNew = "Courier New";
         public const string Georgia = "Georgia";
         public const string Georgia = "Georgia";
         public const string Impact = "Impact";
         public const string Impact = "Impact";
+        public const string Lato = "Lato";
         public const string LucidaConsole = "Lucida Console";
         public const string LucidaConsole = "Lucida Console";
         public const string SegoeSD = "Segoe SD";
         public const string SegoeSD = "Segoe SD";
         public const string SegoeUI = "Segoe UI";
         public const string SegoeUI = "Segoe UI";

+ 1 - 1
QuestPDF/Infrastructure/TextStyle.cs

@@ -26,7 +26,7 @@ namespace QuestPDF.Infrastructure
         {
         {
             Color = Colors.Black,
             Color = Colors.Black,
             BackgroundColor = Colors.Transparent,
             BackgroundColor = Colors.Transparent,
-            FontFamily = Fonts.Calibri,
+            FontFamily = Fonts.Lato,
             Size = 12,
             Size = 12,
             LineHeight = 1.2f,
             LineHeight = 1.2f,
             FontWeight = Infrastructure.FontWeight.Normal,
             FontWeight = Infrastructure.FontWeight.Normal,

+ 20 - 0
QuestPDF/QuestPDF.csproj

@@ -44,5 +44,25 @@
         <Visible>false</Visible>
         <Visible>false</Visible>
         <PackagePath>\</PackagePath>
         <PackagePath>\</PackagePath>
       </None>
       </None>
+      <None Remove="Resources\DefaultFont\Lato-Black.ttf" />
+      <EmbeddedResource Include="Resources\DefaultFont\Lato-Black.ttf" />
+      <None Remove="Resources\DefaultFont\Lato-BlackItalic.ttf" />
+      <EmbeddedResource Include="Resources\DefaultFont\Lato-BlackItalic.ttf" />
+      <None Remove="Resources\DefaultFont\Lato-Bold.ttf" />
+      <EmbeddedResource Include="Resources\DefaultFont\Lato-Bold.ttf" />
+      <None Remove="Resources\DefaultFont\Lato-BoldItalic.ttf" />
+      <EmbeddedResource Include="Resources\DefaultFont\Lato-BoldItalic.ttf" />
+      <None Remove="Resources\DefaultFont\Lato-Italic.ttf" />
+      <EmbeddedResource Include="Resources\DefaultFont\Lato-Italic.ttf" />
+      <None Remove="Resources\DefaultFont\Lato-Light.ttf" />
+      <EmbeddedResource Include="Resources\DefaultFont\Lato-Light.ttf" />
+      <None Remove="Resources\DefaultFont\Lato-LightItalic.ttf" />
+      <EmbeddedResource Include="Resources\DefaultFont\Lato-LightItalic.ttf" />
+      <None Remove="Resources\DefaultFont\Lato-Regular.ttf" />
+      <EmbeddedResource Include="Resources\DefaultFont\Lato-Regular.ttf" />
+      <None Remove="Resources\DefaultFont\Lato-Thin.ttf" />
+      <EmbeddedResource Include="Resources\DefaultFont\Lato-Thin.ttf" />
+      <None Remove="Resources\DefaultFont\Lato-ThinItalic.ttf" />
+      <EmbeddedResource Include="Resources\DefaultFont\Lato-ThinItalic.ttf" />
     </ItemGroup>
     </ItemGroup>
 </Project>
 </Project>

BIN
QuestPDF/Resources/DefaultFont/Lato-Black.ttf


BIN
QuestPDF/Resources/DefaultFont/Lato-BlackItalic.ttf


BIN
QuestPDF/Resources/DefaultFont/Lato-Bold.ttf


BIN
QuestPDF/Resources/DefaultFont/Lato-BoldItalic.ttf


BIN
QuestPDF/Resources/DefaultFont/Lato-Italic.ttf


BIN
QuestPDF/Resources/DefaultFont/Lato-Light.ttf


BIN
QuestPDF/Resources/DefaultFont/Lato-LightItalic.ttf


BIN
QuestPDF/Resources/DefaultFont/Lato-Regular.ttf


BIN
QuestPDF/Resources/DefaultFont/Lato-Thin.ttf


BIN
QuestPDF/Resources/DefaultFont/Lato-ThinItalic.ttf


+ 93 - 0
QuestPDF/Resources/DefaultFont/OFL.txt

@@ -0,0 +1,93 @@
+Copyright (c) 2010-2014 by tyPoland Lukasz Dziedzic ([email protected]) with Reserved Font Name "Lato"
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded, 
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.