سؤال

لقد شاهدت بالفعل الكثير من الوظائف على الموقع ل RTF إلى HTML وبعض المشاركات الأخرى التي تتحدث عن بعض HTML لتحويل RTF، لكنني أحاول حقا الحصول على انهيار كامل لما يعتبر المنتج التجاري الأكثر استخداما، مفتوحا مصدر مصدر أو إذا أوصي الناس بالذهاب إلى المنزل نمت. الاعتذار إذا كنت تعتبر سؤالا مكررا، لكنني أحاول إنشاء مصفوفة منتج لمعرفة ما هو الأكثر قابلية للتطبيق لتطبيقنا. أعتقد أيضا أن هذا سيكون مفيدا للآخرين.

سيتم استخدام المحول في تطبيق ASP.NET 2.0 (نقوم بالترقية إلى 3.5 قريبا ولكن لا يزال يتصارع مع أجهزة الإنترنت) باستخدام SQLServer 2005 (قريبا 2008) ك DB.

من قراءة بعض المشاركات، sautinsoft. يبدو أن تحظى بشعبية كمكون تجاري. هل هناك مكونات تجارية أخرى تنصح بتحويل HTML إلى RTF؟ السعر يهم، ولكن حتى لو كان قليلا على الجانب باهظ الثمن، يرجى ذكر ذلك.

للحصول على المصدر المفتوح، قرأت ذلك OpenOffice.org. يمكن تشغيلها كخدمة بحيث يمكن تحويل الملفات. ومع ذلك، يبدو أن هذا فقط Java مقرها. أتصور، سأحتاج إلى نوع من interop لاستخدام هذا؟ ما هي مكونات المصدر المفتوح، إن وجدت، هناك لتحويل HTML إلى RTF؟

للمنزل نمت، هو XSLT الطريق للذهاب مع XHTML؟ إذا كان الأمر كذلك، فما المكون الذي تنصح به لتوليد XHTML؟ خلاف ذلك، ما avenuses المنزل الصناعي الآخر الذي تنصح به.

أيضا، يرجى ملاحظة أنني لا أهتم حاليا كثيرا حول RTF إلى HTML. إذا كان مكون تجاري يقدم هذا والسعر لا يزال هو نفسه، فغرم، وإلا فلن يذكر ذلك.

هل كانت مفيدة؟

المحلول

أود أن أوصي به بنفسك كما هي المهمة ليست حقا هذا المعقدة. أولا، أسهل طريقة تحويل تنسيق XML واحد إلى تنسيق XML آخر هو مع XSLT. تحويل مستندات XML في C # سهل للغاية.

فيما يلي مشاركة مدونة MSDN جيدة لتبدأ. يذكر مايك حتى أنه كان من الأسهل القيام بذلك باليد التعامل مع طرف ثالث.

حلقة الوصل

في الواقع، أجبت بالفعل على هذا السؤال هنا. وبعد تخمين أن يجعل هذا مكررة.

نصائح أخرى

ما يستحقه وفي أي أمر معين.

منذ فترة أردت التصدير إلى RTF ثم استيراد من RTF RTF في السؤال الذي يتم التعامل معه بواسطة MS Word.

المشكلة الأولى هي RTF ليست معيارا مفتوحا. إنها معيار MS داخلي وهناك تؤدي إلى تغييرها كما وعندما يعجبهم ولا تقلق عموما بشأن التوافق. حاليا إصدارات RTF هي 1.3 إلى 1.9 وكلها مختلفة. داخليا يستخدمون توقيع للقياس فقط للحصول على قياس جيد.

لقد اشتريت كتاب الجيب O'Reilly حول هذا الموضوع الذي ساعد وقراءة الكثير من وثائق MS وهو أمر جيد، ولكن هناك الكثير منه والكثير لكل إصدار.

بسبب الطريقة التي يتم بها ترميز RTF باستخدام Regex لمعالجة العمل الشاق بشكل لا يصدق ويحتاج إلى معالجة دقيقة وتركيز لاختبار والحصول على العمل. يمكنني استخدام محرر Mac الذي تم إنشاؤه في Regex حتى أتمكن من اختبار كل قسم وبصورة بناء عليه في التعليمات البرمجية.

بسبب عدد الإصدارات، هناك الكثير من عدم التوافق بين الإصدارات ولكن هناك الكثير من القواسم المشتركة وفي النهاية كان من الصعب بشكل معقول / سهل الوصول إلى حيث أردت (بعد قراءة أسابيع وترميز أسابيع) نسخة بسيطة حقا.

لم أجد مطلقا حل تجاري، لكني اضطررت إلى أن أحصل على ثباتا بسبب الميزانية بحيث يقطع الكثير ولكن رعاية كبيرة في اختيار واحد للتأكد من أن ما تريد ولديه الدعم.

لا أفكر في مكان وجودك من HTML / XML / XHTML، كنت أقوم بتحويل تنسيقات CSV، إنها RTF.

لست متأكدا مما إذا كنت سأصرف إلى DIY أو شراء. ربما على التوازن DIY ولكن ظروفك الخاصة سوف تملي ذلك.

تحرير: شيء واحد يحدث من المحتوى إلى RTF أسهل من العكس.

راجع للشغل لا ينتقد السيدة Fior إصدارات RTF، مهلا أنها الخاصة بهم ومملقها حتى يتمكنوا من فعل ما يحلو لهم.

لقد جئت للتو عبر محرر النصوص الغنية WYSIWYG لهذا (RTE) على الويب الذي يحتوي أيضا على محول HTML إلى RTF محرر لطيف ل .NET. وبعد هل لدى أي شخص أي تجربة مع هذا المكون؟ كانت تجربتي الرئيسية ل RTES القائم على الويب CKEditor (FCKeditor) و TinyMCE ولكن بقدر ما أستطيع أن أخبر Ckeditor و Tinymce ليس لديك HTML لتحويل RTF المدمج.

نظرا لأنني مطالبا بتنفيذ بعض إمكانيات MailMerge مع تنسيق النص الغني على تطبيق ويب، فقد ظننت أنه من الجيد مشاركة تجربتي.

في الأساس، استكشفت بديلين:

  • استخدام API Google Docs للاستفادة من قدرات Google Docs
  • باستخدام XSLT، كما هو موضح في هذا المقال

يعمل API من Google Docs بشكل جيد. المشكلة هي، عند تحميل مستند HTML مع فواصل الصفحات، مثل هذا:

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

واطلب من جوجل تحويل الوثيقة في 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 إذا كان ذلك ممكنا.


مايكروسوفت وورد كوم

لم أفحث كثيرا في هذا الموضوع كحالة استخدامي هي استخدام الوظيفة على خادم يجعل مكونات COM ليست اختيارا رائعا.


XHTML2RTF.

مثل ذكر @ mtimcorey يمكنك استخدام مكتبة التعليمات البرودة هذه.

العيوب هي:

  • محدودة دعم HTML و CSS
  • ليس حقا
  • ...

نماذج ويندوز متصفح الويب

مثل @ jerry المذكورة يمكنك استخدام نماذج Windows WebBrowser مراقبة.

العيوب هي:

  • إشارة إلى system.windows.forms.
  • يستخدم النسخ واللصق (إشكالية لمكثبتها)
  • يعمل فقط في موضوع STA

تشمل الميزات غير المدعومة:

  • الخطوط
  • الألوان
  • قوائم مرقمة
  • strikethrough (del عنصر)
  • ...

devexpress.

نموذج رمز "بول الخامس" من مركز دعم 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.
  • أتش تي أم أل 5.
  • CSS.
  • XHTML.

العيوب هي:

  • لست متأكدا من مدى نشاط التطوير
  • السعر

استخدام KnowledgeBase:


ديني

إذا كنت ترغب فقط في دعم وظائف محدودة، فيمكنك كتابة المحول الخاص بك. لن أوصي بهذا إذا كانت مجموعة الميزات المدعومة كبيرة جدا.

لدي صغيرة نموذج المشروع هنا ولكن هو فقط لأغراض تعليمية في حالتها الحالية.


openxml

إذا كان تنسيق OpenXML هو أيضا موافق لحالة استخدام الخاص بك يمكنك استخدام HTMLTOOPENXML Nuget Package.. وبعد إنه مجاني ودعم جميع الميزات التي اختبرتها الحلول الأخرى ضد.

المشروع ويستند على افتح 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