大家好,我正在使用 HTML Agility 和 Openxml 将我的 html 内容转换为 word 文件内容。
<div>
<div id="container">
<div>
<div>
<!--content starts here//-->
<form name="questions" method="post">
<img src="../../content/0/Static UPload/Divya_3LevelLeftMenu_Operating System v8.0 English/unit9/lesson27/../../images/less_title_27.jpg" width="750" height="75">
<div id="title">Exercise
<table border="0" cellspacing="20" cellpadding="0">
<tr>
<td><b> Student's Name: </b><br>
<input type="text" name="b1" size="45"></td>
<td><b>Class:</b><br>
<input type="text" name="b2" size="45"></td>
</tr>
</table>
<td width="176" align="left"> </td>
<tr><td width="779" align="left"> </td>
</tr>
<ol>
<li>Describe the purpose of Windows Update.
<p align="left"><textarea name="a1" rows="10" wrap="VIRTUAL" cols="55"></textarea></p>
</li>
</ol>
<ol start="2">
<li>Explain why using Windows Update is critical to maintaining an operating system.
<p align="left"><textarea name="a2" rows="10" wrap="VIRTUAL" cols="55"></textarea></p>
</li>
</ol>
<ol start="3">
<li>Summarize the process used to access and install Windows Updates.
<p align="left"><textarea name="a3" rows="10" wrap="VIRTUAL" cols="55"></textarea></p>
</li>
</ol>
<ol start="4">
<li>Compare and contrast using Windows Update and using a Windows Service Pack.
<p align="left"><textarea name="a4" rows="10" wrap="VIRTUAL" cols="55"></textarea></p>
</li>
</ol>
<center><p><b>Note: You must print your completed exercise
to submit to your instructor.</b><br>
<b class="style1"><u>Do Not</u></b> close this window without printing your exercise or your answers will be lost.<br><br>
<input onclick="reLoadMe(document.questions) " type="button" value="Print Preview">
</p>
</center>
</form>
<div align="center"><a href="#top"><img src="../../content/0/Static UPload/Divya_3LevelLeftMenu_Operating System v8.0 English/unit9/lesson27/../../images/back_to_top.jpg" alt="" width="40" height="21" border="0"></a>
</div></div></div></div></div></div>
这是我用来转换的 html 内容。 但是我在解析它时遇到以下错误。
at NotesFor.HtmlToOpenXml.TableContext.get_CurrentTable()
at NotesFor.HtmlToOpenXml.HtmlConverter.ProcessTableColumn(HtmlEnumerator en)
at NotesFor.HtmlToOpenXml.HtmlConverter.ProcessHtmlChunks(HtmlEnumerator en, String endTag)
at NotesFor.HtmlToOpenXml.HtmlConverter.Parse(String html)
at WebApplication3.WebForm3.Button1_Click(Object sender, EventArgs e) in C:\Users\USER\Documents\Visual Studio 2008\Projects\Piyush_training\WebApplication3\WebForm3.aspx.cs:line 102
我的代码如下。
using DocumentFormat.OpenXml.Drawing;
using NotesFor.HtmlToOpenXml;
using System.IO;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using wp = DocumentFormat.OpenXml.Drawing.Wordprocessing;
using DocumentFormat.OpenXml;
using HtmlAgilityPack;
using System.Text;
protected void Button1_Click(object sender, EventArgs e)
{
const string filename = "C:/Temp/test.docx";
Response.ContentEncoding = System.Text.Encoding.UTF7;
System.Text.StringBuilder SB = new System.Text.StringBuilder();
System.IO.StringWriter SW = new System.IO.StringWriter();
string pagecontent=上面的html内容; HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(页面内容); 如果(文档==空); doc.OptionCheckSyntax = true; doc.OptionAutoCloseOnEnd = true; doc.OptionFixNestedTags = true; int errorCount = doc.ParseErrors.Count(); 字符串输出 = "";
doc.Save(SW);
System.Web.UI.HtmlTextWriter htmlTW = new System.Web.UI.HtmlTextWriter(SW);
strBody = "<html>" + "<body>" + "<div><b>" + htmlTW.InnerWriter.ToString() + "</b></div>" + "</body>" + "</html>";
string html = strBody;
try
{
using (MemoryStream generatedDocument = new MemoryStream())
{
using (WordprocessingDocument package = WordprocessingDocument.Create(generatedDocument, WordprocessingDocumentType.Document))
{
MainDocumentPart mainPart = package.MainDocumentPart;
if (mainPart == null)
{
mainPart = package.AddMainDocumentPart();
new Document(new Body()).Save(mainPart);
}
HtmlConverter converter = new HtmlConverter(mainPart);
converter.ExcludeLinkAnchor = true;
converter.RefreshStyles();
converter.ImageProcessing = ImageProcessing.AutomaticDownload;
Body body = mainPart.Document.Body;
converter.ConsiderDivAsParagraph = false;
var paragraphs = converter.Parse(html);
for (int i = 0; i < paragraphs.Count; i++)
{
body.Append(paragraphs[i]);
}
mainPart.Document.Save();
}
File.WriteAllBytes(filename, generatedDocument.ToArray());
}
System.Diagnostics.Process.Start(filename);
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
最佳答案
您可能想尝试一种不同的方法来从 HTML 组装您的 word 文档。根据您的要求,您可以采用以下几种方法之一:
- 像您所做的那样使用 OpenXmlSdk 组装文档,或:
- 使用altChunk方法
altChunk, is a special feature of Open XML word processing markup that enables you to embed an entire Open XML document or an html page at a specific location in a document
Eric White 有很多博客文章描述了这个过程,下面是他的文章中突出显示嵌入 html 的摘录:
使用 Open XML SDK V2:
using (WordprocessingDocument myDoc = WordprocessingDocument.Open("Test1.docx", true))
{
string altChunkId = "AltChunkId1";
MainDocumentPart mainPart = myDoc.MainDocumentPart;
AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.WordprocessingML, altChunkId);
using (FileStream fileStream = File.Open("TestInsertedContent.docx", FileMode.Open))
chunk.FeedData(fileStream);
AltChunk altChunk = new AltChunk();
altChunk.Id = altChunkId;
mainPart.Document
.Body
.InsertAfter(altChunk, mainPart.Document.Body.Elements<Paragraph>().Last());
mainPart.Document.Save();
}
整篇文章连同示例代码(底部):How to Use altChunk for Document Assembly
关于c# - 转换 Html Contenttpo Word 文档时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7660612/