java实现doc互转docx
jacod
使⽤原因
word中使⽤poi读取⽂章内容不能正确读取⽬录,使⽤docx可以正确读取,所以先将doc转换为docx,再进⾏解析
注意:还没有尝试使⽤iText进⾏word⽂档的读取
为什么doc⽆法解析 docx可以解析
wwwblogs/ct-csu/p/8178932.html
这篇⽂章讲的⾮常好,⼀定要去看,详细讲解了doc和docx的区别(也就是docx实质上是压缩包)、
doc和docx的细节、poi中关于这两种⽂档的不同处理
还有其他⽅法可以将doc转换为docx吗?
文件格式转换app
1. 到能正确解析复杂word⽂档的doc版本的插件或相关依赖,直接使⽤这个进⾏处理
2. 先⽤office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后⽤java来解析FreeMarker模
板并输出Doc。经测试这样⽅式⽣成的word⽂档完全符合office标准,样式、内容控制⾮常便利,打印也不会变形,⽣成的⽂档和office中编辑⽂档完全⼀样。
第⼆个⽅法来源于⽹址wwwblogs/cage666/p/7295391.html
3. poi已经有成熟的api进⾏doc⽂档转换为docx进⾏操作
4. ⽂档中的复杂表格、图⽚、公式等操作动能通过docx记性解析
参考:
POI官⽹:/
Apache POI Word - 快速指南 :www.w3cschool/apache_poi_word/apache_poi_word_quick_guide.html
具体使⽤⽅法
c语言char占几个字节引⼊依赖或⼿动下载
电脑内java是1.8版本,对应jacod刚好是9版本
1. 下载 ,解压缩并复制
下载⽹址
页⾯
复制
2. 将依赖⼿动引⼊
3. 注意事项,不能使⽤Linux系统,如果你的项⽬环境是Linux,那么千万不要⽤,使⽤这个插件还要求⼀定有Office07版本,版本不
正确或者是安装不正确的话也会出现问题,在新建相关⽂档之前应该⾸先判断⽂件是否已经新建但是当时没有成功
代码
demo;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.ComThread;
import com.jacob.Dispatch;
import com.jacob.Variant;
import java.io.File;
import java.io.File;
// 格式⼤全:前缀对应以下⽅法的fmt值
// 0:Microsoft Word 97 - 2003 ⽂档 (.doc)
aligner软件
// 1:Microsoft Word 97 - 2003 模板 (.dot)
// 2:⽂本⽂档 (.txt)
// 3:⽂本⽂档 (.txt)
// 4:⽂本⽂档 (.txt)
// 5:⽂本⽂档 (.txt)
// 6:RTF 格式 (.rtf)
// 7:⽂本⽂档 (.txt)
// 8:HTML ⽂档 (.htm)(带⽂件夹)
/
/ 9:MHTML ⽂档 (.mht)(单⽂件)
// 10:MHTML ⽂档 (.mht)(单⽂件)
// 11:XML ⽂档 (.xml)
// 12:Microsoft Word ⽂档 (.docx)
// 13:Microsoft Word 启⽤宏的⽂档 (.docm)
// 14:Microsoft Word 模板 (.dotx)
// 15:Microsoft Word 启⽤宏的模板 (.dotm)
// 16:Microsoft Word ⽂档 (.docx)
// 17:PDF ⽂件 (.pdf)
// 18:XPS ⽂档 (.xps)
// 19:XML ⽂档 (.xml)
/
/ 20:XML ⽂档 (.xml)
// 21:XML ⽂档 (.xml)
// 22:XML ⽂档 (.xml)
// 23:OpenDocument ⽂本 (.odt)
// 24:WTF ⽂件 (.wtf)
/**
* @author czy
* @date 2019/11/22 - 19:51
* @Classname jacob
* @Description
*/
public class DocFmtConvert {
/**
* doc格式
*/
private static final int DOC_FMT = 0;
/**
* docx格式
*/
private static final int DOCX_FMT = 12;
/**
* 描述 The entry point of application.
*
* @param args
* the input arguments
源码编辑器游戏100例
* @author Harley Hong
* @created 2017 /08/09 16:14:44
*/
public static void main(String[] args) {
DocFmtConvert dfc = new DocFmtConvert();
String srcDocPath = "";
String descDocPath = "";
try {
e.printStackTrace();
}
}
/**
* 根据格式类型转换doc⽂件
* 根据格式类型转换doc⽂件
*
* @param srcPaththe doc path 源⽂件
* @param descPath the docx path ⽬标⽂件
* @param fmtthe fmt 所转格式
* @return the file
* @throws Exception the exception
* @author Harley Hong
* @created 2017 /08/09 16:14:07 Convert docx 2 doc file.
*/
public File convertDocFmt(String srcPath, String descPath, int fmt) throws Exception {
// 实例化ComThread线程与ActiveXComponent
ComThread.InitSTA();
ActiveXComponent app = new ActiveXComponent("Word.Application");
try {
address的意思// ⽂档隐藏时进⾏应⽤操作
app.setProperty("Visible", new Variant(false));
// 实例化模板Document对象
Dispatch document = Property("Documents").toDispatch();
// 打开Document进⾏另存为操作
Dispatch doc = Dispatch.invoke(document, "Open", Dispatch.Method,
源代码百度云蓝光new Object[] { srcPath, new Variant(true), new Variant(true) }, new int[1]).toDispatch();
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] { descPath, new Variant(fmt) }, new int[1]);            Dispatch.call(doc, "Close", new Variant(false));
return new File(descPath);
} catch (Exception e) {
throw e;
} finally {
// 释放线程与ActiveXComponent
app.invoke("Quit", new Variant[] {});
ComThread.Release();
}
}
}
重点代码
// 实例化ComThread线程与ActiveXComponent
ComThread.InitSTA();
ActiveXComponent app = new ActiveXComponent("Word.Application");
try {
/
/ ⽂档隐藏时进⾏应⽤操作
app.setProperty("Visible", new Variant(false));
// 实例化模板Document对象
Dispatch document = Property("Documents").toDispatch();
// 打开Document进⾏另存为操作
Dispatch doc = Dispatch.invoke(document, "Open", Dispatch.Method,
new Object[] { srcPath, new Variant(true), new Variant(true) }, new int[1]).toDispatch();
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] { descPath, new Variant(fmt) }, new int[1]);            Dispatch.call(doc, "Close", new Variant(false));
return new File(descPath);
} ca

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。