[高端猫先生设计] .net – 为我的用户组获得发言人的最佳方式是什么?

Home > 动态 > 资讯动态 > [高端猫先生设计] .net – 为我的用户组获得发言人的最佳方式是什么?

我们刚在米苏拉州米苏拉开了一个.NET用户组。看到很难让成员发言,但很多人喜欢参加。鼓励参加者成为演讲者的最佳方式是什么?

我们通常每个会议都有两个1小时的演示文稿。

我一直在尝试使用C#将SVG图像转换为PNG,而不必编写太多代码。任何人都可以推荐一个库或示例代码来执行此操作吗?

您可以调用inkscape的命令行版本来执行此操作:

此外还有一个C#SVG渲染引擎,主要用于允许SVG文件在代码复合网络上使用,如果这是你的问题,可以满足你的需求:

使用库(较新版本@GIT,@ NuGet)有一种更简单的方法。这是我的代码

var byteArray = Encoding.ASCII.GetBytes(svgFileContents);
使用(var stream = new MemoryStream(byteArray))
{    var svgDocument = SvgDocument.Open(stream);    
var bitmap = svgDocument.Draw();    
bitmap.Save(path,ImageFormat.Png);}

当我不得不在服务器上栅格化svgs时,我最终使用P / Invoke来调用librsvg函数(你可以从Windows版本的GIMP图像编辑程序中获取dll)。
[DllImport(“kernel32.dll”,SetLastError = true)]static extern bool SetDllDirectory(string pathname);
[DllImport(“libgobject-2.0-0.dll”,SetLastError = true)]static extern void g_type_init();
[DllImport(“librsvg-2-2.dll”,SetLastError = true)]static extern IntPtr rsvg_pixbuf_from_file_at_size(string file_name,int width,int height,out IntPtr error);
[DllImport(“libgdk_pixbuf-2.0-0.dll”,CallingConvention = CallingConvention.Cdecl,CharSet = CharSet.Ansi)]static extern bool gdk_pixbuf_save(IntPtr pixbuf,string filename,string type,out IntPtr error,__ arglist);
public static void RasterizeSvg(string inputFileName,string outputFileName){    bool callSuccessful = SetDllDirectory(“C:\\ Program Files \\ GIMP-2.0 \\ bin”);    
if(!callSuccessful)    
{        抛出新的异常(“无法设置DLL目录”);    
}   
 g_type_init();    
IntPtr错误;    
IntPtr result = rsvg_pixbuf_from_file_at_size(inputFileName,-1,-1,out error);    
if(错误!= IntPtr.Zero)    
{        抛出新的异常(Marshal.ReadInt32(error).ToString());    
}    callSuccessful = gdk_pixbuf_save(result,outputFileName,“png”,out error,__ arglist(null));    
if(!callSuccessful)    {        抛出新的异常(error.ToInt32()。ToString());    
}}

我正在使用Batik。完整的Delphi代码:
过程ExecNewProcess(ProgramName:String; Wait:Boolean);
VAR  StartInfo:TStartupInfo; 
 ProcInfo:TProcessInformation;  
CreateOK:布尔值;
开始  FillChar(StartInfo,SizeOf(TStartupInfo),#0);  
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);  
StartInfo.cb:= SizeOf(TStartupInfo);  
CreateOK:= CreateProcess(nil,PChar(ProgramName),nil,nil,False,              CREATE_NEW_PROCESS_GROUP + NORMAL_PRIORITY_CLASS,              nil,nil,StartInfo,ProcInfo);  
如果CreateOK然后开始    //可能需要也可能不需要。通常等待子进程    如果等等      WaitForSingleObject(ProcInfo.hProcess,INFINITE);  
结束其他    ShowMessage(’无法运行’+ ProgramName);  
CloseHandle的(ProcInfo.hProcess);  
CloseHandle的(ProcInfo.hThread);
结束;
procedure ConvertSVGtoPNG(aFilename:String);
常量  ExecLine =’c:\ windows \ system32 \ java.exe -jar C:\ Apps \ batik-1.7 \ batik-rasterizer.jar’;
开始  ExecNewProcess(ExecLine + aFilename,True);
结束;

要添加@Anish的响应,如果在将SVG导出到图像时遇到没有看到文本的问题,可以创建一个递归函数来循环遍历SVGDocument的子项,尝试将其转换为SvgText,如果可能(添加您自己的错误检查)并设置字体系列和样式。
foreach(svgDocument.Children中的var child)    
{        setfont程序(孩子);    
}    public void SetFont(SvgElement element)    
{        foreach(element中的var child.Children)        
{            setfont程序(孩子); //再次使用子句调用此函数,这将循环                            
//直到元素没有更多子元素        
}        尝试        {            var svgText =(SvgText)parent; //尝试将元素转换为SvgText                                           //如果成功,您可以修改字体            
svgText.Font = new Font(“Arial”,12.0f);            
svgText.FontSize = new SvgUnit(12

文章整理:南昌腾创科技猫先生建设

Copyright @ 2010-2016 南昌腾创科技有限公司 版权所有 赣ICP备15004057号