「javaword文档」java写word文档

博主:adminadmin 2022-11-25 11:37:09 68

本篇文章给大家谈谈javaword文档,以及java写word文档对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java操作word 的有哪几种方式

java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估

计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作

方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关

于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件表

面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。

----- 实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。

----- 实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。

1、采用字节的形式读取rtf模板内容

2、将可变的内容字符串转为rtf编码

3、替换原文中的可变部分,形成新的rtf文档

主要程序如下:

public String bin2hex(String bin) {

char[] digital = "0123456789ABCDEF".toCharArray();

StringBuffer sb = new StringBuffer("");

byte[] bs = bin.getBytes();

int bit;

for (int i = 0; i bs.length;i++) {

bit = (bs[i] 0x0f0)

4;

sb.append("\\'");

sb.append(digital[bit]);

bit = bs[i] 0x0f;

sb.append(digital[bit]);

}

return sb.toString();

}

public String readByteRtf(InputStream ins, String path){

String sourcecontent =

"";

try{

ins = new

FileInputStream(path);

byte[] b

= new byte[1024];

if (ins == null) {

System.out.println("源模板文件不存在");

}

int bytesRead = 0;

while (true) {

bytesRead = ins.read(b, 0, 1024); // return final read bytes

counts

if(bytesRead == -1) {// end of InputStream

System.out.println("读取模板文件结束");

break;

}

sourcecontent += new String(b, 0, bytesRead); // convert to string

using bytes

}

}catch(Exception e){

e.printStackTrace();

}

怎么用java导出word文档

java导出word大致有6种解决方案:

1:Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。该方案只能在windows平台实现,是其局限性。

2:Apache POI包括一系列的API,它们可以操作基于MicroSoft OLE 2 Compound Document Format的各种格式文件,可以通过这些API在Java中读写Excel、Word等文件。他的excel处理很强大,对于word还局限于读取,目前只能实现一些简单文件的操作,不能设置样式。

3:Java2word是一个在java程序中调用 MS Office Word 文档的组件(类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。 这些服务包括: 打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。填充数据到表格中读取表格数据 ,1.1版增强的功能: 指定文本样式,指定表格样式。如此,则可动态排版word文档。是一种不错的解决方案。

4:iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。功能强大。

5:JSP输出样式,该方案实现简单,但是处理样式有点缺陷,简单的导出可以使用。

6:用XML做就很简单了。Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。

如何在java中读取word文件

java读取word文档,获取文本内容,保留基本的换行格式。

java用POI对word进行解析。所需jar包,用maven引入

dependency

groupIdorg.apache.poi/groupId

artifactIdpoi-scratchpad/artifactId

version3.2-FINAL/version

/dependency

前端用webuploader上传控件,限制上传文件类型仅支持text和word.

后台MultipartFile接收文件,根据ContentType区分文件类型,区分解析获取文件内容。

word解析:

txt为word的文本内容

如何通过java将多个word文档合成一个wor

国内有个免费的jar(Free Spire.Doc for Java),可用来合并Word文档,分两种合并方法:1.合并的内容新起一页;2.合并的内容承接上文段落。

1.新起一页合并

import com.spire.doc.Document;

import com.spire.doc.FileFormat;

public class MergeWordDocument {

    public static void main(String[] args){

        //获取第一个文档的路径

        String filePath1 = "merge1.docx";

        //获取第二个文档的路径

        String filePath2 = "merge2.docx";

        //加载第一个文档

        Document document = new Document(filePath1);

        //使用insertTextFromFile方法将第二个文档的内容插入到第一个文档

        document.insertTextFromFile(filePath2, FileFormat.Docx_2013);

        //保存文档

        document.saveToFile("Output.docx", FileFormat.Docx_2013);

    }

}

2.承接上文段落合并

import com.spire.doc.Document;

import com.spire.doc.DocumentObject;

import com.spire.doc.FileFormat;

import com.spire.doc.Section;

public class MergeWordDocument {

    public static void main(String[] args){

        //获取第一个文档的路径

        String filePath1 = "merge1.docx";

        //获取第二个文档的路径

        String filePath2 = "merge2.docx";

        //加载第一个文档

        Document document1 = new Document(filePath1);

        //加载第二个文档

        Document document2 = new Document(filePath2);

        //获取第一个文档的最后一个section

        Section lastSection = document1.getLastSection();

        //将第二个文档的段落作为新的段落添加到第一个文档的最后一个section

        for (Section section:(Iterable Section)document2.getSections()) {

            for (DocumentObject obj:(Iterable DocumentObject)section.getBody().getChildObjects()

            ) {

                lastSection.getBody().getChildObjects().add(obj.deepClone());

            }

        }

        //保存文档

        document1.saveToFile("Output.docx", FileFormat.Docx_2013);

    }

}

可参考原文。

java怎么给word文档加水印

可以使用Free Spire.Doc for Java在word文档中添加文本水印或图片水印。Free Spire.Doc for Java下载链接:网页链接

1.添加文本水印——代码如下:

import com.spire.doc.*;

import com.spire.doc.documents.WatermarkLayout;

import java.awt.*;

public class WordTextWatermark {

public static void main(String[] args) {

Document document = new Document();

document.loadFromFile("Sample.docx");

insertTextWatermark(document.getSections().get(0));

}

private static void insertTextWatermark(Section section) {

TextWatermark txtWatermark = new TextWatermark();

txtWatermark.setText("内部使用");

txtWatermark.setFontSize(40);

txtWatermark.setColor(Color.red);

txtWatermark.setLayout(WatermarkLayout.Diagonal);

section.getDocument().setWatermark(txtWatermark);

}

}

2.添加图片水印——代码如下:

import com.spire.doc.*;

public class WordImageWatermark {

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

Document document = new Document();

document.loadFromFile("Sample.docx");

PictureWatermark picture = new PictureWatermark();

picture.setPicture("logo.png");

picture.setScaling(5);

picture.isWashout(false);

document.setWatermark(picture);

document.saveToFile("out/result2.docx",FileFormat.Docx )

}

}

如何使用java操作word 文档

如果没有特殊需求,可以直接使用jacob_*.zip中提供的jacob.jar和jacob.dll。把jacob.dll文件放在系统可以找得到的

路径上,一般放c:/windows/system32下就行了,注意你用的jacob.dll文件和你的jacob.jar包要匹配,否则会报错哦! 

如果想自己编译也很简单,把jacob_*_src.zip解开,建个工程,在build.xml中稍作配置即可: 

property name="JDK" value="D:\Java\j2sdk1.4.2_13"/  

property name="MSDEVDIR" value="D:\Microsoft Visual Studio\VC98"/  

property name="version" value="1.12"/

看出来了吗,你的机器上需要有JDK和VC环境,VC是用来生成jacob.dll文件的,如果编译时说找不到MSPDB60.DLL,那就在你的

Microsoft Visual Studio目录下搜索一下,拷贝到D:\Microsoft Visual

Studio\VC98\Bin下就行了。

如果需要对jacob里的jar包改名,(虽然通常不会发生这种情况,但如果你需要两个版本的jacob同时使用,改名可能是一种选择),这时你的工作就多一些:

(1)package改名是必须的了,比如我们把src下的com.jacob.activeX改为com.test.jacob.activeX,把

com.jacob.com改为com.test.jacob.com,打包时只有这两个包是有用的,所以只改它们就够了。

(2)然后修改build.xml中src.java.jacob.mainpackage的value为com.test.jacob,修改java.class.main的value为com.test.jacob.com.Jacob。

(3)别忘了javaJarBin中打包的源码路径也要改,include name="com/**/*.class" /改为include name="com/test/**/*.class" /。

(4)build.xml中对生成的dll和jar包也要改个名,比如我们把这两个文件改为jacob_test.dll和

jacob_test.jar。修改build.xml中的enerated.filename.dll和generated.filename.jar

的value为你新改的名字。

(5)com.test.jacob.com.LibraryLoader中,System.loadLibrary("jacob");改成

System.loadLibrary("jacob_test");

(6)另外,很重要的,在jni中*.cpp和*.h中com_jacob_com统一改为com_test_jacob_com,com/jacob

/com统一改为com/test/jacob/com。

(7)ant编译,编译好的文件在release目录下。

(8)最后把编译好的jacob_test.dll文件放在windows/system32下就大功告成了。

现在该用到jacob.jar了,如果你自己修改过jar包的名字,用新改的jar包,如jacob_test.jar,这里统一称为jacob.jar。

首先在classpath中引入jacob.jar包,如果是web应用,WEB-INF的lib中也要加入jacob.jar包。

下面给一个例子:

类ReplaceWord.java

import com.jacob.com.*;

import com.jacob.activeX.*;

public class ReplaceWord {

public static void main(String[] args) {

ActiveXComponent app = new ActiveXComponent("Word.Application"); //启动word

String inFile = "C:\\test.doc"; //要替换的word文件

try {

app.setProperty("Visible", new Variant(false)); //设置word不可见  

Dispatch docs = app.getProperty("Documents").toDispatch();

Dispatch doc = Dispatch.invoke(docs,"Open",Dispatch.Method,new

Object[] { inFile, new Variant(false),new Variant(false) }, new

int[1]).toDispatch();

//打开word文件,注意这里第三个参数要设为false,这个参数表示是否以只读方式打开,因为我们要保存原文件,所以以可写方式打开。

Dispatch

selection=app.getProperty("Selection").toDispatch();//获得对Selection组件

Dispatch.call(selection, "HomeKey", new Variant(6));//移到开头

Dispatch find = Dispatch.call(selection, "Find").toDispatch();//获得Find组件

Dispatch.put(find, "Text", "name"); //查找字符串"name"

Dispatch.call(find, "Execute"); //执行查询

Dispatch.put(selection, "Text", "张三"); //替换为"张三"

Dispatch.call(doc, "Save"); //保存

Dispatch.call(doc, "Close", new Variant(false));

} catch (Exception e) {

e.printStackTrace();

} finally {

app.invoke("Quit", new Variant[] {});

app.safeRelease();

}

}

}

也许你会问,我怎么知道要调用哪个方法传哪些参数来进行操作?别忘了,word还有宏呢!自己录制一个宏,编辑这个宏就可以看到代码了!用哪个对象的哪个方法就看你的了。

我总结了一下:

document下的组件都用Dispatch selection=app.getProperty("Selection").toDispatch()这种方法获得;

再往下的组件就需要调用selection的方法来获取,如 Dispatch find = Dispatch.call(selection, "Find").toDispatch();

如果某个方法需要参数,Dispatch doc =

Dispatch.invoke(docs,"Open",Dispatch.Method,new Object[] { inFile, new

Variant(false),new Variant(false) }, new

int[1]).toDispatch()是一个例子,这是调用docs的Open方法,Object[]数组里就是它需要的参数了;

如果要修改某个组件的属性呢,用Dispatch.put(find, "Text", "name")这种形式,"Text"是属性名,"name"是值。

javaword文档的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java写word文档、javaword文档的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-25,除非注明,否则均为首码项目网原创文章,转载请注明出处。