Convert SVG to PDF
Convert SVG to PDF
With PDFKit.NET, it is easy to convert Scalable Vector Graphic (SVG) files to PDF. These SVG files usually contain a lot of graphical elements, but very often they also contain text fragments. This, of course, alongside the definitions of the used fonts. This article explains how to use these text and fonts in SVG documents.
First things first, this the code you need to convert a SVG file:
Document doc = new Document();
Page page = new Page(PageSize.A4);
doc.Pages.Add(page);
byte[] svg = File.ReadAllBytes(@"..\..\in.svg");
using (var svgMem = new MemoryStream(svg))
{
SvgShape svgShape = new SvgShape(svgMem);
page.Overlay.Add(svgShape);
}
using (var file = new FileStream(@"..\..\out.pdf", FileMode.Create))
{
doc.Write(file);
}
Dim doc As New Document()
Dim page As New Page(PageSize.A4)
doc.Pages.Add(page)
Dim svg As Byte() = File.ReadAllBytes("..\..\in.svg")
Using svgMem = New MemoryStream(svg)
Dim svgShape As New SvgShape(svgMem)
page.Overlay.Add(svgShape)
End Using
Using file1 = New FileStream("..\..\out.pdf", FileMode.Create)
doc.Write(file1)
End Using
The simple SVG example
Next you need SVG that is read from the file ‘in.svg’ in the code above. In the following SVG example you see two text fragments, each with its own definition of the font and the size.
<svg xmlns="http://www.w3.org/2000/svg"
width="925px"
height="485px">
<text x="16"
y ="32"
style="font-family: 'MS PGothic'; font-size:10pt; font-style:normal;font-weight:normal;"
text-anchor="start"
fill="rgb(0,0,128)">
MS PGothic
</text>
<text x="150"
y="32"
style="font-family: 'MS PGothic'; font-size:10pt; font-style:normal;font-weight:normal;"
text-anchor="start"
fill="rgb(0,0,128)">
スキャン
</text>
</svg>
If you convert this to PDF, then result will look like this:
An SVG example using styles
The previous examples works very well, but as a SVG file may have many text fragments, it is more efficient to define the fonts only once in a style instead. This is what the next example will show, two style definitions that are defined once that may be used often:
<?xml version="1.0" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg"
width="925px"
height="485px">
<style>
.ArialUnicodeMS22 {
font-family: 'Arial Unicode MS';
font-size: 22px;
}
</style>
<style>
.MSGothicRegular{
font-family: 'MS PGothic regular';
font-size: 16px;
}
</style>
<text x="10"
y ="16"
class="ArialUnicodeMS22"
text-anchor="start"
fill="rgb(0,0,128)">
Arial Unicode MS 22
</text>
<text x="250"
y="16"
class="MSGothicRegular"
text-anchor="start"
fill="rgb(0,0,128)">
スキャン
</text>
</svg>
This will give you almost the same result:
Usable fonts
Since pdfkit4.40.0, there is better support for the truetype font collections. In practice this means that, among others, fonts like Meiryo can be used now.