通过Word.Interop将HTML插入Word导致不同的段落标题字体大小

时间:2017-03-02 06:38:04

标签: c# html ms-word office-interop

在我的一个程序中,我需要在某个范围内将一些简单的htmls插入到word文档中,所以我使用这样的函数来用于我想要的每个范围

 public static void AddHtmlTextAtRange(this Range range, string html)
        {
            var tempFilename = string.Format("{0}{1}{2}", Path.GetTempPath(), Guid.NewGuid().ToString(), ".html");
            var formattedHtml = TextToHtmlPreProcessing(html);
            File.WriteAllText(tempFilename, string.Format("<html> {0} </html>", formattedHtml));

            range.InsertFile(tempFilename, ConfirmConversions:false);

            File.Delete(tempFilename);
        }

问题在于,在某些情况下,当我在这样的范围内添加html文件时,会出现一些段落标题大小问题。

好像它取决于第一个int文件的敌人。 如果它的标题 - 则数字字体更大。

文件示例:

<html>
    <h2 style=''><span>Document Purpose</span></h2>Some data info<span></span>
    <h2 style=''><span>Scope & Requirements Traceability</span></h2>
    Some data too
    <table>
        <tr>
            <td style='border-collapse:collapse;border:1px solid black;font-weight: bold; background:#BFBFBF'>Ref</td>
            <td style='border-collapse:collapse;border:1px solid black;font-weight: bold; background:#BFBFBF'>Requirement</td>
            <td style='border-collapse:collapse;border:1px solid black;font-weight: bold; background:#BFBFBF'>Req Met (Y/N)</td>
            <td style='border-collapse:collapse;border:1px solid black;font-weight: bold; background:#BFBFBF'>Action taken</td>
        </tr>
        <tr>
            <td style='border-collapse:collapse;border:1px solid black;'>&nbsp;</td>
            <td style='border-collapse:collapse;border:1px solid black;'>&nbsp;</td>
            <td style='border-collapse:collapse;border:1px solid black;'>&nbsp;</td>
            <td style='border-collapse:collapse;border:1px solid black;'>&nbsp;</td>
        </tr>
        <tr>
            <td style='border-collapse:collapse;border:1px solid black;'>&nbsp;</td>
            <td style='border-collapse:collapse;border:1px solid black;'>&nbsp;</td>
            <td style='border-collapse:collapse;border:1px solid black;'>&nbsp;</td>
            <td style='border-collapse:collapse;border:1px solid black;'>&nbsp;</td>
        </tr>
    </table>
    <h2 style=''><span>Background</span></h2>
    Some info
    <h2 style=''><span>Risks, Assumptions, Issues and Dependencies</span></h2>
    Risks info
</html>

输出示例: enter image description here

否则,如果首先进入文本并且在进入标题之后 - 一切看起来都很好。

(从头顶上随意删除文本absolutley :))

文件示例:

<html>
    I dont know
    <h2 style=''><span>Test1</span></h2>
    I dont know
    <h2 style=''><span>Test2</span>
    </h2>
    I dont know too
    <h2 style=''><span>Test3</span>
    </h2>
    Some datainfo
    <h2 style=''><span>Test4</span>
    </h2>
    Test
</html>

输出示例:

enter image description here

所以,问题是,如何摆脱这个第一个标题更大的问题?

如果我在开始之后立即放置类似<p>&nbsp;</p>之类的内容,那会有一些工作方法,但它会引起额外的新线,我真的不希望在那里。

也许有一些opton可以关闭它?

1 个答案:

答案 0 :(得分:1)

这是一个如何移除占位符的示例&#34;&lt; p&gt; TEMPTEXT&lt; / p&gt;&#34;

private static void InsertHtml(Word.Range range, string html)
{
    File.WriteAllText("temp.html", html);

    range.InsertFile(Path.GetFullPath("temp.html"), Type.Missing, false);

    //this is the interesting part
    if (range.Find.Execute("TEMPTEXT")) {
        //range now points to only the text TEMPTEXT

        //We make sure to take the entire paragraph
        var paragraph = range.Paragraphs[1];

        //Then we remove the entire paragraph range
        var paragraphRange = paragraph.Range;
        paragraphRange.Delete();
    }
}

我获得了这样的范围对象:

var doc = app.ActiveDocument;
var range = doc.StoryRanges[WdStoryType.wdMainTextStory];
range.Collapse(WdCollapseDirection.wdCollapseEnd);