VectSharp 2.5.0
A light library for C# vector graphics
|
VectSharp is a library to create vector graphics (including text) in C#, without too many dependencies.
VectSharp is written using .NET Core, and is available for Mac, Windows and Linux. Since version 2.0.0, it is released under an LGPLv3 license. It includes 14 standard fonts, originally released under an ASL-2.0 license.
It includes an abstract layer on top of which output layers can be written. Currently, there are five available output layers:
Avalonia.Controls.Canvas
object (https://avaloniaui.net/docs/controls/canvas) containing the rendered graphics objects.VectSharp.Raster and VectSharp.Raster.ImageSharp are somewhat overlapping, as both of them can be used to create PNG images. However, VectSharp.Raster is much faster, though it only supports the PNG format. Instead, VectSharp.Raster.ImageSharp is slower, but supports more formats and has a more permissive licence. Another difference is that VectSharp.Raster carries a native dependency (through MuPDFCore), while VectSharp.ImageSharp does not.
Furthermore:
Canvas
. VectSharp.MarkdownCanvas uses VectSharp.Markdown to render Markdown documents in Avalonia applications (an example of this is in the MarkdownViewerDemo project).
To include VectSharp in your project, you will need one of the output layer NuGet packages: VectSharp.PDF, VectSharp.Canvas, VectSharp.Raster, VectSharp.Raster.ImageSharp, or VectSharp.SVG. You will need VectSharp.ThreeD to work with 3D graphics or VectSharp.Plots to create plots. You may want the VectSharp.MuPDFUtils package if you wish to manipulate raster images, and the VectSharp.Fonts.Nimbus if you want to restore the GPL-licensed fonts used in previous versions of the library.
You can find detailed documentation for the VectSharp library, including interactive examples, at the documentation website. A comprehensive API reference is also available, both as a website and as a PDF manual.
In general, working with VectSharp involves: creating a Document
, adding Page
s, drawing to the Page
s' Graphics
objects and, finally, exporting them to a PDF document, Canvas
, PNG image or SVG document.
Document
: Page
: Page
's Graphics
object: Canvas
: Canvas
, using a multi-layer, multi-threaded, triple-buffered renderer based on SkiaSharp (which provides the best performance if you wish e.g. to place the canvas within a ZoomBorder
): The public classes and methods are fully documented (with interactive examples created using Blazor), and you can find a (much) more detailed code example in MainWindow.xaml.cs. A detailed guide about 3D graphics in VectSharp.ThreeD is available in the VectSharp.ThreeD
folder. Further example code for animations is available in the DemoAnimation project.
Since version 2.0.0, font names are resolved using a "font library". This is a class that implements the VectSharp.IFontLibrary
interface, providing methods to obtain a FontFamily
object from a string
or a FontFamily.StandardFontFamilies
enumeration. The default font library included in VectSharp uses the embedded fonts (Arimo, Tinos, Cousine) as the standard font families.
In practice, assuming you want to use the default font library, you have the following options to create a FontFamily
object:
These replace the FontFamily(string)
and FontFamily(StandardFontFamilies)
constructors of previous versions of VectSharp. Overloads of this method let you specify a list of "fallback" fonts that will be used if the first font you specify is not available.
If you wish, you can replace the default font library with a different one; this will change the way font families are resolved. For example, after installing the VectSharp.Fonts.Nimbus NuGet package, you can do:
This will let you re-enable the fonts that were used in previous versions of VectSharp.
You can also use multiple font libraries in the same project. Again, assuming you have installed the VectSharp.Fonts.Nimbus NuGet package:
Finally, you can create your own font library class (which could implement things such as dowloading fonts from Google Fonts, or finding them in the user's system font directory...) by creating a class that implements the IFontLibrary
interface or that extends the FontLibrary
class (in this latter case, you get a default implementation for the ResolveFontFamily
overloads that use a list of fallback fonts).
VectSharp can be easily extended to provide additional output layers. To do so:
IGraphicsContext
interface.Page
or Document
types.CopyToIGraphicsContext
method on the Graphics
object of the Page
s.The VectSharp source code includes an example project (VectSharp.Demo) presenting how VectSharp can be used to produce graphics.
To be able to compile VectSharp from source, you will need to install the latest .NET SDK for your operating system.
You can use Microsoft Visual Studio to compile the program. The following instructions will cover compiling VectSharp from the command line, instead.
First of all, you will need to download the VectSharp source code: VectSharp.tar.gz and extract it somewhere.
Open a command-line window in the folder where you have extracted the source code, and type:
BuildDemo <Target>
Where <Target>
can be one of Win-x64
, Linux-x64
or Mac-x64
depending on which platform you wish to generate executables for.
In the Release folder and in the appropriate subfolder for the target platform you selected, you will find the compiled program.
Open a terminal in the folder where you have extracted the source code, and type:
./BuildDemo.sh <Target>
Where <Target>
can be one of Win-x64
, Linux-x64
or Mac-x64
depending on which platform you wish to generate executables for.
In the Release folder and in the appropriate subfolder for the target platform you selected, you will find the compiled program.
If you receive an error about permissions being denied, try typing chmod +x BuildDemo.sh
first.
If you wish to use VectSharp.MuPDFUtils in a .NET Framework project, you will need to manually copy the native MuPDFWrapper library for the platform you are using to the executable directory (this is done automatically if you target .NET core).
One way to obtain the appropriate library files is:
.nupkg
file so that it has a .zip
extension.runtimes/xxx-yyy/native/
folder, where xxx
is either linux
, osx
or win
, depending on the platform you are using, and yyy
is x64
, x86
or arm64
depending on the architecture.Make sure you copy the appropriate file to the same folder as the executable!