|
VectSharp 2.6.1
A light library for C# vector graphics
|
Full documentation with interactive examples
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 Pages, drawing to the Pages' 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 Pages.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!