解决思路是:获取html内容并传到后台,后台把html内容转换为输入流再传给浏览器,浏览器直接下载

1.获取html内容并传到后台

  

$("#zxjdck .ad-xzzy-anniu").click(function(){
        //文件名
    var filename = $("#zxjdck .ad-jrzy-name").text();(例如:test.doc)
        //文件内容
    var zyHtml = '<?xml version="1.0"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml">
<w:docPr>
<w:view w:val="print"/><w:zoom w:percent="150"/>
</w:docPr><w:body>';

    zyHtml += '<w:p><w:pPr><w:outlineLvl w:val="'+outlineLvl+'"/>
            <w:spacing  w:line="400" w:lineRule="auto"/></w:pPr>
            <w:r><w:rPr><w:b w:val="on"/></w:rPr>
            <w:t>' + 文件内容+'</w:t>/w:r></w:p>';

//模拟表单提交
    var html = '';
    html += '<form id="downForm" action="zxzyjd!htmlToWord.action" method="post" style="display:none">' ;
    html +='<input type="hidden" name="zyHtml" value="'+zyHtml+'"></input>';
    html += '<input type="hidden" name="fileName" value="'+encodeURI(filename)+'.doc"></input>';
        html += '</form>';
        $("#zxjdck").append(html);
        $("#downForm").submit();

其中zyHtml部分使用wordXML处理,其中

encodeURI(filename) 为解决IE浏览器下载时文件名乱码问题。
<w:view w:val="print"/><w:zoom w:percent="150"/>表示默认打开为“页面视图”,缩放比例为150%。

具体请参考:

http://www.cnblogs.com/forlina/archive/2011/06/09/2076559.html

http://www.microsoft.com/china/msdn/library/office/office/XMLOfficeWord2003.mspx?mfr=true

2.后台把html内容转换为输入流再传给浏览器:

我使用的是注解方式配置的struts2。

在action中加入注解:

@Result(name = "download" , type = org.apache.struts2.dispatcher.StreamResult.class , value = "inputStream",
    params =          {"contentDisposition","attachment;filename=\"${downloadFileName}\"",
        "inputName","inputStream",
        "contentType", "application/octet-stream",
        "bufferSize","4096"
})

action中方法如下:

private String fileName;
private String zyHtml;    

public String getZyHtml() {
    return zyHtml;
}
public void setZyHtml(String zyHtml) {
    this.zyHtml = zyHtml;
}
public String getFileName() {
    return fileName;
}
public void setFileName(String fileName) {
    this.fileName = fileName;
}

public String htmlToWord(){   

  if(fileName!=null){
        setFileName(fileName);
    }else{
        setFileName("在线作业.doc");
    }
    return "download";
}

public String getDownloadFileName() {
    try {
        fileName = new String(fileName.getBytes(), "ISO8859-1");
        return fileName;
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
        return "";
    }
}

public InputStream  getInputStream(){  

  try {
        byte b[] = zyHtml.getBytes("UTF-8");
            ByteArrayInputStream bais = new ByteArrayInputStream(b);
            return bais;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

通过fileName和zyHtml的get,set方法获得参数。

通过htmlToWord方法找到注解的result。

result中“inputStream”对应方法getInputStream(),"downloadFileName"对用方法getDownloadFileName()。

result返回输入流给浏览器后,浏览器自动下载文件。

指定html内容下载为word文档的更多相关文章

  1. 将word文档A表格中的内容拷贝到word文档B表格中

    Function IsFileExists(ByVal strFileName As String) As Boolean ) <> Empty Then IsFileExists = T ...

  2. python+selenium爬取百度文库不能下载的word文档

    有些时候我们需要用到百度文库的某些文章时,却发现需要会员才能下载,很难受,其实我们可以通过爬虫的方式来获取到我们所需要的文本. 工具:python3.7+selenium+任意一款编辑器 前期准备:可 ...

  3. PHP将HTML的内容保存成word文档

    <?php class word { function start() { ob_start(); echo '<html xmlns:o="urn:schemas-micros ...

  4. 批量导出access某表内容到word文档

    一.需求: 需要将表中每一条记录中的某些内容导出在一个word文档中,并将这些文档保存在指定文件夹目录下 二.界面,简单设计如下: 三.添加office相关引用 添加后可在解决方案资源管理器中看到: ...

  5. Struts2利用iText导出word文档(包含表格)以提供下载

    J2EE ExcelStrutsXML  在公司实习期间,带我的老师让我实现一功能——在显示课表的页面上上点击“导出文件“时能以word文档形式下载课表.将课表导出到excel里的功能他们已经实现了, ...

  6. C#读取Word文档内容代码

    首先要添加引用com组件:然后引用: using Word = Microsoft.Office.Interop.Word; 获取内容: /// /// 读取 word文档 返回内容 /// //// ...

  7. Java 添加、读取、修改、删除Word文档属性

    Word文档属性包括常规.摘要.统计.内容.自定义等,其中摘要包括标题.主题.作者.经理.单位.类别.关键词.备注等项目,通过设置这些摘要信息或自定义属性可方便对文档的管理.本文中将主要介绍对文档摘要 ...

  8. Java 读取txt文件生成Word文档

    本文将以Java程序代码为例介绍如何读取txt文件中的内容,生成Word文档.在编辑代码前,可参考如下代码环境进行配置: IntelliJ IDEA Free Spire.Doc for Java T ...

  9. C# 读取txt文件生成Word文档

    本文将以C#程序代码为例介绍如何来读取txt文件中的内容,生成Word文档.在编辑代码前,可参考如下代码环境进行配置: Visual Studio 2017 .Net Framework 4.6.1 ...

随机推荐

  1. 编译gcc4.4.6与ICE遇到的几个问题

    1.遇错./.libs/libgcj.so: undefined reference to `__cxa_call_unexpected' 解决:d.错误码:"/.libs/libgcj.s ...

  2. Kaggle入门

    Kaggle入门 1:竞赛 我们将学习如何为Kaggle竞赛生成一个提交答案(submisson).Kaggle是一个你通过完成算法和全世界机器学习从业者进行竞赛的网站.如果你的算法精度是给出数据集中 ...

  3. Webbrowser中模拟连接点击(非鼠标模拟)

    Delphi uses mshtml, ActiveX; //初始加载网易主页 procedure TForm1.FormCreate(Sender: TObject); begin Webbrows ...

  4. qt运行库

    KERNEL32.DLL MINGWM10.DLL MSVCRT.DLL LIBGCC_S_DW2-1.DLL QTCORE4.DLL QTGUI4.DLL 笔者安装的是QT SDK.(发行版本这是前 ...

  5. enum flags 枚举Flags标示 位运算符

    C#位运算 详见:http://wenku.baidu.com/link?url=4KUNkwuVTm8dwhmPLXeyYytmnDOJnmLG1L2C77kP-rY0On33ksQxwchoTlq ...

  6. 关于 ls 命令的一个小小的缺陷

    linux 的 ls : ls后边加上要显示的路径时:比方 ls /tmp 它会打印一边 /tmp 下的信息 当ls后边跟上多个同样路径的名字是,它会打印多次同样的信息 比方 ls /tmp /tmp ...

  7. jcenter那些事儿

    jcenter是一个server托管在bintray.com的maven仓库. in project's build.gradle file allprojects { repositories { ...

  8. SecureCRT 绝佳配色方案, 保护你的眼睛(转发)

    SecureCRT 绝佳配色方案, 保护你的眼睛 关键词:SecureCRT配色, SecureCRT设置颜色, Linux终端配色,Linux终端颜色设置. 终端有一个好的配色,不仅能保护自己的眼睛 ...

  9. IsNullOrEmpty和s == null || s.Length == 0哪个快

    在写扩展方法时,看到有人用==null这个方法,说快,上网找了些资料,最后在csdn的博客上看到了一篇文章,说实测是后两者快,于是我也试着做了一个程序运行了一下,却发现这样的结果: 我测试了一个,发现 ...

  10. windows下,用绝对路径向html文件中插入图片

    首先注意路径中是否包含中文名比如 <img src="F:\头像\小黄人.jpg" width="500" height="200"/ ...