vue如何将html插入到word模板的指定位置?

html-css028

vue如何将html插入到word模板的指定位置?,第1张

在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文档里面有没有图片,回头想想,之前是可以正常保存且显示图片的,现在不显示图片而只显示一个叉叉,看来是因为图片路劲出问题了。

参考如下:

可以使用Include标签来包含外部的模板文件,使用方法如下:

include标签(包含外部模板文件)

闭合

闭合标签

属性

file(必须):要包含的模板文件,支持变量

示例:

1、 使用完整文件名包含

格式:<include file="完整模板文件名" />

例如:

<include file="./Tpl/default/Public/header.html" />

这种情况下,模板文件名必须包含后缀。使用完整文件名包含的时候,特别要注意文件包含指的是服务器端包含,而不是包含一个URL地址,也就是说file参数的写法是服务器端的路径,如果使用相对路径的话,是基于项目的入口文件位置。

2、包含当前模块的其他操作模板文件

格式:<include file="操作名" />

例如 导入当前模块下面的read操作模版:

<include file="read" />

操作模板无需带后缀。

3、 包含其他模块的操作模板

格式:<include file="模块名:操作名" />

例如,包含Public模块的header操作模版:

<include file="Public:header" />

4、包含其他模板主题的模块操作模板

格式:<include file="主题名:模块名:操作名" />

例如,包含blue主题的User模块的read操作模版:

<include file="blue:User:read" />

5、 用变量控制要导入的模版

格式:<include file="$变量名" />

例如

<include file="$tplName" />

给$tplName赋不同的值就可以包含不同的模板文件,变量的值的用法和上面的用法相同。

无论你使用什么方式包含外部模板,Include标签支持在包含文件的同时传入参数,例如,下面的例子我们在包含header模板的时候传入了title和keywords变量:

<include file="header" title="ThinkPHP框架"keywords="开源WEB开发框架"/>

就可以在包含的header.html文件里面使用var1和var2变量,方法

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>[title]</title>

<meta name="keywords" content="[keywords]" />

</head>

注意:由于模板解析的特点,从入口模板开始解析,如果外部模板有所更改,模板引擎并不会重新编译模板,除非在调试模式下或者缓存已经过期。如果部署模式下修改了包含的外部模板文件后,需要把模块的缓存目录清空,否则无法生效。