java代码转化为html_使用java代码将html文件转换成chm文件

需求背景:将数据库文档生成一个chm文件;现有两张表一张表里面是所有表的分类/分级(所有的表会组成一个目录,子节点就是具体的表,目录就是分类),另一张表里面是所有表的字段信息

辅助工具:HTML Help Workshop (是否必须安装还不确定)

步骤:

1、根据数据库中的信息生成对应的目录结构 (这里主要是做一次迭代);生成目录结果

6aef5d5c742ae3630e8f8c9616ca86c3.png                 

27ed7995841316697b9685065220573f.png

2、构造html文件。这个就很就很简单了,根据自己的需要做成自己想要的html样式就好了。

3、生成HHP、HHC、HHK文件。生成方式也很简单,就是组装字符串;主要说的是这几个文件的结构。

HHC文件控制最终生成的chm文件的目录结构,及目录的顺序。

HHP文件  控制chm文件的生成路径;默认显示的首页

[OPTIONS]

CITATION=Made by Easy CHM

Compatibility=1.1 or later

Compiled file=F:\download\test\test.CHM

Contents file=test.HHC

COPYRIGHT=www.eTextWizard.com

Default topic=分类(10)\具体表(100000003).html

Default Window=Easy-CHM-384-TRIAL-5E7AE767

Display compile notes=Yes

Display compile progress=Yes

Error log file=_EasyCHM_ErrorLog.Log

Full-text search=Yes

Index file=test.HHK

Title=Easy CHM - Made by UNREGISTERED version of Easy CHM

[WINDOWS]

Easy-CHM-384-TRIAL-5E7AE767="Easy CHM - Made by UNREGISTERED version of Easy CHM","test.HHC","test.HHK","分类(10)\具体表(100000003).html","分类(10)\具体表(100000003).html",,"About",,,0x63520,271,0x4304E,[0,0,745,509],,,,,,,0

[MERGE FILES]

[FILES]F:\download\test\分类(10)\具体表(100000003).html

F:\download\test\分类(10)\具体表(100000004).html

F:\download\test\分类(11)\具体表(100000005).html

F:\download\test\分类(11)\具体表(100000006).html

HHK文件 hhk文件中的数据顺序要与hhp中的保持一致

遍历目录的代码:

public staticHHCmodel findAllFile() {

String path= "F:\\download\\test"; //要遍历的路径

File file = new File(path); //获取其file对象

HHCmodel model = newHHCmodel();

showDir(file, model);returnmodel;

}public static voidshowDir(File dir, HHCmodel model) {if(dir.exists()){//抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件和目录。

File[] files =dir.listFiles();if(null!=files){

List modelList = new ArrayList(files.length);for (int i = 0; i < files.length; i++) {

HHCmodel mo= newHHCmodel();

mo.setName(files[i].getName());

mo.setNum(files[i].getName().substring(files[i].getName().lastIndexOf("(") + 1, files[i].getName().lastIndexOf(")")));

mo.setAbslout_path(files[i].getAbsolutePath());if(null !=model.getRelative_path()) {

mo.setRelative_path(model.getRelative_path()+ "\\" +files[i].getName());

}else{

mo.setRelative_path(files[i].getName());

}if(files[i].isDirectory()) {

mo.setFile(false);

showDir(files[i],mo);

}else{

mo.setFile(true);

}

modelList.add(mo);

}

model.setModelList(modelList);

}

}

}

public static voidmain(String[] args) {

List model =findAllFile().sortFiled();

writeString2File(connectString(model), "F:\\download\\test\\test.HHC");

}

public static void writeString2File(String str,String filepath) {

try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filepath), "GBK"))) {

bw.write(str);

bw.flush();

} catch (Exception e) {

}

}

packagetest_project.auto;importjava.util.Collections;importjava.util.Comparator;importjava.util.List;public classHHCmodel {privateString num;privateString name;private booleanisFile;privateString relative_path;privateString abslout_path;private ListmodelList;public ListsortFiled() {if(null == this.modelList || this.modelList.size() < 1) {returnmodelList;

}

Collections.sort(this.modelList, new Comparator() {

@Overridepublic intcompare(HHCmodel o1, HHCmodel o2) {returno1.getNum().compareTo(o2.getNum());

}

});returnmodelList;

}publicString getAbslout_path() {returnabslout_path;

}public voidsetAbslout_path(String abslout_path) {this.abslout_path =abslout_path;

}publicString getNum() {returnnum;

}public voidsetNum(String num) {this.num =num;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public booleanisFile() {returnisFile;

}public void setFile(booleanisFile) {this.isFile =isFile;

}publicString getRelative_path() {returnrelative_path;

}public voidsetRelative_path(String relative_path) {this.relative_path =relative_path;

}public ListgetModelList() {returnmodelList;

}public void setModelList(ListmodelList) {this.modelList =modelList;

}

}

生成的文件的样子:

63d6d69a8dfc103c57b8dbd4542aed1e.png

调用 HTML Help Workshop中的hhc.exe

public static voidmain(String[] args) {

Runtime mt=Runtime.getRuntime();try{

Process p= mt.exec("F:\\download\\test\\hhc.exe F:\\download\\test\\test.HHP");

InputStream stdin=p.getInputStream();

InputStreamReader isr= newInputStreamReader(stdin);

BufferedReader br= newBufferedReader(isr);

String line= null;while ((line = br.readLine()) != null)

System.out.println(line);

}catch(IOException e) {

e.printStackTrace();

}

}

624deff6e1462afab8843e7132b93778.png

这里为了方便观看,将hhc.exe放在的这个目录。不太确定HTML Help Workshop是不是必须安装,我自己是安装了,但是我将hhc.exe随便移动位置也并不影响执行结果。

在从hhp生成chm的时候会出现乱码的情况,我把编码格式设置成了GBK

9b20a73580c16f52f5f511955a459579.png

参考资料 https://www.cnblogs.com/codealone/archive/2013/03/21/2972426.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值