{\rtf1\ansi \deff0\deflang1033{\fonttbl

{\rtf1\ansi\ansicpg949 \deff0\deflang1033{\fonttbl

오늘은 위 두 줄의 차이 때문에 엄청 삽질한 하루였다.

참고로 \ansicpg1252는 Windows-1252를 의미하며
iso-8859-1 즉 서유럽어(Windows) 문자인코딩을 의미한다.
다음은 HelloHangul.java를 컴파일, 실행하여 얻은 RTF 파일의 내용이다.

{\rtf1\ansi\ansicpg1252\deff0{\fonttbl{\f0\froman\fcharset0 Times New Roman;}{\f1\froman\fcharset0 unknown;}{\f2\froman\fcharset0 Arial;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;}{\stylesheet {\style\s2 \ql\fi0\li0\ri0\f2\fs28\b\i\cf0 heading 2;}{\style\s3 \ql\fi0\li0\ri0\f2\fs26\b\cf0 heading 3;}{\style\s1 \ql\fi0\li0\ri0\f2\fs32\b\cf0 heading 1;}{\style\s0 \ql\fi0\li0\ri0\f2\fs24\cf0 Normal;}}{\*\listtable}{\*\listoverridetable}{\*\generator iText 2.1.4 (by lowagie.com)}{\info}\paperw11907\paperh16840\margl720\margr720\margt720\margb720\pgwsxn11907\pghsxn16840\marglsxn720\margrsxn720\margtsxn720\margbsxn720\pard\plain\s0\fi0\li0\ri0\plain\f1 Hello, \u-10916?\u-20992?!\par}



참고로,
http://msdn.microsoft.com/en-us/library/aa140277.aspx 에는 좀 낡은 것이기는 하지만
RTF 1.6 스펙을 볼 수 있으며, 위키백과 http://en.wikipedia.org/wiki/Rich_Text_Format 에는 RTF에 관한 많은 정보를 볼 수 있다.

또,
http://www.java2s.com/Tutorial/VB/0260__GUI/LoadtxtfiletoRichTextBox.htm
를 방문하면 RichTextBox를 이용하여 RTF 파일을 컨트롤하는 어러가지 비베(Visual Bascic)를 여러개 볼 수 있다.

<그림> 비베로 작성된 RTF Reader and Writer의 실행 장면



소스 파일명: testReadWriteRTF.bas

Option Strict On
Imports System.IO

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Windows.Forms

Imports System.Text
Imports Microsoft.VisualBasic


public class RichTextBoxSaveReadFile
   public Shared Sub Main
        Application.Run(New Form1)
   End Sub
End class


Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub
    Friend WithEvents Panel1 As System.Windows.Forms.Panel
    Friend WithEvents RichTextBox1 As System.Windows.Forms.RichTextBox
    Friend WithEvents ColorDialog1 As System.Windows.Forms.ColorDialog
    Friend WithEvents FontDialog1 As System.Windows.Forms.FontDialog
    Friend WithEvents SaveFileDialog1 As System.Windows.Forms.SaveFileDialog
    Friend WithEvents OpenFileDialog1 As System.Windows.Forms.OpenFileDialog
    Friend WithEvents btnChangeColor As System.Windows.Forms.Button
    Friend WithEvents btnChangeFont As System.Windows.Forms.Button
    Friend WithEvents btnSaveRTF As System.Windows.Forms.Button
    Friend WithEvents btnOpenRTF As System.Windows.Forms.Button
    Friend WithEvents btnWriteControls As System.Windows.Forms.Button
    Friend WithEvents btnReadControls As System.Windows.Forms.Button
    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
    Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
    Friend WithEvents TextBox3 As System.Windows.Forms.TextBox

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer. 
    'Do not modify it using the code editor.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.Text = "RTF Reader and Writer"
        Me.Panel1 = New System.Windows.Forms.Panel()
        Me.RichTextBox1 = New System.Windows.Forms.RichTextBox()
        Me.ColorDialog1 = New System.Windows.Forms.ColorDialog()
        Me.FontDialog1 = New System.Windows.Forms.FontDialog()
        Me.SaveFileDialog1 = New System.Windows.Forms.SaveFileDialog()
        Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()
        Me.btnChangeColor = New System.Windows.Forms.Button()
        Me.btnChangeFont = New System.Windows.Forms.Button()
        Me.btnSaveRTF = New System.Windows.Forms.Button()
        Me.btnOpenRTF = New System.Windows.Forms.Button()
        Me.btnWriteControls = New System.Windows.Forms.Button()
        Me.btnReadControls = New System.Windows.Forms.Button()
        Me.TextBox1 = New System.Windows.Forms.TextBox()
        Me.TextBox2 = New System.Windows.Forms.TextBox()
        Me.TextBox3 = New System.Windows.Forms.TextBox()
        Me.Panel1.SuspendLayout()
        Me.SuspendLayout()
        '
        'Panel1
        '
        Me.Panel1.Controls.AddRange(New System.Windows.Forms.Control() {Me.btnReadControls, Me.btnWriteControls, Me.btnOpenRTF, Me.btnSaveRTF, Me.btnChangeFont, Me.btnChangeColor})
        Me.Panel1.Dock = System.Windows.Forms.DockStyle.Bottom
        Me.Panel1.Location = New System.Drawing.Point(0, 222)
        Me.Panel1.Name = "Panel1"
        Me.Panel1.Size = New System.Drawing.Size(656, 64)
        Me.Panel1.TabIndex = 0
        '
        'RichTextBox1
        '
        Me.RichTextBox1.Location = New System.Drawing.Point(16, 8)
        Me.RichTextBox1.Name = "RichTextBox1"
        Me.RichTextBox1.Size = New System.Drawing.Size(336, 176)
        Me.RichTextBox1.TabIndex = 1
        Me.RichTextBox1.Text = "Mr. and Mrs. Dursley, of number four, Privet Drive, were proud to say that they w" & _
        "ere perfectly normal, thank you very much."
        '
        'btnChangeColor
        '
        Me.btnChangeColor.Location = New System.Drawing.Point(24, 24)
        Me.btnChangeColor.Name = "btnChangeColor"
        Me.btnChangeColor.Size = New System.Drawing.Size(88, 32)
        Me.btnChangeColor.TabIndex = 0
        Me.btnChangeColor.Text = "Change Color"
        '
        'btnChangeFont
        '
        Me.btnChangeFont.Location = New System.Drawing.Point(128, 24)
        Me.btnChangeFont.Name = "btnChangeFont"
        Me.btnChangeFont.Size = New System.Drawing.Size(88, 32)
        Me.btnChangeFont.TabIndex = 1
        Me.btnChangeFont.Text = "Change Font"
        '
        'btnSaveRTF
        '
        Me.btnSaveRTF.Location = New System.Drawing.Point(232, 24)
        Me.btnSaveRTF.Name = "btnSaveRTF"
        Me.btnSaveRTF.Size = New System.Drawing.Size(88, 32)
        Me.btnSaveRTF.TabIndex = 2
        Me.btnSaveRTF.Text = "Save RTF"
        '
        'btnOpenRTF
        '
        Me.btnOpenRTF.Location = New System.Drawing.Point(336, 24)
        Me.btnOpenRTF.Name = "btnOpenRTF"
        Me.btnOpenRTF.Size = New System.Drawing.Size(88, 32)
        Me.btnOpenRTF.TabIndex = 3
        Me.btnOpenRTF.Text = "Open RTF"
        '
        'btnWriteControls
        '
        Me.btnWriteControls.Location = New System.Drawing.Point(440, 24)
        Me.btnWriteControls.Name = "btnWriteControls"
        Me.btnWriteControls.Size = New System.Drawing.Size(88, 32)
        Me.btnWriteControls.TabIndex = 4
        Me.btnWriteControls.Text = "Write Controls"
        '
        'btnReadControls
        '
        Me.btnReadControls.Location = New System.Drawing.Point(544, 24)
        Me.btnReadControls.Name = "btnReadControls"
        Me.btnReadControls.Size = New System.Drawing.Size(88, 32)
        Me.btnReadControls.TabIndex = 5
        Me.btnReadControls.Text = "Read Controls"
        '
        'TextBox1
        '
        Me.TextBox1.Location = New System.Drawing.Point(400, 24)
        Me.TextBox1.Name = "TextBox1"
        Me.TextBox1.Size = New System.Drawing.Size(232, 20)
        Me.TextBox1.TabIndex = 2
        Me.TextBox1.Text = "TextBox1"
        '
        'TextBox2
        '
        Me.TextBox2.Location = New System.Drawing.Point(400, 68)
        Me.TextBox2.Name = "TextBox2"
        Me.TextBox2.Size = New System.Drawing.Size(232, 20)
        Me.TextBox2.TabIndex = 3
        Me.TextBox2.Text = "TextBox2"
        '
        'TextBox3
        '
        Me.TextBox3.Location = New System.Drawing.Point(400, 112)
        Me.TextBox3.Name = "TextBox3"
        Me.TextBox3.Size = New System.Drawing.Size(232, 20)
        Me.TextBox3.TabIndex = 4
        Me.TextBox3.Text = "TextBox3"
        '
        'Form1
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
        Me.ClientSize = New System.Drawing.Size(656, 286)
        Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.TextBox3, Me.TextBox2, Me.TextBox1, Me.RichTextBox1, Me.Panel1})
        Me.Panel1.ResumeLayout(False)
        Me.ResumeLayout(False)

    End Sub

#End Region


    Private Sub btnSaveRTF_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnSaveRTF.Click
        SaveFileDialog1.InitialDirectory = Application.ExecutablePath
        SaveFileDialog1.DefaultExt = "rtf"
        SaveFileDialog1.FileName = "NewFile"
        SaveFileDialog1.Filter = "Rich Text Files (*.rtf)|*.rtf|All Files (*.*) | *.*"
        SaveFileDialog1.ShowDialog()
        RichTextBox1.SaveFile(SaveFileDialog1.FileName)

    End Sub

    Private Sub btnOpenRTF_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnOpenRTF.Click
        OpenFileDialog1.InitialDirectory = Application.ExecutablePath
        OpenFileDialog1.DefaultExt = "rtf"
        OpenFileDialog1.FileName = "NewFile"
        OpenFileDialog1.Filter = "Rich Text Files (*.rtf)|*.rtf|All Files (*.*) | *.*"
        OpenFileDialog1.ShowDialog()

        RichTextBox1.LoadFile(OpenFileDialog1.FileName)
    End Sub

    Private Sub btnChangeFont_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnChangeFont.Click
        Dim theFont As System.Drawing.Font
        FontDialog1.ShowDialog()
        theFont = FontDialog1.Font

        btnChangeFont.Font = theFont
        RichTextBox1.SelectionFont = theFont
    End Sub

    Private Sub btnChangeColor_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnChangeColor.Click
        Dim theColor As System.Drawing.Color
        ColorDialog1.AllowFullOpen = True
        ColorDialog1.AnyColor = True
        ColorDialog1.ShowDialog()
        theColor = ColorDialog1.Color

        btnChangeColor.ForeColor = theColor
        RichTextBox1.SelectionColor = theColor
    End Sub
End Class



컴파일은 Visual Studio 명령행에서

        vbc testReadWriteRTF.bas

하면 되고, 실행은

       testReadWriteRTF

하면 된다.


크리에이티브 커먼즈 라이선스
Creative Commons License

 

Posted by Scripter
,