2014-10-01 5 views
5

확실히 SVG를 EMF로 변환 할 수 있습니다 (예 : this website). C#에서이 변환을 수행 할 수 있는지 궁금합니다.SVG 파일을 C#에서 EMF 파일로 변환하는 방법


이 업데이트 :

내가 SVG.NET를 사용하여 SVG 파일을 읽고 Graphics 객체에 그리는 시도, 다음 EMF의 확장에 메타 파일로 내보내기 Image 시도 (내가 여기 지시에 따라 : GDI+/C#: How to save an image as EMF?). 읽기가 성공적으로 완료되었으며 이미지가 .emf로 내보내집니다. 그러나 PowerPoint에서 해당 .emf를 열면 그룹화를 해제 할 수 없으므로 해당 파일의 드로잉 정보가 실제로 올바르게 버려지지 않았 음을 나타냅니다.

업데이트 2 :

가 지금은 그룹 해제-수 .EMF을 수출 않지만, 그룹 해제가 정말 가난한 결과를 보여줍니다. 다음 코드를 사용하여 .emf를 생성했습니다.

private void OpenPictureButtonClick(object sender, EventArgs e) 
{ 
    var openFileDialog = new OpenFileDialog(); 
    openFileDialog.ShowDialog(); 

    _svgDoc = SvgDocument.Open(openFileDialog.FileName); 

    RenderSvg(_svgDoc); 
} 

private void SavePictureClick(object sender, EventArgs e) 
{ 
    var saveFileDialog = new SaveFileDialog {Filter = "Enhanced Meta File | *.Emf"}; 
    saveFileDialog.ShowDialog(); 

    var path = saveFileDialog.FileName; 
    var graphics = CreateGraphics(); 
    var img = new Metafile(path, graphics.GetHdc()); 
    var ig = Graphics.FromImage(img); 

    _svgDoc.Draw(ig); 

    ig.Dispose(); img.Dispose(); graphics.ReleaseHdc(); graphics.Dispose(); 
} 

private void RenderSvg(SvgDocument svgDoc) 
{ 
    svgImageBox.Image = svgDoc.Draw(); 
} 

답변

6

동일한 문제가 있지만 검색 결과가 없습니다.
마침내 나는 내 자신의 간단한 솔루션으로 끝났다. 나는 SVG.NET을 사용했다.

public static byte[] ConvertToEmf(string svgImage) 
{ 
    string emfTempPath = Path.GetTempFileName(); 
    try 
    { 
     var svg = SvgDocument.FromSvg<SvgDocument>(svgImage); 
     using (Graphics bufferGraphics = Graphics.FromHwndInternal(IntPtr.Zero)) 
     { 
      using (var metafile = new Metafile(emfTempPath, bufferGraphics.GetHdc())) 
      { 
       using (Graphics graphics = Graphics.FromImage(metafile)) 
       { 
        svg.Draw(graphics); 
       } 
      } 
     } 

     return File.ReadAllBytes(emfTempPath); 
    } 
    finally 
    { 
     File.Delete(emfTempPath); 
    } 
} 

처음에는 임시 파일을 만듭니다. 그런 다음 emf를 저장하려면 Draw(Graphics) 메서드를 사용합니다. 그리고 마지막으로 임시 파일에서 바이트를 읽습니다.
MetafileMemoryStream을 사용하지 마십시오. 불행히도 작동하지 않습니다.

+0

약 1 년이되었고 마침내 해결책을 찾아 다시 알려 드리겠습니다. – nevets

+0

뉴스? 그것은 당신의 기계에서 작동합니까? – Skaiol