通过 Word.Interop 将 HTML 插入 Word 会导致不同的段落 headers 字体大小
Inserting HTML into Word via Word.Interop cause different paragraph headers font size
在我的一个程序中,我需要在某个范围内将一些简单的 html 插入到 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
文件时,会出现一些段落 header 大小问题。
这似乎取决于敌人的第一个 int 文件。
如果是 header - 则数字字体更大。
文件示例:
<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;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
</tr>
<tr>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
</tr>
</table>
<h2 style=''><span>Background</span></h2>
Some info
<h2 style=''><span>Risks, Assumptions, Issues and Dependencies</span></h2>
Risks info
</html>
输出示例:
否则,如果先是文本,然后是 header - 一切看起来都很好。
(没关系,它绝对是我脑海中随机出现的文字 :))
文件示例:
<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>
输出示例:
所以,问题是,如何解决第一个 header 更大尺寸的问题?
如果我在开始后立即放置类似的内容 <p> </p>
,这是一种解决方法,但它会导致额外的换行,我真的不想在那里。
也许有一些选项可以关闭它?
这是一个如何删除占位符“
TEMPTEXT
”的示例
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);
在我的一个程序中,我需要在某个范围内将一些简单的 html 插入到 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
文件时,会出现一些段落 header 大小问题。
这似乎取决于敌人的第一个 int 文件。 如果是 header - 则数字字体更大。
文件示例:
<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;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
</tr>
<tr>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
<td style='border-collapse:collapse;border:1px solid black;'> </td>
</tr>
</table>
<h2 style=''><span>Background</span></h2>
Some info
<h2 style=''><span>Risks, Assumptions, Issues and Dependencies</span></h2>
Risks info
</html>
输出示例:
否则,如果先是文本,然后是 header - 一切看起来都很好。
(没关系,它绝对是我脑海中随机出现的文字 :))
文件示例:
<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>
输出示例:
所以,问题是,如何解决第一个 header 更大尺寸的问题?
如果我在开始后立即放置类似的内容 <p> </p>
,这是一种解决方法,但它会导致额外的换行,我真的不想在那里。
也许有一些选项可以关闭它?
这是一个如何删除占位符“
TEMPTEXT
”的示例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);