2011-04-21 67 views
3

我们可以使用java生成一个.html文档吗?通常我们会在运行java程序的cmd提示符下输出。我想以.html或.doc格式生成输出是他们在java中完成的一种方式吗?以JAVA生成输出

+1

添加一两句话来解释您正在尝试做什么的更大图景会导致更有用的答案。 – joev 2011-04-21 14:33:12

+1

HtmlFlow(部署在Maven Central Repository中)提供了一个简单的API,以流畅的风格编写HTML。在这里查看:github.com/fmcarvalho/HtmlFlow – 2016-02-01 17:21:16

回答

1

对于HTML

只需将数据写入到.html文件(它们只是与.html扩展名的文本文件),使用IO操作

原始文件,例如:

StringBuilder sb = new StringBuilder(); 
    sb.append("<html>"); 
    sb.append("<head>"); 
    sb.append("<title>Title Of the page"); 
    sb.append("</title>"); 
    sb.append("</head>"); 
    sb.append("<body> <b>Hello World</b>"); 
    sb.append("</body>"); 
    sb.append("</html>"); 
    FileWriter fstream = new FileWriter("MyHtml.html"); 
    BufferedWriter out = new BufferedWriter(fstream); 
    out.write(sb.toString()); 
    out.close(); 

对于word文档

This thread answers it

1

输出只是输出。这意味着什么以及如何使用它完全取决于你。

如果你System.out.println('<p>Hello world!</p>');你刚刚制作了HTML。

.doc格式显然有点棘手,因为放入标签并不是一件简单的事情,但有库来完成工作。谷歌可以建议不止一个。

0

当然。

一般方法:您在内存中创建文档,即在StringBuilder中,并将该构建器的内容写入文件。

StringBuilder htmlBuilder = new StringBuilder(); 
htmlBuilder.append("<html><body>"); 
htmlBuilder.append("Hello world!"); 
htmlBuilder.append("</body></html>\n"); 

FileWriter writer = new FileWriter(System.getProperty("user.home") + "/hello.html"); 
writer.write(htmlBuilder.toString()); 
writer.close(); 

将这个在main方法,执行,你会发现在你的home目录下的HTML文件

1

HTML只是普通的文本。只需将HTML代码写入文件或标准输出即可。

Word文件比较复杂。查看一下库房,如Apache POI

0

我不知道为什么你这么说:

通常我们得到的命令提示符文 输出中,我们运行Java程序。

我今天一直在运行一些java程序,但它们不会对cmd提示做任何事情。如果你使用system.out.println,是的,但是大多数高级程序对通信来说有点多。像一个接口:)

你想要做的是看看文件处理程序。打开(或创建)文件,将内容写入该文件并关闭它。然后你有一个文件。你可以写任何你想要的文件,所以显然也会使它成为HTML或文档。这是很容易找到的文件写作

0

检查howtos这样的:

try { 
    BufferedWriter out = new BufferedWriter(new FileWriter("outfilename.html")); 
    out.write("aString"); //Here you pass your output 
    out.close(); 
} catch (IOException e) { 
} 

您将需要进口的BufferedWriter,FileWriter的和IOException异常,至极正在爪哇。IO

的“ASTRING”应该是存储HTML代码或文档的XML

0

生成一个HTML文档中的字符串变量,你应该写一个文件。由于HTML是文本格式,因此您可以写入文本文件。这样做需要这些类

java.io.File中 - 这意味着你的文件系统位置

java.io.FileWriter - 这建立了从程序到文件

java.io.连接BufferedWriter - 这使得缓冲写入文本,这是更快

java.io.IOException - 如果有一个问题写入 文件引发这些nasties之一。它是一个检查(与运行时)异常,你必须处理它。

头第一个Java书包含这些类非常好的覆盖面,并告诉你如何使用它们。要使用这些,你必须首先了解异常处理。 Head First Java也包含这一点。

我希望这能让你开始。

0

如果您有一些类似文档的数据(结构化),我会建议使用DOM(文档对象模型),并将其转换为所需格式(xml,html,doc,无论)。但是如果你只有一些应用程序输出,你可以很容易地用html包装它。不一定在java中 - 你也可以将程序的输出存储为纯文本文件,稍后将其转换为html格式(添加body,paragprahs,头文件和其他HTML元素)。

2

HTML是简单的纯文本,带有一堆标签,正如其他人所回答的一样。我的建议是,如果你正在做的事情比输出一个基本的HTML代码片段更复杂,那就是使用模板引擎,如StringTemplate

StringTemplate的可以让你创建,看起来像这样的文本文件(实际上是一个HTML文件):

<html> 
    <head> 
     <title>Example</title> 
    </head> 
    <body> 
     <p>Hello $name$</p> 
    </body> 
</html> 

那是你的模板。然后在Java代码中,你将填补$name$占位这样,然后输出生成的HTML页面:

StringTemplate page = group.getInstanceOf("page"); 
page.setAttribute("name", "World"); 
System.out.println(page.toString()); 

这将打印出以下结果屏幕上:

<html> 
    <head> 
     <title>Example</title> 
    </head> 
    <body> 
     <p>Hello World</p> 
    </body> 
</html> 

当然,上面的示例Java代码并不是完整的代码,但它演示了如何使用仍然有效的HTML模板(使HTML编辑器更易于编辑),同时保持Java代码的简单性(避免使用一堆HTML标签在您的System.out.println报表中)。

至于MS Office .doc格式,这是更复杂的,你可以看看Apache POI

+0

它可以使用这个库来设置一个图像的URL,像这样? – 2018-03-08 01:15:07

+0

我没有找到'StringTemplate'类,我只找到'ST'类。 – 2018-03-08 01:34:44

1

我已经感觉到过去需要开发一个java库--HtmlFlow(部署在Maven Central Repository) - 它提供了一个简单的API来以流畅的风格编写HTML。在这里检查:https://github.com/fmcarvalho/HtmlFlow

您可以使用HtmlFlow进行数据绑定,也可以不使用数据绑定,但在此我提供一个将Task对象的属性绑定到HTML元素的示例。考虑一个Task Java类具有三个属性:TitleDescriptionPriority然后我们就可以生成HTML文件在以下方式Task对象:

import htmlflow.HtmlView; 

import model.Priority; 
import model.Task; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.PrintStream; 

public class App { 

    private static HtmlView<Task> taskDetailsView(){ 
     HtmlView<Task> taskView = new HtmlView<>(); 
     taskView 
       .head() 
       .title("Task Details") 
       .linkCss("https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"); 
     taskView 
       .body().classAttr("container") 
       .heading(1, "Task Details") 
       .hr() 
       .div() 
       .text("Title: ").text(Task::getTitle) 
       .br() 
       .text("Description: ").text(Task::getDescription) 
       .br() 
       .text("Priority: ").text(Task::getPriority); 
     return taskView; 
    } 

    public static void main(String [] args) throws IOException{ 
     HtmlView<Task> taskView = taskDetailsView(); 
     Task task = new Task("Special dinner", "Have dinner with someone!", Priority.Normal); 

     try(PrintStream out = new PrintStream(new FileOutputStream("Task.html"))){ 
      taskView.setPrintStream(out).write(task); 
      Runtime.getRuntime().exec("explorer Task.html"); 
     } 
    } 
} 
0

一个非常简单和可靠的方法来创建纯HTML的可根据SAX处理程序和默认XSLT转换器,HTML输出的后者有内在能力:

String encoding = "UTF-8"; 
FileOutputStream fos = new FileOutputStream("myfile.html"); 
OutputStreamWriter writer = new OutputStreamWriter(fos, encoding); 
StreamResult streamResult = new StreamResult(writer); 

SAXTransformerFactory saxFactory = 
    (SAXTransformerFactory) TransformerFactory.newInstance(); 
TransformerHandler tHandler = saxFactory.newTransformerHandler(); 
tHandler.setResult(streamResult); 

Transformer transformer = tHandler.getTransformer(); 
transformer.setOutputProperty(OutputKeys.METHOD, "html"); 
transformer.setOutputProperty(OutputKeys.ENCODING, encoding); 
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 

writer.write("<!DOCTYPE html>\n"); 
writer.flush(); 
tHandler.startDocument(); 
    tHandler.startElement("", "", "html", new AttributesImpl()); 
     tHandler.startElement("", "", "head", new AttributesImpl()); 
      tHandler.startElement("", "", "title", new AttributesImpl()); 
       tHandler.characters("Hello".toCharArray(), 0, 5); 
      tHandler.endElement("", "", "title"); 
     tHandler.endElement("", "", "head"); 
     tHandler.startElement("", "", "body", new AttributesImpl()); 
      tHandler.startElement("", "", "p", new AttributesImpl()); 
       tHandler.characters("5 > 3".toCharArray(), 0, 5); // note '>' character 
      tHandler.endElement("", "", "p"); 
     tHandler.endElement("", "", "body"); 
    tHandler.endElement("", "", "html"); 
tHandler.endDocument(); 
writer.close(); 

注意,XSLT转换将释放你逃跑特殊字符,如的负担,因为它本身需要照顾它。

它是容易将保鲜膜SAX方法,如startElement()characters()到一个人的口味的东西更方便......

而且它可能是值得注意的是,没有处理内存中的模板和文档分配(例如DOM)给出您在文档大小方面有更多的自由...