java - 将包含数据的 HTML 导出到 MS Word

标签 java html jsp ms-word

我们有一个要求,要求客户填写 HTML 文件中的 BRD 文档。 HTML 由单选按钮、文本框等以及颜色和表格组成。我们将有一个按钮,单击该按钮时应调用一个 java 类,该类将 HTML 以及客户输入的数据导出到 word 文档。我们成功地将java程序中直接作为字符串给出的HTML代码转换为word文档。我们在发送 HTML 和数据时遇到问题。

谁能告诉我如何实现这一目标?或者有什么更好的方法可以做到这一点。

public class XhtmlToDocx {

    public static void main(String[] args) throws Exception {

        //String html = "<html><form><input type=\"checkbox\" name=\"xhtml_mp_tutorial_chapter\" value=\"1\"/></form></html>";


String 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>"+
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">"+
"<title>Untitled Form</title>"+
"<link rel=\"stylesheet\" type=\"text/css\" href=\"view.css\" media=\"all\">"+
"<script type=\"text/javascript\" src=\"view.js\"></script>"+
"<script type=\"text/javascript\" src=\"calendar.js\"></script>"+
"</head>"+
"<body id=\"main_body\" >"+
"   "+
"   <img id=\"top\" src=\"top.png\" alt=\"\">"+
"   <div id=\"form_container\">"+
"   "+
"       <h1><a>Untitled Form</a></h1>"+
"       <form id=\"form_82495\" class=\"appnitro\"  method=\"post\" action=\"\">"+
"                   <div class=\"form_description\">"+
"           <h2>Untitled Form</h2>"+
"           <p>This is your form description. Click here to edit.</p>"+
"       </div>                      "+
"           <ul >"+
"           "+
"                   <li id=\"li_1\" >"+
"       <label class=\"description\" for=\"element_1\">Text </label>"+
"       <div>"+
"           <input id=\"element_1\" name=\"element_1\" class=\"element text medium\" type=\"text\" maxlength=\"255\" value=\"\"/> "+
"       </div> "+
"       </li>       <li id=\"li_3\" >"+
"       <label class=\"description\" for=\"element_3\">Multiple Choice </label>"+
"       <span>"+
"           <input id=\"element_3_1\" name=\"element_3\" class=\"element radio\" type=\"radio\" value=\"1\" />"+
"<label class=\"choice\" for=\"element_3_1\">First option</label>"+
"<input id=\"element_3_2\" name=\"element_3\" class=\"element radio\" type=\"radio\" value=\"2\" />"+
"<label class=\"choice\" for=\"element_3_2\">Second option</label>"+
"<input id=\"element_3_3\" name=\"element_3\" class=\"element radio\" type=\"radio\" value=\"3\" />"+
"<label class=\"choice\" for=\"element_3_3\">Third option</label>"+
""+
"       </span> "+
"       </li>       <li id=\"li_2\" >"+
"       <label class=\"description\" for=\"element_2\">Date </label>"+
"       <span>"+
"           <input id=\"element_2_1\" name=\"element_2_1\" class=\"element text\" size=\"2\" maxlength=\"2\" value=\"\" type=\"text\"> /"+
"           <label for=\"element_2_1\">MM</label>"+
"       </span>"+
"       <span>"+
"           <input id=\"element_2_2\" name=\"element_2_2\" class=\"element text\" size=\"2\" maxlength=\"2\" value=\"\" type=\"text\"> /"+
"           <label for=\"element_2_2\">DD</label>"+
"       </span>"+
"       <span>"+
"           <input id=\"element_2_3\" name=\"element_2_3\" class=\"element text\" size=\"4\" maxlength=\"4\" value=\"\" type=\"text\">"+
"           <label for=\"element_2_3\">YYYY</label>"+
"       </span>"+
"   "+
"       <span id=\"calendar_2\">"+
"           <img id=\"cal_img_2\" class=\"datepicker\" src=\"calendar.gif\" alt=\"Pick a date.\">   "+
"       </span>"+
"       <script type=\"text/javascript\">"+
"           Calendar.setup({"+
"           inputField   : \"element_2_3\","+
"           baseField    : \"element_2\","+
"           displayArea  : \"calendar_2\","+
"           button       : \"cal_img_2\","+
"           ifFormat     : \"%B %e, %Y\","+
"           onSelect     : selectDate"+
"           });"+
"       </script>"+
"        "+
"       </li>"+
"           "+
"                   <li class=\"buttons\">"+
"               <input type=\"hidden\" name=\"form_id\" value=\"82495\" />"+
"               "+
"               <input id=\"saveForm\" class=\"button_text\" type=\"submit\" name=\"submit\" value=\"Submit\" />"+
"       </li>"+
"           </ul>"+
"       </form> "+
"       <div id=\"footer\">"+
"           Generated by <a href=\"http://www.phpform.org\">pForm</a>"+
"       </div>"+
"   </div>"+
"   <img id=\"bottom\" src=\"bottom.png\" alt=\"\">"+
"   </body>"+
"</html>";


        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
        AlternativeFormatInputPart afiPart = new AlternativeFormatInputPart(new PartName("/hw.html"));
        afiPart.setBinaryData(html.getBytes());
        afiPart.setContentType(new ContentType("text/html"));
        Relationship altChunkRel = wordMLPackage.getMainDocumentPart().addTargetPart(afiPart);

        // .. the bit in document body
        CTAltChunk ac = Context.getWmlObjectFactory().createCTAltChunk();
        ac.setId(altChunkRel.getId() );
        wordMLPackage.getMainDocumentPart().addObject(ac);

        // .. content type
        wordMLPackage.getContentTypeManager().addDefaultContentType("html", "text/html");
        wordMLPackage.save(new java.io.File("C:/Users/****/Downloads/Word.docx"));

  }
}

最佳答案

您所面临的问题似乎正在发生,因为您正在阅读静态 HTML 页面而不是提交的页面。

为了获取提交的html的完整内容,您需要首先提交包含数据的表单,将其创建为静态html页面,然后使用XMLSerializer或URLStreamReader访问该页面以获取最终要传递的数据到程序的文字处理部分。

我没有提供精确的代码解决方案,因为我认为您将能够自己实现该解决方案,并且您主要停留在逻辑上。

关于java - 将包含数据的 HTML 导出到 MS Word,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58082002/

相关文章:

java - 如何在点击 View 时加载不同的 View 类型?

javascript - HTML 表格样式特定列

javascript - jQuery 对具有不同类型列(例如文本、数字和日期)的 html 表进行排序 :

java - Tomcat 7 TagLib 和用户问题

Javascript 返回 false 在 ie 中不起作用

java - 如何使用 Java 将十六进制的 String 数组转换为 int 数组?

java - 使用 AOP 拦截私有(private)注释方法

java - Tink 库 com.google.protobuf.GenerateMessageV3$ 无法解析

javascript - window.open 与弹出窗口拦截器

java - 将 Action 属性传递给 JavaScript 函数