문제

나는 이미 RTF에서 HTML에 대한 사이트에서 많은 게시물을 보았고 일부 다른 게시물은 HTML에서 RTF 변환기에 대해 이야기하는 것을 보았지만 가장 널리 사용되는 상용 제품인 Open에 대한 전체 분석을 시도하고 있습니다. 소스 제품 또는 사람들이 집에 가면서 자란 것을 권장하는 경우. 이 문제를 중복 질문으로 생각하면 사과하지만, 제품 매트릭스를 만들려고 노력하고 있습니다. 또한 이것이 다른 사람들에게 도움이 될 것이라고 생각합니다.

컨버터는 SQLServer 2005 (곧 2008)를 DB로 사용하여 ASP.NET 2.0 응용 프로그램 (곧 3.5로 업그레이드하지만 여전히 WebForms로 고수하고 있음)에서 사용됩니다.

몇 개의 게시물을 읽는 것 Sautinsoft 상업적 구성 요소로 인기있는 것으로 보입니다. HTML을 RTF로 변환하는 데 권장하는 다른 상용 구성 요소가 있습니까? 가격은 중요하지만 비싼 편에 약간이라도 나열하십시오.

오픈 소스의 경우, 나는 그것을 읽었습니다 OpenOffice.org 파일을 변환 할 수 있도록 서비스로 실행할 수 있습니다. 그러나 이것은 Java 기반으로 보입니다. 이것을 사용하려면 어떤 종류의 인터 로프가 필요할까요? HTML을 RTF로 변환하기 위해 어떤 .NET 오픈 소스 구성 요소가 있습니까?

집에서 자란 경우 XSLT가 XHTML과 함께가는 길입니까? 그렇다면 XHTML을 생성하는 데 어떤 구성 요소를 권장합니까? 그렇지 않으면, 다른 집에서 자란 아베 누스를 추천합니다.

또한 현재 RTF에서 HTML에 대해 크게 신경 쓰지 않습니다. 상업용 구성 요소가 이것을 제공하고 가격이 여전히 동일하다면 괜찮습니다. 그렇지 않으면 언급하지 마십시오.

도움이 되었습니까?

해결책

작업이 실제로 그렇게 복잡하지 않기 때문에 직접하는 것이 좋습니다. 첫째, 가장 쉬운 방법은 하나의 XML 형식을 다른 XML 형식으로 변환합니다. C#에서 XML 문서를 변환하는 것은 매우 쉽습니다.

다음은 시작하기에 좋은 MSDN 블로그 게시물입니다. Mike는 심지어 제 3자를 다루기 위해 손 으로이 작업을 수행하는 것이 더 쉬웠다 고 언급했습니다.

링크

사실, 나는 이미이 질문에 대답했습니다 여기. 이것이 이것을 중복으로 만든다고 생각합니다.

다른 팁

그 가치와 특별한 순서로.

얼마 전에 나는 RTF로 내보내고 MS Word에 의해 조작되는 RTF를 RTF에서 가져오고 싶었습니다.

첫 번째 문제는 RTF가 개방 표준이 아니라는 것입니다. 그것은 내부 MS 표준이며, 그들이 그것을 좋아하고 일반적으로 호환성에 대해 걱정하지 않을 때 그것을 변경합니다. 현재 RTF 버전은 1.3 ~ 1.9이며 모두 다릅니다. 내부적으로 그들은 측정을 위해 측정을 위해 Twips를 사용합니다.

나는 주제에 관한 O'Reilly 포켓 북을 구입하여 좋은 MS 문서를 많이 읽고 읽었지만 각 버전에 많은 양이 있습니다.

RTF가 Regex를 사용하여 조작하는 방식으로 코딩되는 방식으로 인해 엄청나게 어려운 일이며 테스트하고 작업하기 위해서는 신중한 취급 및 집중이 필요합니다. Regex에 내장 된 MAC 편집기를 사용하여 각 섹션을 꾸준히 테스트하고 코드로 빌드 할 수 있습니다.

버전의 수로 인해 버전간에 비 호환성이 많지만 공통점이 많으며 결국에는 내가 원하는 곳 (약 1 주간의 읽기 및 몇 주 후) 및 제작하기가 쉽게 어려웠습니다. 정말 간단한 버전.

나는 상업용 솔루션을 찾지 못했지만 예산 때문에 무료로 사용해야했기 때문에 많은 것을 줄이지 만 원하는 것을 선택하고 지원하는 것을 선택할 때 큰주의를 기울여야했습니다.

나는 당신이 HTML/XML/XHTML에서 어디에서 왔는지 생각하지 않습니다. CSV 형식, RTF를 변환하고있었습니다.

DIY에 조언할지 확실하지 않습니다. 아마도 DIY 균형을 유지하지만 자신의 상황은 그것을 지시 할 것입니다.

편집 : 콘텐츠에서 RTF로가는 한 가지는 그 반대보다 쉽습니다.

BTW는 FIOR MS Fior를 RTF 버전을 비판하지 않습니다. 이봐, 그것은 그들이 좋아하는 일을 할 수 있도록 그들의 것과 독점적입니다.

방금 HTML에서 RTF 변환기가있는 웹을 위해이 Wysiwyg Rich 텍스트 편집기 (RTE)를 발견했습니다. .NET의 귀여운 편집자. 이 구성 요소에 대한 경험이 있습니까? 웹 기반 RTE에 대한 나의 주요 경험은 ckeditor (fckeditor)와 tinymce 였지만 ckeditor와 tinymce에 HTML에서 RTF 변환기가 내장되어 있지 않다고 말할 수있는 한.

웹 애플리케이션에서 풍부한 텍스트 형식으로 Mailmerge 기능을 구현해야하므로 내 경험을 공유하는 것이 좋을 것이라고 생각했습니다.

기본적으로 두 가지 대안을 탐구했습니다.

  • Google Docs API를 사용하여 Google Docs 기능을 활용합니다
  • 표시된대로 XSLT 사용 이 에세이

Google Docs API가 잘 작동합니다. 문제는 다음과 같은 페이지 브레이크와 함께 HTML 문서를 업로드 할 때 다음과 같습니다.

<p style="page-break-before:always;display:none;"/>

그리고 Google에게 RTF에서 문서를 변환하도록 요청하면 모든 휴식을 잃어 버릴 수 있습니다. 이는 내 요구 사항에 맞지 않습니다. 그러나 페이지 브레이크가 문제가되지 않으면이 솔루션을 확인할 수 있습니다.

XSLT 솔루션은 작동합니다.

msxml3 com 객체를 직접 우회하여 System.xml 클래스를 참조하면 작동합니다. 그렇지 않으면 나는 그것을 작동시킬 수 없었습니다. 또한 텍스트 색상, 크기 등을 무시하는 기본 형식 및 태그를 제외한 모든 기본 형식 및 태그를 존중하는 것으로 보입니다. 그러나 페이지 브레이크를 존중합니다. :-)

다음은 Tidy.net을 사용하여 HTML을 XHTML 변환으로 강제로 작성한 빠른 라이브러리입니다. 도움이되기를 바랍니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ADDS.Mailmerge
{

    public class XHTML2RTF
    {

        MSXML2.FreeThreadedDOMDocument _xslDoc;
        MSXML2.FreeThreadedDOMDocument _xmlDoc;
        MSXML2.IXSLProcessor _xslProcessor;
        MSXML2.XSLTemplate _xslTemplate;
        static XHTML2RTF instance = null;
        static readonly object padlock = new object();

        XHTML2RTF()
        {
            _xslDoc = new MSXML2.FreeThreadedDOMDocument();
            //XSLData.xhtml2rtf is a resource file 
            // containing XSL for transformation
            // I got XSL from here: 
            // http://www.codeproject.com/KB/HTML/XHTML2RTF.aspx
            _xslDoc.loadXML(XSLData.xhtml2rtf);
            _xmlDoc = new MSXML2.FreeThreadedDOMDocument();
            _xslTemplate = new MSXML2.XSLTemplate();
            _xslTemplate.stylesheet = _xslDoc;
            _xslProcessor = _xslTemplate.createProcessor();
        }

        public string ConvertToRTF(string xhtmlData)
        {
            try
            {
                string sXhtml = "";
                TidyNet.Tidy tidy = new TidyNet.Tidy();
                tidy.Options.XmlOut = true;
                tidy.Options.Xhtml = true;
                using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xhtmlData)))
                {
                    StringBuilder sb = new StringBuilder();
                    using (MemoryStream sw = new MemoryStream())
                    {
                        TidyNet.TidyMessageCollection messages = new TidyNet.TidyMessageCollection();
                        tidy.Parse(ms, sw, messages);
                        sXhtml = Encoding.UTF8.GetString(sw.ToArray());
                    }
                }

                _xmlDoc.loadXML(sXhtml);
                _xslProcessor.input = _xmlDoc;
                _xslProcessor.transform();
                return _xslProcessor.output.ToString();
            }
            catch (Exception exc)
            {
                throw new Exception("Error in xhtml conversion. ", exc);
            }
        }

        public static XHTML2RTF Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new XHTML2RTF();
                    }
                    return instance;
                }
            }
        }
    }



}

tl; dr : 나는 사용하는 것이 좋습니다 OpenXml 형식과 HtmlToOpenXml 가능하면 Nuget 패키지.


Microsoft Word com

내 사용 사례는 COM 구성 요소가 선택하지 않는 서버의 기능을 사용하는 것이기 때문에이 주제를 실제로 검색하지 않았습니다.


xhtml2rtf

처럼 @iamtimcorey가 언급했습니다 이 CodeProject 라이브러리를 사용할 수 있습니다.

단점은 다음과 같습니다.

  • 제한된 지원 HTML 및 CSS
  • 실제로 .net이 아닙니다
  • ...

Windows는 웹 브라우저를 형성합니다

처럼 @jerry가 언급했습니다 Windows 양식을 사용할 수 있습니다 WebBrowser 제어.

단점은 다음과 같습니다.

  • System.windows.forms에 대한 참조
  • 복사 및 페이스트 사용 (멀티 스레딩에 문제가 있음)
  • STA 스레드에서만 작동합니다

지원되는 기능이 아닌 기능은 다음과 같습니다.

  • 글꼴
  • 그림 물감
  • 번호가 매겨진 목록
  • strikethrough (del 요소)
  • ...

DeVexpress

"Paul V"의 코드 샘플 DeVexpress 지원 센터. (03.02.2015)

public String ConvertRTFToHTML(String RTF)
{   
    MemoryStream ms = new MemoryStream();
    StreamWriter writer = new StreamWriter(ms);
    writer.Write(RTF);
    writer.Flush();
    ms.Position = 0;
    String output = "";
    HtmlEditorExtension.Import(HtmlEditorImportFormat.Rtf, ms, (s, enumerable) => output = s);

    return output;
}

public String ConvertHTMLToRTF(String Html)
{
    MemoryStream ms = new MemoryStream();
    var editor = new ASPxHtmlEditor { Html = html };

    editor.Export(HtmlEditorExportFormat.Rtf, ms);

    ms.Position = 0;
    StreamReader reader = new StreamReader(ms);

    return reader.ReadToEnd();
}

또는 사용할 수 있습니다 RichEditDocumentServer 표시된대로 입력하십시오 이 예.

실제로 무엇이 뒷받침되는지 알려지지 않았습니다.

단점은 다음과 같습니다.

  • 가격
  • 하나의 작은 것에 대한 많은 참고 문헌
  • 더?

지원되는 기능이 아닌 기능은 다음과 같습니다.

  • Striketrough (del 요소)

Sautinsoft

public string ConvertHTMLToRTF(string html)
{
    SautinSoft.HtmlToRtf h = new SautinSoft.HtmlToRtf();
    return h.ConvertString(htmlString);
}

public string ConvertRTFToHTML(string rtf)
{
    SautinSoft.RtfToHtml r = new SautinSoft.RtfToHtml();
    byte[] bytes = Encoding.ASCII.GetBytes(rtf);
    r.OpenDocx(bytes );
    return r.ToHtml();
}

더 많은 예제 및 구성 옵션을 찾을 수 있습니다 여기 그리고 여기.

지원되는 것은 다음과 같습니다:

  • HTML 3.2
  • HTML 4.01
  • HTML 5
  • CSS
  • XHTML

단점은 다음과 같습니다.

  • 개발이 얼마나 활동적인지 잘 모르겠습니다
  • 가격

사용 지식베이스 :


DIY

제한된 기능 만 지원하려면 자신의 변환기를 작성할 수 있습니다. 지원되는 기능 세트가 너무 큰 경우에는 권장하지 않습니다.

나는 작다 여기 샘플 프로젝트 그러나 현재 상태의 교육 목적만을위한 것입니다.


OpenXML

만약 OpenXML 형식 또한 사용할 수있는 유스 케이스에도 괜찮습니다. htmltoopenxml nuget 패키지. 무료이며 다른 솔루션을 테스트 한 모든 기능을 지원했습니다.

프로젝트 is based on the XML SDK를 엽니 다 Microsoft에 의해 활성화 된 것 같습니다.

public static byte[] ConvertHtmlToOpenXml(string html)
{
    using (var generatedDocument = new MemoryStream())
    {
        using (var package = WordprocessingDocument.Create(generatedDocument, WordprocessingDocumentType.Document))
        {
            var mainPart = package.MainDocumentPart;
            if (mainPart == null)
            {
                mainPart = package.AddMainDocumentPart();
                new Document(new Body()).Save(mainPart);
            }

            var converter = new HtmlConverter(mainPart);
            converter.ParseHtml(html);

            mainPart.Document.Save();
        }

        return generatedDocument.ToArray();
    }
}

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top