2009-05-25 3 views
0

이미지에 동적으로 텍스트를 쓰려고하는데 문장에서 선택한 단어를 굵게 표시하고 싶습니다. 내가 한 일은 문자열을 세 개의 문자열, 즉 첫 번째 부분, 굵게 표시 할 단어 및 나머지 문장으로 구분하는 것입니다. 그러나 이미지 위에 그릴 때 (.DrawString()) 연결하지 않고 오히려 서로 덮어 씁니다. 이미지에서 문장을 재구성 할 수있는 방법이 있습니까 (중간 단어를 굵게 표시)?ASP.NET : 이미지의 텍스트에 굵게 표시된 단어

감사합니다.

편집 : 예제 코드 :

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Dim w As Word = Word.GetLastPublishedWord() 
    Dim wordForm As String = Word.FindWordForm(w.Word, w.Sentence, Word.RegexOutputType.StandardString) 
    Dim firstPart As String = Left(w.Sentence, w.Sentence.IndexOf(wordForm)) 
    Dim lastPart As String = Right(w.Sentence, (w.Sentence.Length - firstPart.Length - wordForm.Length)) 

    Dim sig As Image = Image.FromFile(Server.MapPath(ResolveUrl("~/images/sig.jpg"))) 
    Dim text As Graphics = Graphics.FromImage(sig) 
    text.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias 
    Dim sentenceRec As New RectangleF(0, 0, 400, 75) 
    Dim tagRec As New RectangleF(250, 75, 150, 25) 
    text.DrawString(firstPart, New Font("Arial", 12, FontStyle.Regular), SystemBrushes.WindowText, sentenceRec) 
    text.DrawString(wordForm, New Font("Arial", 12, FontStyle.Bold), SystemBrushes.WindowText, sentenceRec) 
    text.DrawString(lastPart, New Font("Arial", 12, FontStyle.Regular), SystemBrushes.WindowText, sentenceRec) 

    Response.ContentType = "image/jpeg" 
    sig.Save(Response.OutputStream, ImageFormat.Jpeg) 
    sig.Dispose() 
    text.Dispose() 
End Sub 

답변

1

당신은 그래픽 객체에 텍스트를 써으로 삽입 지점을 증가해야합니다.

PointF insertionPoint; 
SizeF textWidth = g.MeasureString("First ", normalFont); 

g.DrawString("First ", normalFont, Brushes.Black, insertionPoint); 

insertionPoint.X += textWidth.Width; 
textWidth = g.MeasureString("bolded", boldFont); 
g.DrawString("bolded", boldFont, Brushes.Black, insertionPoint); 

insertionPoint.X += textWidth.Width; 
g.DrawString(" and remaining.", normalFont, Brushes.Black, insertionPoint); 
+0

이 문제는 텍스트가 줄 바꿈된다는 것입니다. 그래서 레이아웃 사각형 인 RectangleF가 포함되었습니다. 다른 제안? – Jason

+0

즉, 텍스트를 400px로 감쌀 수 있습니다. – Jason

+0

불행히도 GDI +에는 '서식있는 텍스트'를 자동으로 처리 할 수있는 기능이 없습니다. 포장을 처리하기 위해 자신의 논리를 굴려야 할 것입니다. 참고로, http://www.codeproject.com/KB/GDI-plus/HtmlRenderer.aspx에서 GDI +를 완전히 사용하는 html CSS2 렌더러를 작성해야합니다. –

관련 문제