2013-12-22 3 views
0

Visio 프로젝트의 셰이프를 벡터 형식으로 가져 오려고합니다. 그것은 Visio UI에서 할 수 있지만 프로그래밍 방식으로 달성 할 수 없습니다. 내 코드는 다음과 같이 보입니다 :Visio 셰이프를 벡터 형식으로 얻는 방법

foreach (Visio.Master master in doc.Masters) 
{ 
    imageName = master.NameU; 
    string imageFileName = Path.Combine(@"c:\temp", imageName); 
    master.Export(imageFileName + ".svg"); 
} 

기능 내보내기는이 형식으로 된 파일 확장자와 내보내기 모양을 감지합니다. 그것은 bmp png 등 모든 래스터 형식에 맞습니다. 래스터 파일 승/O 문제로 프로젝트의 모양을 얻을 수 있습니다. emf 또는 wmf와 같은 형식을 전달하면 모든 파일이 저장되며 실제로는 wmf/emf 형식입니다. 그러나 래스터 이미지가 임베드되어 있으므로 사실 래스터 이미지입니다.

마지막으로 놀랍습니다 - svg 확장자를 전달하면 내 보낸 모든 파일이 몇 개를 제외하고 모두 비어 있습니다. 이 것들은 실제로 비어있는 SVG가 아니지만 전체 visio 페이지를 보여줍니다! 하나의 도형이 아닙니다. 모든 프로젝트 페이지에 대한 하나의 svg 파일. 이것은 내가 원하는 것이 아닙니다.

제발 도와주세요 - 프로그래밍 방식으로 Visio에서 벡터 형식의 모든 도형을 가져 오는 방법.

답변

0

Visio에서 SVG로 단일 셰이프를 내보내는 기능이 확실치 않지만 크기 및 위치와 관련하여 페이지의 복사본을 만든 다음 각 셰이프를 하나씩 복사 한 다음 페이지를 내보낼 수 있습니다 SVG로, 당신에게 모양을 줄 것입니다.

표준에 충분히 익숙하다면 셰이프 시트의 지오메트리를 단계별로 실행하고 SVG로 직접 내보낼 수 있습니다.

또 다른 옵션은 형상의 각 획 경로에 대한 XY 점의 배열을 반환하는 Path.Points() 메서드를 사용하여 각 모양을 간단한 SVG 경로로 내보내는 것입니다. 이렇게하면 깨끗한 SVG 출력보다 훨씬 더 큰 경로가 만들어 지지만 Visio에서 점의 경로를 렌더링하므로 호와 스플라인 등을 처리하지 않아도됩니다.

+0

의견을 주셔서 감사합니다. 예, Visio는 스텐실에서 svg로 모든 마스터 셰이프를 내보낼 수 있습니다. 단일 모양으로 다이어그램을 만드는 데 좋은 아이디어입니다. 도움이 될 수 있습니다. 아마 아프다. 또 다른 옵션으로 전체 svg 다이어그램 (쉽게 얻을 수 있음)을 셰이프로 분할하려고합니다. 다른 방법은 너무 어렵습니다. 셰이프 지옥을 파고 싶지 않아 형상 도형을 가져올지라도 필요한 다른 시각적 특성 (스타일 등)이 있습니다. – AlexandrS

1

" 선택 "객체가 SVG에서 잘 작동하는 것 같습니다. 따라서 다음과 같이이 문제를 해결할 수 있습니다.

 foreach (Visio.Master master in doc.Masters) 
     { 
      string imageName = master.NameU; 
      string imageFileName = Path.Combine(@"c:\temp", imageName); 

      var selection = doc.Application.ActivePage.CreateSelection(Visio.VisSelectionTypes.visSelTypeEmpty); 
      foreach (Visio.Shape shp in master.Shapes) 
       selection.Select(shp, (short)Visio.VisSelectArgs.visSelect); 

      selection.Export(imageFileName + ".svg"); 
     } 
+0

완벽하게 작동합니다! 정확히 내가 필요로하는 것. 고마워, 미안, 나는 충분한 명성을 얻지 못했고 대답을 홍보 할 수 없다 (Ogromnoe spasibo! – AlexandrS

관련 문제