2014-02-05 3 views
0

HTML을 RTF 및 기타로 변환하는 클래스를 제공하는 제 3 자 라이브러리 (데모, 지원을받을 수 없으므로 데모)를 사용하려고합니다. 문제는 ' m using은 System.Io.Stream이 RTF 변환을 저장하려고하지만 올바르게 설정하지 못했기 때문에 스트림이 여전히 비어 있습니다.스트림과 관련된 간단한 문제

Stream 객체를 올바르게 사용할 필요가 없기 때문에 Stream을 사용할 필요가 없기 때문에 Stream의 사용법에 대해 빠뜨린 것 같습니다.

내가 뭘 잘못하고있어?

Imports Nasosoft.Documents.Transform 
Imports System.IO 

Public Class Form1 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Shown 

     ' Set the Stream. 
     Dim RTFStream As Stream = Stream.Null 

     ' Create a HtmlToRtfTransform 
     Dim Converter As HtmlToRtfTransform = New HtmlToRtfTransform() 

     ' Load an HTML file. 
     Converter.Load("C:\File.html", System.Text.Encoding.Default) 

     ' Transform it into a stream 
     Converter.Transform(RTFStream) 

     ' Transform it into a file 
     ' Converter.Transform("C:\File.rtf") ' This works well. 

     ' Dispose the object. 
     ' Converter.Dispose() 

     MsgBox(RTFStream.Length) ' Result: '0' ... 

     ' I try to read the contents of the Stream 
     Dim StrReader As New StreamReader(RTFStream) 
     MsgBox(StrReader.ReadToEnd) ' But there is nothing to see. 

    End Sub 

End Class 
+0

스트림이 null이며 파일에 설정되지 않습니다. 어쩌면 – OneFineDay

+1

@DonA 아니요, * null *이 아닙니다. 그것은'/ dev/nul'입니다; 영원한 연하의 틈 –

답변

3

모든 것을 null 스트림 (Stream.Null)으로 푸시합니다. 그게 무슨 멀리 모든 던져입니다. 그것이 모두입니다.

대신 새로운 MemoryStream을 사용하고 데이터를 넣은 후 다시 읽으십시오 (Position0으로 설정). MSDN에서

Stream.Null에 :

사용 Null는 모든 운영 시스템 리소스를 소모하지 않습니다 스트림에 출력을 리디렉션합니다. 쓰기를 제공하는 Stream의 메서드가 Null에서 호출 될 때 호출은 단순히 반환되고 데이터는 기록되지 않습니다. Null은 데이터를 읽지 않고 0을 반환하는 Read 메서드도 구현합니다.

0

@Marc Gravell 솔루션 덕분에 필자가 작성한 도우미 클래스를 공유하고 싶습니다.

#Region " Imports " 

Imports Nasosoft.Documents.Transform 
Imports System.IO 
Imports System.Text 

#End Region 

''' <summary> 
''' Performs document conversion operations. 
''' </summary> 
Public Class DocumentConverter 

#Region " Public Methods " 

    ''' <summary> 
    ''' Converts RTF text to HTML. 
    ''' </summary> 
    ''' <param name="RtfText">Indicates the RTF text.</param> 
    ''' <returns>System.String.</returns> 
    Public Shared Function Rtf2Html(ByVal RtfText As String, 
            Optional ByVal TextEncoding As Encoding = Nothing) As String 

     TextEncoding = If(TextEncoding Is Nothing, Encoding.Default, TextEncoding) 

     Dim RtfStream As New MemoryStream(TextEncoding.GetBytes(RtfText)) 
     Dim HtmlStream As New MemoryStream 
     Dim HtmlText As String = String.Empty 

     Using Converter As New RtfToHtmlTransform() 
      Converter.Load(RtfStream) 
      Converter.Transform(HtmlStream) 
     End Using 

     HtmlStream.Position = 0 

     Using StrReader As New StreamReader(HtmlStream) 
      HtmlText = StrReader.ReadToEnd 
     End Using 

     RtfStream.Close() 
     HtmlStream.Close() 

     Return HtmlText 

    End Function 

    ''' <summary> 
    ''' Converts RTF text to TXT (Plain text). 
    ''' </summary> 
    ''' <param name="RtfText">Indicates the RTF text.</param> 
    ''' <returns>System.String.</returns> 
    Public Shared Function Rtf2Txt(ByVal RtfText As String, 
            Optional ByVal TextEncoding As Encoding = Nothing) As String 

     TextEncoding = If(TextEncoding Is Nothing, Encoding.Default, TextEncoding) 

     Dim RtfStream As New MemoryStream(TextEncoding.GetBytes(RtfText)) 
     Dim TextStream As New MemoryStream 
     Dim PlainText As String = String.Empty 

     Using Converter As New RtfToTextTransform() 
      Converter.Load(RtfStream) 
      Converter.Transform(TextStream) 
     End Using 

     TextStream.Position = 0 

     Using StrReader As New StreamReader(TextStream) 
      PlainText = StrReader.ReadToEnd 
     End Using 

     RtfStream.Close() 
     TextStream.Close() 

     Return PlainText 

    End Function 

    ''' <summary> 
    ''' Converts HTML text to RTF. 
    ''' </summary> 
    ''' <param name="HtmlText">Indicates the HTML text.</param> 
    ''' <returns>System.String.</returns> 
    Public Shared Function Html2Rtf(ByVal HtmlText As String, 
            Optional ByVal TextEncoding As Encoding = Nothing) As String 

     TextEncoding = If(TextEncoding Is Nothing, Encoding.Default, TextEncoding) 

     Dim HtmlStream As New MemoryStream(TextEncoding.GetBytes(HtmlText)) 
     Dim RtfStream As New MemoryStream 
     Dim RtfText As String = String.Empty 

     Using Converter As New HtmlToRtfTransform() 
      Converter.Load(HtmlStream) 
      Converter.Transform(RtfStream) 
     End Using 

     RtfStream.Position = 0 

     Using StrReader As New StreamReader(RtfStream) 
      RtfText = StrReader.ReadToEnd 
     End Using 

     HtmlStream.Close() 
     RtfStream.Close() 

     Return RtfText 

    End Function 

    ''' <summary> 
    ''' Converts HTML text to TXT (Plain text). 
    ''' </summary> 
    ''' <param name="HtmlText">Indicates the HTML text.</param> 
    ''' <returns>System.String.</returns> 
    Public Shared Function HtmlTxt(ByVal HtmlText As String, 
            Optional ByVal TextEncoding As Encoding = Nothing) As String 

     TextEncoding = If(TextEncoding Is Nothing, Encoding.Default, TextEncoding) 

     Dim HtmlStream As New MemoryStream(TextEncoding.GetBytes(HtmlText)) 
     Dim TextStream As New MemoryStream 
     Dim PlainText As String = String.Empty 

     Using Converter As New HtmlToTextTransform() 
      Converter.Load(HtmlStream) 
      Converter.Transform(TextStream) 
     End Using 

     TextStream.Position = 0 

     Using StrReader As New StreamReader(TextStream) 
      PlainText = StrReader.ReadToEnd 
     End Using 

     HtmlStream.Close() 
     TextStream.Close() 

     Return PlainText 

    End Function 

#End Region 

End Class