java chm制作个工具

         最近手机开发倍受青睐,奔着与时俱进笨鸟先飞的原则 近日鄙人也准备学习android开发,在开始新的旅程之前本人习惯找一份中文的chm文档或是根据官网的api打一个chm文档,但是问题出现了 万恶的google提供的API通过FAR或其他的工具打包chm总是出现问题,于是乎找到jrex开发了一个java版本的CHM工具,工具开发完感觉还是可以没有了脚本错误但是由于google API中那个sidebar和大量脚本的存在加载页面很是消耗内存速度也很慢,无奈之下今晚又抽了点时间将其侧边栏去掉 只保留右侧API部分进行制作chm,速度果然快了很多,明天就准备学习android了 今天将API工具和精简google的API页面共享之,希望对学习android的童鞋们有点用。

        最终生成的chm阅读效果如下:

       

 

 

 

 

 

googleapi去掉左边侧边栏写了两个很简单的类,根据自己的doc目录修改main方法就可以将其侧边栏去掉,测试环境 android2.2 没有出现任何异常

/****************
 *
 *Create Class:HtmlTemplete.java
 *Author:a276202460
 *Create at:2010-8-25
 */
package com.rich.android.api;

public class HtmlTemplete {
  
	public static StringBuffer htmlprefix = new StringBuffer("<html>/n");
	static{
		htmlprefix.append("<head>/n");
		htmlprefix.append("<meta http-equiv=/"Content-Type/" content=/"text/html; charset=utf-8/">/n");
		htmlprefix.append("<link rel=/"shortcut icon/" type=/"image/x-icon/" href="/" mce_href="/""../../../favicon.ico/" />/n");
		 
		 
	}
	public static StringBuffer htmlmiddle = new StringBuffer("</head>/n");
	static{
		htmlmiddle.append("<body>/n");
	}
	
	public static StringBuffer htmlstuff = new StringBuffer("</body>/n</html>");
}

 

 

APIUtil.java类代码

 

/****************
 *
 *Create Class:APIUtil.java
 *Author:a276202460
 *Create at:2010-8-25
 */
package com.rich.android.api;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.regex.Pattern;

public class APIUtil {
  public static Pattern contentstartpattern = Pattern.compile(".*id=/"jd//-content/".*");
  public static Pattern contentendpattern = Pattern.compile(".*<!--.*jd//-content.*");
  public static Pattern titlepattern = Pattern.compile(".*<title>.*</title>.*");
  public static final String tempstuff = ".temp";
  public static Pattern csslinkpattern = Pattern.compile(".*<link.*type=/"text/css/".*");
  public static boolean iscontentstart(String line){
   return contentstartpattern.matcher(line).matches();
  }
  public static boolean iscontentend(String line){
   return contentendpattern.matcher(line).matches();
  }
  public static boolean istitle(String line){
   return titlepattern.matcher(line).matches();
  }
  public static boolean iscssline(String line){
   return csslinkpattern.matcher(line).matches();
  }
 
  public static boolean ishtmlfile(File file){
   String filename = file.getName().toLowerCase();
   if(filename.endsWith(".html") || filename.endsWith(".htm")){
    return true;
   }
   return false;
  }
 
  public static void formatandroidapi(File apifile) throws Exception{
   if(apifile.isDirectory()){
    File[] filelist = apifile.listFiles();
    for(File f:filelist){
     formatandroidapi(f);
    }
   }else{
    if(ishtmlfile(apifile)){
     cuthtml(apifile);
    }
   }
  }
 
  public static File createtempfile(File htmlfile) throws IOException{
   String basepath = htmlfile.getParent();
   String filename = htmlfile.getName();
   File tempfile = new File(basepath+"/"+filename+tempstuff);
   int i = 0;
   while(tempfile.exists()){
    tempfile = new File(basepath+"/"+filename+tempstuff+i);
    i++;
   }
   tempfile.createNewFile();
   return tempfile;
  }
  public static void cuthtml(File htmlfile) throws Exception{
  
   BufferedReader reader = null;
   PrintWriter writer = null;
   File tempfile = null;
   String filename = htmlfile.getPath();
   String titleline = null;
   boolean start = false;
   String cssline = null;
   try{
    reader = new BufferedReader(new  InputStreamReader(new FileInputStream(htmlfile)));
    String line = null;
    while((line = reader.readLine()) != null){
     if(titleline == null){
      if(istitle(line)){
       titleline = line;
      }
     }
     if(cssline == null){
      if(iscssline(line)){
       cssline = line;
      }
     }
     if(!start){
      start = iscontentstart(line);
     }else {
      if(iscontentend(line)){
       if(writer != null){
        writer.println(HtmlTemplete.htmlstuff.toString());
       }
       break;
      }else{
       if(tempfile == null){
       tempfile = createtempfile(htmlfile);
       writer = new PrintWriter(new FileOutputStream(tempfile));
       writer.println(HtmlTemplete.htmlprefix.toString());
       if(cssline != null){
        writer.println(cssline);
       }
       if(titleline != null){
        writer.println(titleline);
       }
       writer.println(HtmlTemplete.htmlmiddle.toString());
       }else{
        writer.println(line);
       }
      }
     }
    
    }
   }finally{
    if(reader != null){
     reader.close();
    }
    if(writer != null){
     writer.flush();
    
     writer.close();
    }
    if(htmlfile.delete())
    if(tempfile != null){
    
       tempfile.renameTo(new File(filename));
    // System.out.println(new File(tempfile.getParent()+"/"+filename));
    }
   
   }
  }
  public static void main(String[] s){
   long starttime = System.currentTimeMillis();
   //修改file的目录就可以
   File apifile = new File("E:/java资料/Android/docs/reference");
  try {
   APIUtil.formatandroidapi(apifile);
 } catch (Exception e) {
   e.printStackTrace();
 }
 System.out.println((System.currentTimeMillis() - starttime) / 1000);
 
  }
}


 

 

 

 

执行APIUtil类侧边栏和顶部那些没用的东西就去掉了,为了防止出错最好将docs目录备份一个。

 

去掉侧边栏代码后还要修改css文件让页面出现滚动条

修改docs/assets/android-developer-core.css

去掉开头部分的如下代码:

html,body,div,h1,h2,h3,h4,h5,h6,p,img,
dl,dt,dd,ol,ul,li,table,caption,tbody,
tfoot,thead,tr,th,td,form,fieldset,
embed,object,applet {
  margin: 0;
  padding: 0;
  border: 0;
}

/* BASICS */

html, body {
  overflow:hidden; /* keeps scrollbar off IE */
  background-color:#fff;
}

 

在浏览下reference(我只是修改了此目录下的html页面)的页面是不是只剩右侧部分了,感觉也不一样了吧。

 

这个java版的chm制作工具虽然很粗糙很不成熟 但是还是有点好处就是再大的doc目录都可以做 速度也很快。目前只是测试版本好多功能没有做也没有移动doc的html页面到程序目录下 这样只能在本机运行此工具才能找到页面(android学习要紧,这些小功能以后有时间在做)

 

工具使用jrex作为java内置的浏览器 不了解jrex的google之~,使用lucene为api建立索引。

 下载地址: https://download.csdn.net/download/a276202460/2647245

 源代码地址: https://download.csdn.net/download/a276202460/2647276

 代码比较乱也没仔细设计无聊的时候就写几行代码。

 

 使用方法:解压下载后的文件到任何目录 修改chmtool.bat 中的jre的目录 注意是JRE的目录不是jdk的目录  运行即可(JDK1.6 编译 编译级别1.6)

工具 -  打开API目录  选择要制作的doc目录操作图解如下:

 

打开目录后api目录树生成 然后点击  创建索引  选择索引的保存目录 等待索引创建成功

 

 

索引创建成功后就算完成制作了 ---》点击 保存 保存为API后缀的文件

 

 文件对话框中的保存按钮的label没换过来 还是打开 没关系啦将就下  保存完以后再倒入android2.2.API 就算成功了

 

点击 我的API 切换到浏览界面 右键左侧树中的 我的API 节点 添加API或是添加API分组 (添加API将android2.2.API导入)

 

 

 

 

 

 

我的API中左侧API树支持拖拽和编辑操作 选择对应的API 即可浏览使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值