日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

在Word指定位置插入富文本域值(html文本)

發(fā)布時(shí)間:2023/12/15 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 在Word指定位置插入富文本域值(html文本) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

遇到此問題,首先想到的就是各種百度。結(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。