制作Aspose CHM文档的过程记录

最近公司需要使用Aspose组件开发相关内容,但是网上找不到理想的参考文档,官网访问速度也慢的可以。所以打算自己做份CHM文档,做的过程中遇到很多困难,这里记录一下。 第一步是在Aspose官网上把javadoc文档爬取出来,我使用的工具是TeleportPro。爬取的网址是

经过尝试爬取深度设为7最好。爬出来发现内容很多,有一个多G,而且有很多杂乱的内容,我们知道一般javadoc文档只是html和css的组合,不需要js和各种图片,所以仅保留了合适的目录下的html文档和api-reference-ui.css文件,其余文件全部删除。

但是这是发现由于删除了一些文件,导致html文件中对api-reference-ui.css引用失效,于是用notepad++对引用路径进行批量替换(../../../apireference.dynabic.com/doc/resources/css/api-reference-ui.css -> api-reference-ui.css),这时保证CSS文件能够正常引用,但是用这些文件生成的chm文档仍然很大,并且有一些无用的按钮无法点击,然后我们需要把它们干掉。于是我写了一个java程序,进行操作,需要最新的程序或者有不理解的可以联系我:

package edu.jiangxin.tools;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import edu.jiangxin.common.FileFilterWrapper;

public class RemoveHtmlElement {

    static final String charsetName = "UTF-8";
    static final String[] divClassNames = { "Header", "aspNetHidden", "Search", "clearAll", "Header" };
    static final String[] divIds = { "Header", "leftmenu" };

    public static void main(String[] args) throws IOException {
        ArrayList<File> files = new FileFilterWrapper().list("C:/asposebak", "htm");
        for (File file : files) {
            Document doc = Jsoup.parse(file, charsetName);
            for (int i = 0; i < divClassNames.length; i++) {
                Elements eles = doc.getElementsByClass(divClassNames[i]); // eles不可能为null

                eles.remove();
            }
            for (int i = 0; i < divIds.length; i++) {
                Element ele = doc.getElementById(divIds[i]);
                if (ele != null) {
                    ele.remove();
                }

            }

            Elements eles = doc.getElementsByTag("script");
            for (int i = 0; i < eles.size(); i++) {
                Element ele = eles.get(i);
                if (ele.attr("language").equals("javascript") && ele.attr("type").equals("text/javascript")) {
                    ele.remove();
                }
            }

            FileOutputStream fos = new FileOutputStream(file, false);
            OutputStreamWriter osw = new OutputStreamWriter(fos, charsetName);
            osw.write(doc.html());
            osw.close();
            System.out.println(file.getAbsolutePath());
        }
    }

}

通过程序删除之后基本解很清爽了,当然还需要使用notepad++进行一些简单的文本批量替换。 最后的工作就是使用easychm生成chm文档了,我用的是试用版,感觉只不过多了广告,生成的chm文档并不影响使用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏dotnet & java

WCF入门 (14)

做了一份面试题,最后一题是数据库的,写个查询。要查出Score有两次及两次以上超过79的Name和他的最高得分,同时显示超过79分的次数。

9820
来自专栏AhDung

【vbs】vbs写ini文件

这两天在折腾给一个项目打安装包,第一次接触软件打包,用的Advanced Installer(以下简称AI),应该说如果安装过程没有特殊动作(常规动作指释放文件...

17320
来自专栏精讲JAVA

Java并发:隐藏的线程死锁

许多程序员都熟悉Java线程死锁的概念。死锁就是两个线程一直相互等待。这种情况通常是由同步或者锁的访问(读或写)不当造成的。

12230
来自专栏睿哥杂货铺

动态追踪技术(四):基于 Linux bcc/BPF 实现 Go 程序动态追踪

在这篇文章中,我将迅速调研一种跟踪的 Go 程序的新方法:基于 Linux 4.x eBPF 实现动态跟踪。如果你去搜索 Go 和 BPF,你会发现使用 BPF...

68750
来自专栏极客慕白的成长之路

信息安全实验室招新试题和完全解析

写个网页应该是很简单的,不管是静态网页还是带特效的网页。但是有几个问题,需要说明一下。

13930
来自专栏FreeBuf

kill.exe溢出漏洞分析与EXP讨论

* 本文原创作者:zzz66686,本文属FreeBuf原创奖励计划,未经许可禁止转载 1. 前言 前几日,笔者在exploit-db上发现了一个kill.ex...

25590
来自专栏雨过天晴

原 荐 C# FTP 坑了我两天的一个坑

1.4K70
来自专栏偏前端工程师的驿站

四则运算核心算法(开源)

前言                                                                              ...

20290
来自专栏JackieZheng

Java豆瓣电影爬虫——小爬虫成长记(附源码)

  以前也用过爬虫,比如使用nutch爬取指定种子,基于爬到的数据做搜索,还大致看过一些源码。当然,nutch对于爬虫考虑的是十分全面和细致的。每当看到屏幕上唰...

447110
来自专栏跟着阿笨一起玩NET

ReSharper 配置及用法

1:安装后,Resharper会用他自己的英文智能提示,替换掉 vs2010的智能提示,所以我们要换回到vs2010的智能提示

18010

扫码关注云+社区

领取腾讯云代金券