InsertHtml

InsertHtml(string)

يقوم بإدراج سلسلة HTML في المستند.

public void InsertHtml(string html)
معامليكتبوصف
htmlStringسلسلة HTML لإدراجها في المستند.

ملاحظات

يمكنك استخدام هذه الطريقة لإدراج جزء HTML أو مستند HTML بأكمله.

أمثلة

يوضح كيفية استخدام منشئ المستندات لإدراج محتوى HTML في مستند.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

const string html = "<p align='right'>Paragraph right</p>" + 
                    "<b>Implicit paragraph left</b>" +
                    "<div align='center'>Div center</div>" + 
                    "<h1 align='left'>Heading 1 left.</h1>";

builder.InsertHtml(html);

// يؤدي إدراج كود HTML إلى تحليل تنسيق كل عنصر إلى تنسيق نص المستند المكافئ.
ParagraphCollection paragraphs = doc.FirstSection.Body.Paragraphs;

Assert.AreEqual("Paragraph right", paragraphs[0].GetText().Trim());
Assert.AreEqual(ParagraphAlignment.Right, paragraphs[0].ParagraphFormat.Alignment);

Assert.AreEqual("Implicit paragraph left", paragraphs[1].GetText().Trim());
Assert.AreEqual(ParagraphAlignment.Left, paragraphs[1].ParagraphFormat.Alignment);
Assert.True(paragraphs[1].Runs[0].Font.Bold);

Assert.AreEqual("Div center", paragraphs[2].GetText().Trim());
Assert.AreEqual(ParagraphAlignment.Center, paragraphs[2].ParagraphFormat.Alignment);

Assert.AreEqual("Heading 1 left.", paragraphs[3].GetText().Trim());
Assert.AreEqual("Heading 1", paragraphs[3].ParagraphFormat.Style.Name);

doc.Save(ArtifactsDir + "DocumentBuilder.InsertHtml.docx");

يوضح كيفية تنفيذ دمج البريد باستخدام معاودة الاتصال المخصصة التي تتعامل مع بيانات الدمج في شكل مستندات HTML.

public void MergeHtml()
{
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    builder.InsertField(@"MERGEFIELD  html_Title  \b Content");
    builder.InsertField(@"MERGEFIELD  html_Body  \b Content");

    object[] mergeData =
    {
        "<html>" +
            "<h1>" +
                "<span style=\"color: #0000ff; font-family: Arial;\">Hello World!</span>" +
            "</h1>" +
        "</html>", 

        "<html>" +
            "<blockquote>" +
                "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>" +
            "</blockquote>" +
        "</html>"
    };

    doc.MailMerge.FieldMergingCallback = new HandleMergeFieldInsertHtml();
    doc.MailMerge.Execute(new[] { "html_Title", "html_Body" }, mergeData);

    doc.Save(ArtifactsDir + "MailMergeEvent.MergeHtml.docx");
}

/// <summary>
/// إذا واجه دمج البريد MERGEFIELD الذي يبدأ اسمه بالبادئة "html_"،
/// تقوم وظيفة الارتداد هذه بتحليل بيانات الدمج الخاصة بها كمحتوى HTML وتضيف النتيجة إلى موقع المستند الخاص بـ MERGEFIELD.
/// </summary>
private class HandleMergeFieldInsertHtml : IFieldMergingCallback
{
    /// <summary>
    /// يتم استدعاؤها عندما يقوم دمج البريد بدمج البيانات في MERGEFIELD.
    /// </summary>
    void IFieldMergingCallback.FieldMerging(FieldMergingArgs args)
    {
        if (args.DocumentFieldName.StartsWith("html_") && args.Field.GetFieldCode().Contains("\\b"))
        {
            // أضف بيانات HTML المحللة إلى نص المستند.
            DocumentBuilder builder = new DocumentBuilder(args.Document);
            builder.MoveToMergeField(args.DocumentFieldName);
            builder.InsertHtml((string)args.FieldValue);

            // نظرًا لأننا قمنا بالفعل بإدراج المحتوى المدمج يدويًا،
            // لن نحتاج إلى الاستجابة لهذا الحدث عن طريق إرجاع المحتوى عبر خاصية "النص".
            args.Text = string.Empty;
        }
    }

    void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args)
    {
        //لا تفعل شيئا.
    }
}

أنظر أيضا


InsertHtml(string, bool)

يقوم بإدراج سلسلة HTML في المستند.

public void InsertHtml(string html, bool useBuilderFormatting)
معامليكتبوصف
htmlStringسلسلة HTML لإدراجها في المستند.
useBuilderFormattingBooleanقيمة تشير إلى ما إذا كان التنسيق المحدد فيDocumentBuilder يتم استخدام كتنسيق أساسي للنص المستورد من HTML.

ملاحظات

يمكنك استخدام هذه الطريقة لإدراج جزء HTML أو مستند HTML بأكمله.

عندماuseBuilderFormatting يكونخطأ شنيع ، DocumentBuilder تم تجاهل التنسيق، ويعتمد تنسيق text المُدرج على تنسيق HTML الافتراضي. ونتيجةً لذلك، يبدو النص كما هو مُعرَّف في المتصفحات.

عندماuseBuilderFormatting يكونحقيقي يعتمد تنسيق للنص المدرج علىDocumentBuilder التنسيق، ويبدو النص كما لو تم إدراجه باستخدامWrite .

أمثلة

يوضح كيفية تطبيق تنسيق منشئ المستندات أثناء إدراج محتوى HTML.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// تعيين محاذاة النص للمنشئ، وإدراج فقرة HTML بمحاذاة محددة، وأخرى بدون محاذاة.
builder.ParagraphFormat.Alignment = ParagraphAlignment.Distributed;
builder.InsertHtml(
    "<p align='right'>Paragraph 1.</p>" +
    "<p>Paragraph 2.</p>", useBuilderFormatting);

ParagraphCollection paragraphs = doc.FirstSection.Body.Paragraphs;

// تم تحديد محاذاة الفقرة الأولى. عند تحليل InsertHtml لشيفرة HTML،
// قيمة محاذاة الفقرة الموجودة في كود HTML تحل دائمًا محل قيمة منشئ المستند.
Assert.AreEqual("Paragraph 1.", paragraphs[0].GetText().Trim());
Assert.AreEqual(ParagraphAlignment.Right, paragraphs[0].ParagraphFormat.Alignment);

// الفقرة الثانية ليس لها محاذاة محددة. يمكن ملء قيمة محاذاة الفقرة الثانية.
// حسب قيمة المنشئ اعتمادًا على العلم الذي مررناه إلى طريقة InsertHtml.
Assert.AreEqual("Paragraph 2.", paragraphs[1].GetText().Trim());
Assert.AreEqual(useBuilderFormatting ? ParagraphAlignment.Distributed : ParagraphAlignment.Left,
    paragraphs[1].ParagraphFormat.Alignment);

doc.Save(ArtifactsDir + "DocumentBuilder.InsertHtmlWithFormatting.docx");

أنظر أيضا


InsertHtml(string, HtmlInsertOptions)

يُدرج سلسلة HTML في المستند. يسمح بتحديد خيارات إضافية.

public void InsertHtml(string html, HtmlInsertOptions options)
معامليكتبوصف
htmlStringسلسلة HTML لإدراجها في المستند.
optionsHtmlInsertOptionsالخيارات المستخدمة عند إدراج سلسلة HTML.

ملاحظات

يمكنك استخدام هذه الطريقة لإدراج جزء HTML أو مستند HTML بأكمله.

أمثلة

يوضح كيفية استخدام الخيارات أثناء إدراج HTML.

Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

builder.InsertField(" MERGEFIELD Name ");
builder.InsertParagraph();
builder.InsertField(" MERGEFIELD EMAIL ");
builder.InsertParagraph();

// بشكل افتراضي، يقوم "DocumentBuilder.InsertHtml" بإدراج جزء HTML ينتهي بعنصر HTML على مستوى الكتلة،
// عادةً ما يقوم بإغلاق عنصر مستوى الكتلة هذا وإدراج فاصل فقرة.
// ونتيجة لذلك، تظهر فقرة فارغة جديدة بعد إدراج المستند.
// إذا قمنا بتحديد "HtmlInsertOptions.RemoveLastEmptyParagraph"، سيتم إزالة تلك الفقرات الفارغة الإضافية.
builder.MoveToMergeField("NAME");
builder.InsertHtml("<p>John Smith</p>", HtmlInsertOptions.UseBuilderFormatting | HtmlInsertOptions.RemoveLastEmptyParagraph);
builder.MoveToMergeField("EMAIL");
builder.InsertHtml("<p>jsmith@example.com</p>", HtmlInsertOptions.UseBuilderFormatting);

doc.Save(ArtifactsDir + "MailMerge.RemoveLastEmptyParagraph.docx");

أنظر أيضا