Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions SharpDocx/DocumentBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
#if SUPPORT_MULTI_THREADING_AND_LARGE_DOCUMENTS_IN_NET35
using System.Threading;
#endif
Expand All @@ -14,6 +18,8 @@
using SharpDocx.Extensions;
using SharpImage;

using Svg;

namespace SharpDocx
{
public abstract class DocumentBase
Expand Down Expand Up @@ -307,6 +313,37 @@ protected void ImageFromUrl(string url, int percentage = 100, string extension =
}
}

protected void ImageFromSvgXml(XmlDocument xml, int pixelWidth, int pixelHeight, int percentage = 100, string extension = null)
{
var svg = SvgDocument.Open(xml);
var svgStream = new MemoryStream();
var bitmap = svg.Draw(pixelWidth, pixelHeight);
bitmap.Save(svgStream, ImageFormat.Png);
ImageFromStream(svgStream, percentage, extension);
}

protected void ImageFromBase64Svg(string base64, int pixelWidth, int pixelHeight, int percentage = 100, string extension = null)
{
ImageFromSvg(Encoding.UTF8.GetString(Convert.FromBase64String(base64)), pixelWidth, pixelHeight, percentage, extension);
}

protected void ImageFromSvg(string svgXmlString, int pixelWidth, int pixelHeight, int percentage = 100, string extension = null)
{
using var svgStream = PngStreamFromSvg(svgXmlString, pixelWidth, pixelHeight);
ImageFromStream(svgStream, percentage, extension);
}

private Stream PngStreamFromSvg(string svgString, int rasterWidth, int rasterHeight)
{
var serializer = new XmlSerializer(typeof(XmlDocument));
var res = serializer.Deserialize(new StringReader(svgString)) as XmlDocument;
var svg = SvgDocument.Open(res);
var svgStream = new MemoryStream();
var bitmap = svg.Draw(rasterWidth, rasterHeight);
bitmap.Save(svgStream, ImageFormat.Png);
return svgStream;
}

protected void ImageFromStream(Stream stream, int percentage = 100, string extension = null)
{
PartTypeInfo imagePartType;
Expand Down
1 change: 1 addition & 0 deletions SharpDocx/SharpDocx.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Svg" Version="3.4.7" />
<ProjectReference Include="..\SharpImage\SharpImage.csproj" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="all" />
<PackageReference Include="DocumentFormat.OpenXml" Version="3.0.2" />
Expand Down