2010-01-11 2 views
5

나는 이미 RTF가 HTML과 RTF 변환기에 대한 몇 가지 HTML에 대해 이야기하는 사이트에 많은 게시물을 보았지만 실제로 무엇에 대한 완전한 분석을 얻으려고 노력하고있다. 가장 널리 사용되는 상용 제품, 오픈 소스 제품 또는 사람들이 집으로 돌아갈 것을 권장하는 경우로 간주됩니다. 이 질문을 중복 된 질문이라고 생각하면 죄송하지만 제품 매트릭스를 만들어 응용 프로그램에 가장 적합한 것을 확인하려고합니다. 나는 또한 이것이 다른 사람들에게 도움이 될 것이라고 생각한다.HTML for RTF Converter for .NET

변환기는 SQL Server 2005 (곧 2008 년)를 DB로 사용하여 ASP.NET 2.0 응용 프로그램 (곧 3.5로 업그레이드하지만 WebForms를 고수하고 있음)에서 사용됩니다.

일부 게시물을 읽음으로써, SautinSoft은 상용 구성 요소로 보입니다. HTML을 RTF로 변환 할 때 권장할만한 상용 구성 요소가 있습니까? 가격은 중요하지만 비싼 편이라도 조금이라도 기재하십시오.

오픈 소스의 경우 파일을 변환 할 수 있도록 서비스로 실행될 수 있다는 것을 알았습니다. 그러나 이것은 Java 기반으로 만 나타납니다. 나는 이것을 사용하기 위해 어떤 종류의 interop이 필요할 것이라고 생각하니? 어떤 .NET 오픈 소스 컴포넌트가 HTML을 RTF로 변환 할 수 있습니까?

집에서 재배 한 경우 XSLT와 XHTML을 함께 사용할 수 있습니까? 그렇다면 XHTML을 생성하기 위해 어떤 구성 요소를 권장합니까? 그렇지 않으면, 가정에서 성장한 다른 곳을 추천합니다.

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

+0

가까운 기술 작업에 대한 배경 지식을 얻을 수 있습니까? 근데 왜 이러는거야? 어떤 프로그램이 RTF 최종 제품을 볼 것입니까? – Albert

+0

@Albert. RTF 보고서를 생성하기 위해 데이터가 DB에서 추출됩니다. 모든 RTF 형식은 현재 보고서 (하드 코드 ... ourch!)에서 사양에 따라 수행되지만, 일부 경우에는 클라이언트가 일부 섹션의 서식을 지정하기를 원하므로 웹 애플 리케이션과 그들이 그것을 저장할 때, 나는 DB에서 끌어와 보고서에 삽입됩니다 서식이 RTF의 덩어리로 변환합니다. – nickytonline

+0

음 ... 전 완전히 혼란 스럽습니다. 여기서 데이터 흐름과 변환을 이해하려고합니다. 지금까지 나는 다음을 가지고 있습니다 : DB -> RTF -> RTF * -> DB 하지만 grep과 DB로 덤프 할 수있는 RTF 파서가 있다는 것을 의미하는 것처럼 보일 수도 있습니다. DB가 RTF 데이터를 보유한다는 것을 의미하지 않는다면? – Albert

답변

0

나는 작업을하지 않기 때문에 스스로하는 것이 좋습니다. 정말로 그 복잡한. 첫째, 가장 쉬운 방법은 하나의 Xml 형식을 다른 Xml 형식으로 변환하는 것입니다. C#에서 XML 문서를 변환하는 것은 매우 쉽습니다.

다음은 시작하기 좋은 msdn 블로그 게시물입니다. Mike는 심지어 제 3자를 다루는 것이 손으로하는 것이 더 쉽다는 것을 언급합니다.

link

사실, 난 이미이 질문에 here 대답했다. 맞춰 보면이게 중복됩니다.

+0

@Ty - HTML이 완벽하지 않으면 XHTML로 변환 할 때 추천 할 내용이 궁금합니다. – nickytonline

+0

@nickyt HTML을 엉망으로 만들면이 일은 정말 고통 스러울 것입니다. HTML/RTF가 제어되는 앱을 몇 개 만들었지 만 굵은 태그, 강력한 태그 및 닫히지 않은 태그를 보려면 먼저 데이터를 표준화 한 두 단계의 접근 방식을 살펴볼 필요가 있습니다. 다음 변환하십시오. 나는 XHTML에 대해 걱정할 필요가 없다고 생각한다. –

+0

@Ty - 자택으로갑니다. – nickytonline

0

RTF 변환기 HTML Cute Editor for .NET이있는 웹용 WYSIWYG 서식있는 텍스트 편집기 (RTE)를 방금 보았습니다. 누구든지이 구성 요소에 대한 경험이 있습니까? 웹 기반 RTE에 대한 나의 주된 경험은 CKEditor (fckEditor)와 TinyMCE 였지만, CKEditor와 TinyMCE에는 HTML to RTF 변환기가 내장되어 있지 않다는 것을 알 수 있습니다.

1

어떤 가치가 있으며 특별한 순서가 아닙니다.

이전에 RTF로 내보내고 RTF에서 MSF로 조작되는 문제의 RTF를 가져 오려고했습니다.

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

O'Reilly 포켓 북을 좋은 주제의 MS 문서를 읽는 데 도움이되었지만 각 버전별로 많이 있습니다.

RTF가 정규 표현식을 사용하여 코딩되는 방식 때문에 엄청나게 어려운 작업이므로 테스트하고 작동하기 위해 조심스럽게 다루고 집중해야합니다. 저는 정규식을 내장 한 Mac 편집기를 사용하여 각 섹션을 꾸준히 테스트하고 코드에 빌드 할 수있었습니다.

버전 수가 많기 때문에 버전간에 많은 비 호환성이 있지만 많은 공통점이 있으며 결국에는 내가 원하는 곳을 얻기가 상당히 어렵거나 쉽습니다 (약 1 주일의 읽기와 1 주일 후 코딩)하고 정말로 간단한 버전을 만들어야합니다.

상업용 솔루션을 찾지 못했지만 예산 때문에 무료 여야 만 했으므로 예산을 많이 삭감해야했지만 원하는 것을 선택하고 지원하도록 최선을 다했습니다.

저는 HTML/XML/XHTML에서 어디서 왔는지 생각하지 않습니다. CSV 형식을 변환 중이 었는데, RTF였습니다.

DIY 또는 구매를 권할 지 확실하지 않습니다. 아마도 균형 DIY에 있지만 당신의 상황에 따라 달라질 것입니다.

편집 : 콘텐츠에서 RTF로 전환하는 것이 그 반대의 경우보다 쉽습니다.

BTW는 RTF 버전의 MS Fior을 비판하지 않습니다.이 제품은 자사 제품과 고유 제품이므로 원하는대로 할 수 있습니다.

0

웹 응용 프로그램에서 서식있는 텍스트 형식의 일부 편지 병합 기능을 구현해야하므로 필자는 내 경험을 공유하는 것이 좋을 것이라고 생각했습니다. 잘 this essay

Google 문서 도구 API에 작품과 같이, XSLT를 사용하여 Google 문서 도구 기능

  • 을 활용하여 Google 문서 도구 API를 사용하여

    • :

      기본적으로, 나는 두 가지 대안을 탐구. 이 같은 페이지 나누기로 HTML 문서를 업로드 할 때 문제가있다 :

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

      및 RTF의 문서를 변환하기 위해 Google에 요청, 당신은 내 요구 사항에 맞지 않는 모든 휴식을 잃게됩니다. 그러나 페이지 나누기가 문제가되지 않는다면이 해결 방법을 확인하십시오.

      XSLT 솔루션은 작동합니다 ... 일종의.

      System.Xml 클래스를 우회하여 MSXML3 COM 개체를 직접 참조하는 경우에 작동합니다. 그렇지 않으면 나는 그것을 작동하게 만들 수 없었다. 또한 텍스트 색상, 크기 등을 무시하고 기본 서식 및 태그를 제외한 모든 것을 존중하는 것으로 보입니다. 그러나, 그것은 페이지 나누기를 기립니다. :-)

      내가 작성한 빠른 라이브러리는 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; 
             } 
            } 
           } 
          } 
      
      
      
      }