현실감각 0% :: 'C#' 태그의 글 목록

컴퓨터 관련 2013.04.23 13:02

c#에서 PPT 슬라이드 파일 생성하기



C#에서 PPT 슬라이드 파일 생성하기


MS워드, 엑셀 등등 Office 파일을 C#을 이용하여 자동으로 생성하는 프로그램을 몇번 만들었는데, 이번엔 PPT를 자동으로 생성하는 프로그램을 만들게 되었다...ㅠㅠ 아 귀찮~@#$!%&$

PPT 파일 자체가 MS에서 만든놈이고 C#.NET 또한 MS에서 만든놈이니 MSDN 같은데 가면 다 있겠지만 워낙 찾기가 귀찮고 쓰잘데 없는 내용이 많아서 구글신님께 부탁했더니 괜찮은걸 발견했다. 다만 2003 이전버전(*.ppt)은 지원을 안하고 2007 이상(*.pptx)에서만 되는듯..


출처는 요기

http://www.free-power-point-templates.com/articles/create-powerpoint-ppt-programmatically-using-c/ (영문)

자세히 둘러본건 아니지만 이것 뿐만 아니라 이런저런 유용한 슬라이드 템플릿하고 관련 소스가 많이 있는 것 같으니 PowerPoint에 관심있다면 한번 훑어 보는 것도 좋을 것이다.


소스는 요기!


using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

namespace XXXXX
{
    class hdd_CreatePPT
    {
        public void CreatePowerPointSlides()
        {
            Application pptApplication = new Application(); // 어플리케이션 생성

            Slides slides;      // 슬라이드 묶음(파일)
            _Slide slide;       // 낱장 슬라이드
            TextRange objText;  // 텍스트 오브젝트

            // 프레젠테이션 파일 생성
            Presentation pptPresentation = pptApplication.Presentations.Add(MsoTriState.msoTrue);

            CustomLayout customLayout = pptPresentation.SlideMaster.CustomLayouts[PpSlideLayout.ppLayoutText];

            // 새 슬라이드 생성
            slides = pptPresentation.Slides;
            slide = slides.AddSlide(1, customLayout);

            // 타이틀 추가
            objText = slide.Shapes[1].TextFrame.TextRange;
            objText.Text = "제목입니당";
            objText.Font.Name = "Gulim";
            objText.Font.Size = 32;

            objText = slide.Shapes[2].TextFrame.TextRange;
            objText.Text = "1번째줄\n2번째줄\n3번째줄";

            slide.NotesPage.Shapes[2].TextFrame.TextRange.Text = "여기는 슬라이드 설명쓰는곳입니당~(원문출처: http://fppt.com)";

            pptPresentation.SaveAs(@"c:\ppttest.pptx", PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTrue);
            //pptPresentation.Close();
            //pptApplication.Quit();
        }
    }
}





퍼온 소스이지만 그냥 카피 앤 페이스트 하기 미안해서 출력문만이라도 살짝 바꿔보았다.

사용하는법을 간단하게 설명하자면.. 우선 Microsoft.Office.Interop.PowerPoint.dll하고 Microsoft.Office.Interop.Word.dll 파일을 참조한다. Microsoft.Office.Interop.PowerPoint.dll은 이해가 되는데 왜 Microsoft.Office.Interop.Word파일까지?? 라고 물을 수 있는데, 그 이유는 MsoTriState 이녀석을 사용하기 위해서는 Microsoft.Office.Core를 참조해야 하고 해당 네임스페이스가 Microsoft.Office.Interop.Word.dll에 포함되어 있기 때문이다.

그리고 밑에 나오는 소스들... 소스 자체는 상당히 간단하다. Slides는 슬라이드 파일을 의미하고 Slide는 각 페이지를 의미하는것 같다. 그리고 TextRange는 글상자(?) 뭐였지.. 아무튼 글을 쓰기 위해 설정하는 그 점선의 사각형을 의미하는듯 하다. Shapes[1], [2]를 보건데 글상자가 만들어진 순서 등에 따라 배열 형식으로 구성되어 있음을 유추할 수 있다. 다만 글상자의 각 번호를 알기 위해서는 직접 뿌려보는 작업을 한번 해봐야 할듯 싶다.

가져다 쓰는것들이 다 그렇듯이 일단 오브젝트를 선언하고 TextRange에 글 입력하고 폰트 설정하는 것이 끝..;;;

사진 넣는법이나 TextRange의 위치를 변경하는 소스도 있었으면 더 좋았을텐데 아쉽다. 뭐 아래 Related posts에 관련 링크가 달려있으니 시간날때 한번 둘러봐야겠다.






컴퓨터 관련 2012.10.02 11:46

C#에서 무료 TTS 사용하기



추석때 집구석에서 할짓없어 이것저것 만들어보다가 TTS가 필요하게 되어서 검색

그러다가 Microsoft사에서 제공하는 무료 TTS 발견!! 물론 License 뭐시기 하는 페이지가 있긴 하지만 뭐 개인용으로 쓸거니 안읽어봐도 무료일듯.

 

 

아참.. TTS를 검색하러 들어온 것이 아닌데 얼떨결에 이 포스트를 봐 버린 사람들에게 TTS를 설명하자면

 

TTS란??

'Text To Speech' 즉 문자열을 말소리로 바꾸어주는 시스템을 의미한다.

뭐 우리 실생활 주변에서 흔히 접할 수 있는데 꼭 예를 들자면..

각종 ATM이나 티켓 자판기를 사용할 때 일만 이천 오백 이십 원 입니다. 하는식으로 또박또박 말해주는 기계음 아가씨가 대표적인 예이고, 기차역에서 어색한 음색의 기계 아줌마(아가씨?)가 "12시 50분에 부산으로 가는 무궁화호 열차가 타는곳 2번, 2번으로 들어오고 있습니다." 하는 것도 TTS의 일종이라 할 수 있겠다.

 

 

 

욜리 쉬운 사용법 따라하기

 

우선 Microsoft사 공식 홈페이지 가서 아래 3개를 다운받는다.

 

 

  http://www.microsoft.com/en-us/download/details.aspx?id=27225 

 

  먼저 모든 컴퓨터에 설치해야 할 런타임 파일을 다운로드 후 설치

 

  당연한 거지만 이놈은 개발 PC 뿐만 아니라 배포 할 PC에도 설치해야 한다.

  License 파일은 가볍게 무시해주고(-_-;;) x64와 x86중에 자신의 컴퓨터에 맞는것을 설치.

  뭘 설치해야 할지 모르겠다면 그냥 x86 고고!~

 

  혹시 링크가 깨질것을 대비해서 아래 첨부

 

  SpeechPlatformRuntime.msi

 

 

 

 

  http://www.microsoft.com/en-us/download/details.aspx?id=27226

 

  두번째로 SDK 설치!!

  이놈은 개발 PC에만 설치하면 된다.

  위엣놈과 마찬가지로 여러가지 파일이 나오는데 x64 또는 x86 둘중 하나 선택해서 설치하면 끝.

  물론 런타임 버전과 동일하게 설치하는 센스는 필수

 

  이녀석도 혹시 링크가 깨질지 모르니 따로 첨부ㅎㅎ

 

  MicrosoftSpeechPlatformSDK.msi

 

 

 

 

 

  http://www.microsoft.com/en-us/download/details.aspx?id=27224

 

  마지막으로 설치할 녀석은 다국어지원 엔진!!

  KR로 검색하면 TELE와 Heami(혜미?)가 나오는데 입맛에 맞게 설치

  이녀석은 용량이 20메가 가까이 되는 관계로 따로 첨부를 못함..ㅠㅠ

 

 

 

아무튼 이 세개를 모두 다운받아 SDK, Runtime, 언어팩 순서대로 설치하고 Visual Studio를 실행!!

 

그담에 할 일은 새 프로젝트를 생성하거나 TTS 서비스가 필요한 프로젝트를 로드하고 그림과 같이 참조 추가(물론 누워서 떡먹기보다 쉬운 C# 참조추가를 못하는 사람은 없겠지만 혹시나 해서...ㅎㅎ)

 

 

 

 

솔루션 탐색기의 참조 항목에서

오른쪽 버튼을 누른 후 참조 추가 클릭.

 

 

 

 

참조 추가 다이얼로그가 나오면 찾아보기 탭을 클릭하고 dll이 설치된 경로

C:\Program Files (x86)\Microsoft SDKs\Speech\v11.0\Assembly

로 가서 Microsoft.Speech.dll 선택하고 확인을 누르면 참조 끝!!

 

 

 

자.. 이제 참조도 모두 끝났고 코딩할때 사용하기만 하면 된다.

간단한 사용법은...

 

우선 참조했어도 사용한다고 말 안해주면 가볍게 씹어버리는 C#님께서 까먹지 않도록

 

using Microsoft.Speech;
using Microsoft.Speech.Synthesis;

 

//이 두녀석 걸어주고..

 

 

SpeechSynthesizer ts = new SpeechSynthesizer();

 

//SpeechSynthesizer 인스턴스 선언해주고

 

 

 

ts.SelectVoice("Microsoft Server Speech Text to Speech Voice (ko-KR, Heami)");

 

//음성 이쁜 혜미씨 목소리로 손수 선택해주고..(물론 다른 음성을 받았으면 그 아가씨(?)로 바꿔줘야함)

 

 

 

ts.SetOutputToDefaultAudioDevice();

 

//아리따운 혜미씨 목소리가 흘러나올 사운드카드를 잡아줘야 하는데.. 잘 모르니까 그냥

//디폴트 오디오 디바이스 잡아주고..

 

 


ts.Speak("메롱?");

 

//인스턴스명.speak("출력하고자 할 문자열"); 과 같은 형식으로 문자열을 목소리로 출력할 수 있다.

 

 

 

이렇게 하면 엄마 목소리만큼이나 익숙한 이름모를 아주머니(이젠 이름을 알아버렸군.. 혜미씨!!)의 목소리로 텍스트를 또박또박 읽어준다.

 

 

 



  • a 2013.07.24 13:49

    감사합니다.

  • kdi 2014.04.23 11:29

    system.speech로는 일반적인 영어만 지원하고
    Microsoft.Speech 로 여러 언어 버전을 지원하는데 환경설정이 쉽지 않네요

    처음에 헷갈렷어요

  • 유동근 2015.05.08 21:45

    감사합니다.
    잘 되내요!!!

  • 컴맹 2015.06.07 08:27

    visual studio 는 뭔가요? 작성자님? ㅜㅜ

    • 현실감각0% 2015.07.27 18:10 신고

      헙.. 비쥬얼스튜디오는 개발 플랫폼입니다. c++, c#, vb등의 언어 개발 환경을 제공하지요..ㅋ

  • 고흐 2016.03.31 10:26

    감사합니다.
    근데 c#프로젝트에서 SpeechSynthesizer ts = new SpeechSynthesizer(); 에서 자꾸 Exception이 뜨길래
    보니깐 시스템이 64비트라고해서 64비트 sdk깔아도 프로젝트가 32비트니깐 에러가 발생하네요ㅎㅎ
    모두 32비트로 까니깐 정상작동하네요..

  • 라이선스궁금 2016.10.17 14:09

    안녕하세요
    라이선스를 읽고있는데 헷갈려서요, 상용 프로젝트에 붙여서 납품하면 불법인가요?

  • 안되네요. 2018.01.21 23:04

    nvme ssd인데 sdk프로그램에서 로컬드라이브에 설치하라고 하네요. 로컬드라이브 맞는데 ㅡㅠ