在Word指定位置插入富文本域值(html文本)
遇到此問題,首先想到的就是各種百度。結(jié)果度娘了一會(huì)并沒有發(fā)現(xiàn)有用的有效的解決方法,哎,看來還得靠自己啊。
首先整理了下手頭上的資源,一是HtmlAgilityPack,專門解析Html文本用的;二是我有ASPOSE.Word。
再整理下思路:在Word中插入Html,首先有一點(diǎn)是肯定的,Word跟Html都是Document結(jié)構(gòu),這點(diǎn)應(yīng)該是沒啥懷疑的。如此的話就感覺好辦多了,無非就是Document上插入幾個(gè)節(jié)點(diǎn),在Html插入節(jié)點(diǎn)的方式完全可以運(yùn)用到此地方。
那么第一種解決方法就是:首先把Word轉(zhuǎn)換為Html,然后在指定位置插入當(dāng)前要插入的Html代碼,然后再保存成Word格式的文檔。
第二種方式就是:把Html解析出有效的文本,利用Word增加段落的方式添加從Html中解析出來的文本。
HtmlAgilityPack.HtmlDocument hd = new HtmlAgilityPack.HtmlDocument();
hd.LoadHtml(txtContent.Value);
hd.DocumentNode.Elements("p");
通過此方式就可以獲取到富文本域里面的所有文本信息。但是此種方式獲取到的節(jié)點(diǎn)在ASPOSE類里面不識(shí)別。
再繼續(xù)折騰吧,回到ASPOSE上面。找?guī)椭臋n,尋百度。
Document doc = new Document(Server.MapPath("~/tem_body.doc"));
DocumentBuilder docBuilder = new DocumentBuilder(doc);
docBuilder.InsertHtml(txtContent.Value);
doc.Save(Server.MapPath("~/") + "/TestWord121.doc");
打開保存后的文件,My God,這樣就可以了。再試試帶圖片的,也很不錯(cuò),圖片也可以正常在Word里面正常顯示。看來此插件確實(shí)很強(qiáng)大啊,不過到目前還并沒有解決我的問題。就是插入的位置問題。目前它是插入的頭部,即Body的Paragraph 0 處。
接下來就是解決如何把HTML文本插入到指定位置,想了想得首先知道要插入的位置,度娘了一會(huì)發(fā)現(xiàn)了東東。DocumentExplorer,它可以查看Word文檔里面的Doc結(jié)構(gòu)。
速度找了一個(gè),打開后就可以清晰地看到Word文檔:
這樣的話就知道自己要插入的位置在那個(gè)地方。最簡(jiǎn)單的就是設(shè)置好模板,找到要插入的位置節(jié)點(diǎn)。
Document temdoc = new Document(Server.MapPath("~/tem.doc"));
Document doc = new Document();
DocumentBuilder docBuilder = new DocumentBuilder(doc);
docBuilder.InsertHtml(txtContent.Value);
docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
temdoc.AppendDocument(doc, ImportFormatMode.KeepSourceFormatting);
DocumentBuilder temdocBuilder = new DocumentBuilder(temdoc);
var temParas = temdocBuilder.Document.Sections[1].Body.Paragraphs;
//int intIndexer = 0;
foreach (Paragraph para in temParas)
{
// 這里面隨便指定了一個(gè)位置,在Paragraphs的第六個(gè)節(jié)點(diǎn)處
temdocBuilder.Document.Sections[0].Body.InsertAfter(para.Clone(true), temdocBuilder.Document.Sections[0].Body.Paragraphs[5 + intIndexer - 1].NextSibling);
intIndexer++;
}
temdocBuilder.Document.Sections.RemoveAt(1);
temdoc.Save(Server.MapPath("~/") + "/TestWord1212.doc");
再次保存后打開測(cè)試Word文檔,符合自己的預(yù)期,解決了把HTML文本插入到Word文檔的指定位置。再試試帶圖片的,結(jié)果發(fā)現(xiàn)Word文檔里面有沒有圖片,回頭想想,之前是可以正常保存且顯示圖片的,現(xiàn)在不顯示圖片而只顯示一個(gè)叉叉,看來是因?yàn)閳D片路勁出問題了。
Document temdoc = new Document(Server.MapPath("~/tem.doc"));
Document doc = new Document(Server.MapPath("~/bank_tem.doc"));
DocumentBuilder docBuilder = new DocumentBuilder(doc);
docBuilder.InsertHtml(txtContent.Value);
docBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Left;
temdoc.AppendDocument(doc, ImportFormatMode.KeepSourceFormatting);
DocumentBuilder temdocBuilder = new DocumentBuilder(temdoc);
var temParas = temdocBuilder.Document.Sections[1].Body.Paragraphs;
//int intIndexer = 0;
foreach (Paragraph para in temParas)
{
// 這里面隨便指定了一個(gè)位置,在Paragraphs的第六個(gè)節(jié)點(diǎn)處
temdocBuilder.Document.Sections[0].Body.InsertAfter(para.Clone(true), temdocBuilder.Document.Sections[0].Body.Paragraphs[5 + intIndexer - 1].NextSibling);
intIndexer++;
}
temdocBuilder.Document.Sections.RemoveAt(1);
temdoc.Save(Server.MapPath("~/") + "/TestWord1212.doc");
再次打開,這次圖片不顯示問題就解決了。
哎,其實(shí)說來此摸索的是還是很漫長(zhǎng),回來折騰了差不多6個(gè)小時(shí),感覺總是不得要領(lǐng),回頭又看了看XML的節(jié)點(diǎn)操作,才恍然大悟。比如:
temdocBuilder.Document.Sections[0].Body.InsertAfter(para, temdocBuilder.Document.Sections[0].Body.Paragraphs[5 + intIndexer - 1]);編譯時(shí)不報(bào)錯(cuò),這種方式是不出效果,
總之,希望這個(gè)東西對(duì)有需要的人能有所幫助。如果有問題可以跟我溝通,如果有好的解決方法也可以告訴我,在此謝謝了。
總結(jié)
以上是生活随笔為你收集整理的在Word指定位置插入富文本域值(html文本)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android学习笔记
- 下一篇: sbf是什么文件,怎么打开