実現したいこと
.NetでSVG⇒EMFの変換を、配置とかきちんとでしたいです。
inkscapeを使えば出来るのはわかっていますが
外部アプリには頼りたくない思いがあります。
でも、SVGを読み解いてまでする力もありません。
外部ライブラリでどうにかならないかと考えています。
該当のソースコード
VB.Net
1 2Imports System.Drawing 3Imports System.Drawing.Imaging 4Imports System.IO 5Imports Svg 6 7Public Class Form1 8 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 9 Dim tSvgDocument As SvgDocument = Svg.SvgDocument.Open("F:\study\gomi\SVGアイコン.svg") 10 11 Dim gra As Graphics = CreateGraphics() 12 Dim ipHdc As IntPtr = gra.GetHdc() 13 Dim metafile2 As Metafile 14 15 metafile2 = New Metafile("F:\study\gomi\SVGアイコン.emf", ipHdc, New Rectangle(0, 0, CInt(tSvgDocument.Width.Value), CInt(tSvgDocument.Height.Value)), MetafileFrameUnit.Point, EmfType.EmfPlusOnly) 16 17 Dim g As Graphics = Graphics.FromImage(metafile2) 18 tSvgDocument.Draw(g) 19 g.Dispose() 20 metafile2.Dispose() 21 gra.ReleaseHdc(ipHdc) 22 23 End Sub 24 25 Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 26 Dim tSvgDocument As SvgDocument = Svg.SvgDocument.Open("F:\study\gomi\SVGアイコン.svg") 27 Dim gra As Graphics = CreateGraphics() 28 Dim ipHdc As IntPtr = gra.GetHdc() 29 30 Dim stream As MemoryStream = New MemoryStream() 31 Dim metafile As Metafile 32 metafile = New Metafile(stream, ipHdc, EmfType.EmfPlusOnly) 33 Dim g2 As Graphics = Graphics.FromImage(metafile) 34 tSvgDocument.Draw(g2) 35 36 g2.Dispose() 37 metafile.Dispose() 38 gra.ReleaseHdc(ipHdc) 39 gra.Dispose() 40 41 Using fs As FileStream = New FileStream("F:\study\gomi\SVGアイコン2.emf", FileMode.Create) 42 stream.WriteTo(fs) 43 End Using 44 stream.Dispose() 45 End Sub 46End Class 47
SVGはNugetで取得しました。
起こっている問題
今のままだと配置や余白が正しく出力できません。
補足情報(FW/ツールのバージョンなど)
VB.Net(.Net Framework)
SVG 3.4.4

あなたの回答
tips
プレビュー