2016-12-22 1 views
0

PowerPoint에서 주어진 텍스트 상자 안에 텍스트가 들어갈 수 있도록 필요한 글꼴 눈금을 결정하기 위해 PowerPoint에서 텍스트를 맞추는 방법을 재 작성해야하는 응용 프로그램을 개발 중입니다.SharpDX 문자 간격

슬라이드를 생성하기 위해 Aspose 라이브러리를 사용하고 있지만 Aspose에서 계산 된 글꼴 크기는 종종 올바르지 않기 때문에 프레젠테이션을 처음 열면 예상보다 큰 텍스트가 표시되어 긴 텍스트가 밖으로 나올 수 있습니다 텍스트 상자 및 다른 인접한 텍스트 상자로.

처음에는 GDI MeasureString()과 수동 단어 줄 바꿈 알고리즘을 사용해 보았습니다. 그러나 이것은 매우 부정확했습니다. PowerPoint에서 DirectWrite를 사용하여 텍스트를 화면에 표시하므로 ShaprDX 및 TextLayout을 사용하여 더 나은 결과를 얻었습니다.

내 알고리즘은 주어진 텍스트 상자에 텍스트 레이아웃을 반복적으로 적용하고 글꼴 크기를 줄이기까지 반복적으로 시도합니다.

그러나 최근에 PowerPoint에서 SharpDX보다 넓은 문자 간격이있는 것으로 나타났습니다. 그러나 일부 문자 뒤에 SharpDX보다 PowerPoint에서 텍스트 줄 바꿈이 빨라졌습니다. 샘플 이미지를 보면

Sample image

, 나는 100 % 파워 포인트 슬라이드의 스크린 샷을 갔고, SharpDX의 스크린 샷은 형태로 렌더링합니다. PowerPlay 이미지 위에 SharpDX 이미지를 중첩했습니다.

SharpDX 텍스트는 지정된 글꼴 크기에 이미 "적합"하기 때문에 더 길습니다.

텍스트 : Αποτελέσματα έναντι Παγκόσμιο Πρότυπο Υψηλών Επιδόσεων 글꼴 : 굴림 11pt 텍스트 상자 크기 : (4.63 "X 0.26")에 맞게 축소없이 0 마진 파워 포인트 주위의 모든 곳에

, 444px X 24 픽셀,이 텍스트 것 덮개.

SharpDX에서는 텍스트가 줄 바꿈되지 않습니다.

I는 수식을 사용하여 화소 점에서 폰트 크기를 변환하고 :

화소 점 X = 96F/72F;

SharpDX에서 문자 간격을 설정하는 방법을 찾지 못했습니다. 이것은 가능한가?

+0

안녕하세요. [내가 뭘 물어볼 수있는 주제는 무엇입니까?] (http://stackoverflow.com/help/on-topic)와 [좋은 질문을하는 법] (http://stackoverflow.com/help/how-to-ask)을 읽어보십시오.) 그리고 완벽한 질문 그리고 [최소, 완전하고 검증 가능한 예제] (http : // stackoverflow.com/help/mcve) SO는 무료 코딩 또는 코드 변환 또는 디버깅 또는 자습서 또는 라이브러리 찾기 서비스가 아닙니다. 여기에서 우리는 사용자의 시도를 수정하고, 코드는 작성하지 않습니다. – Mingebag

+0

PowerPoint 오브젝트 모델에서 텍스트 범위는 BoundHeight, BoundTop, BoundLeft 및 BoundWidth 속성을 사용하면 텍스트의 크기를 "설정"할 수 있습니다. Aspose에서 이러한 속성에 액세스 할 수 있으면 일치 할 때까지 텍스트 크기를 줄이거 나 늘릴 수 있습니다. –

답변

0

나는 여러분의 요구 사항을 관찰했으며, Aspose.Slides는 텍스트의 축소와 같은 텍스트 줄 바꿈이나 셰이프의 텍스트 양에 맞게 셰이프를 조정하는 것처럼 PowerPoint의 내부 속성 만 사용한다는 것을 공유하고 싶습니다. 경계에 대한 그러한 액세스는 없습니다. 그러나 텍스트를 캡슐화하는 모양의 x, y, 너비 및 높이를 가져올 수 있습니다.

Presentation pres=new Presentation("TEST.pptx"); 
ISlide slide=pres.Slides[0]; 
//Shape holding text is an AutoShape 
IAutoShape ashp=(IAutoShape)slide.Shapes[0]; 

float x=ashp.X; 
float y=ashp.Y; 
float width=ashp.Width; 
float height =ashp.Height; 

반환되는 값은 인치당 72 픽셀로 매핑됩니다. 즉, 10 "X 7.5"크기의 표준 슬라이드는 Aspose.Slides의 크기가 720 x 540에 해당합니다. 도움이되기를 바랍니다.

저는 Aspose에서 Developer/Evangelist로 일합니다.