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

遇到此问题,首先想到的就是各种百度。结果度娘了一会并没有发现有用的有效的解决方法,哎,看来还得靠自己啊。

首先整理了下手头上的资源,一是HtmlAgilityPack,专门解析Html文本用的;二是我有ASPOSE.Word。

再整理下思路:在Word中插入Html,首先有一点是肯定的,Word跟Html都是Document结构,这点应该是没啥怀疑的。如此的话就感觉好办多了,无非就是Document上插入几个节点,在Html插入节点的方式完全可以运用到此地方。

那么第一种解决方法就是:首先把Word转换为Html,然后在指定位置插入当前要插入的Html代码,然后再保存成Word格式的文档。

第二种方式就是:把Html解析出有效的文本,利用Word增加段落的方式添加从Html中解析出来的文本。

HtmlAgilityPack.HtmlDocument hd = new HtmlAgilityPack.HtmlDocument();
     hd.LoadHtml(txtContent.Value);

hd.DocumentNode.Elements("p");

通过此方式就可以获取到富文本域里面的所有文本信息。但是此种方式获取到的节点在ASPOSE类里面不识别。

再继续折腾吧,回到ASPOSE上面。找帮助文档,寻百度。

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,这样就可以了。再试试带图片的,也很不错,图片也可以正常在Word里面正常显示。看来此插件确实很强大啊,不过到目前还并没有解决我的问题。就是插入的位置问题。目前它是插入的头部,即Body的Paragraph 0 处。

接下来就是解决如何把HTML文本插入到指定位置,想了想得首先知道要插入的位置,度娘了一会发现了东东。DocumentExplorer,它可以查看Word文档里面的Doc结构。

速度找了一个,打开后就可以清晰地看到Word文档:

这样的话就知道自己要插入的位置在那个地方。最简单的就是设置好模板,找到要插入的位置节点。

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)
     {

// 这里面随便指定了一个位置,在Paragraphs的第六个节点处
           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");

再次保存后打开测试Word文档,符合自己的预期,解决了把HTML文本插入到Word文档的指定位置。再试试带图片的,结果发现Word文档里面有没有图片,回头想想,之前是可以正常保存且显示图片的,现在不显示图片而只显示一个叉叉,看来是因为图片路劲出问题了。

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)
     {

// 这里面随便指定了一个位置,在Paragraphs的第六个节点处
           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");

再次打开,这次图片不显示问题就解决了。

哎,其实说来此摸索的是还是很漫长,回来折腾了差不多6个小时,感觉总是不得要领,回头又看了看XML的节点操作,才恍然大悟。比如:

temdocBuilder.Document.Sections[0].Body.InsertAfter(para, temdocBuilder.Document.Sections[0].Body.Paragraphs[5 + intIndexer - 1]);编译时不报错,这种方式是不出效果,

总之,希望这个东西对有需要的人能有所帮助。如果有问题可以跟我沟通,如果有好的解决方法也可以告诉我,在此谢谢了。

时间: 2024-12-18 16:39:06

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

利用RandomAccessFile类在指定文件指定位置插入内容

package File; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; /*利用RandomAccessFile类在指定文件指定位置插入内容.*/ public class InsertContent { public static void ins

java格式化字符串,在指定位置插入指定字符串,兼容中英文以及特殊字符,例如:换行,用于解决生成pdf换行问题等问题

原因: 由于html转pdf时,不能自动换行,因此才有下面的代码. 注释:完全模拟html页面的自动换行! package test; import java.io.UnsupportedEncodingException; /** * 解决pdf换行问题,在指定位置插入指定字符串,兼容中英文以及特殊字符 * * @author xg君 * */ public class app { public static void main(String[] args) throws Unsupporte

如何在JS数组特定索引处指定位置插入元素?

需求: 将一个元素插入到现有数组的特定索引处.听起来很容易和常见,但需要一点时间来研究它. // 原来的数组var array = ["one", "two", "four"];// splice(position, numberOfItemsToRemove, item)// 拼接函数(索引位置, 要删除元素的数量, 元素)array.splice(2, 0, "three"); // www.jbxue.comarray;

Asp.net 在word文档每页指定位置插入图片(二)

word文档插入每页插入图片实现了,本地运行是OK,但是发布到IIS上就报错了, 错误信息为:  检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80040154 没有注册类 经过查资料发现要在服务器上安装word相关组件或者直接安装Office ,没有找到相关组件,就在服务器安装了Office.安装完成后,又报错了 错误信息为:检索 COM 类工厂中 CLSID 为 {000209FF-00

关于文本输入框获取光标位置以及指定位置插入内容

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> </head> <body> &l

在JS数组指定位置插入元素

很多与数组有关的任务听起来很简单,但实际情况并不总是如此,而开发人员在很多时候也用不到他.最近我碰到了这样一个需求: 将一个元素插入到现有数组的特定索引处.听起来很容易和常见,但需要一点时间来研究它. // 原来的数组 var array = ["one", "two", "four"]; // splice(position, numberOfItemsToRemove, item) // 拼接函数(索引位置, 要删除元素的数量, 元素) ar

将richTextBox中的内容写入txt文件发现不换行(解决方法),在richTextBox指定位置插入文字

string pathname = dt.ToString().Replace(":", ""); string str = richTextBoxResult.Text; str = str.Replace("\n", "\r\n");     //关键 File.AppendAllText(@"D:\" + pathname + ".txt", str, Encoding.Defau

js 指定位置插入html标签(可编辑div)

demo效果如下: html代码部分如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>

数组的元素在指定位置插入一个数字

发现百度也百不到的问题,有些人答非所问导致学习风气一团乱套,所以写一点基础需要的同志可以参考 private void button1_Click(object sender, EventArgs e) { int [] num=new int[6]; num[0] = 0; num[1] = 1; num[2] = 2; num[3] = 3; num[4] = 4; string res = string.Empty; for (int i = 0; i < num.Length; i++)