在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]);编译时不报错,这种方式是不出效果,

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

 

转载于:https://www.cnblogs.com/zhongjicainiao/p/4976285.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将文本导出到Word指定位置,你可以使用Apache POI库来操作Word文档,同时使用Java Swing来创建文本编辑器。以下是一个示例代码: ```java import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.swing.JEditorPane; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.rtf.RTFEditorKit; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Range; public class ExportRichTextToWord { public static void main(String[] args) { // 创建一个文本编辑器 JEditorPane editorPane = new JEditorPane(); editorPane.setContentType("text/rtf"); // 向编辑器中添加一些文本内容 Document doc = editorPane.getDocument(); try { doc.insertString(0, "这是一段文本内容。", null); } catch (BadLocationException e) { e.printStackTrace(); } // 将文本内容导出到Word RTFEditorKit rtfKit = new RTFEditorKit(); File file = new File("example.doc"); try (FileOutputStream fos = new FileOutputStream(file)) { rtfKit.write(fos, doc, 0, doc.getLength()); // 将Word文档插入指定位置 HWPFDocument document = new HWPFDocument(file); Range range = document.getRange(); range.insertAfter("这是插入文本。"); // 保存Word文档 document.write(fos); } catch (IOException | BadLocationException e) { e.printStackTrace(); } } } ``` 在此示例中,我们创建了一个Java Swing的文本编辑器,并向其添加了一些文本。然后将编辑器中的文本内容使用RTFEditorKit导出到Word文档中。最后,我们打开Word文档并在指定位置插入一些文本,然后保存Word文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值