专栏首页Aloys的开发之路制作Aspose CHM文档的过程记录

制作Aspose CHM文档的过程记录

欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://github.com/jiangxincode 知乎地址: https://www.zhihu.com/people/jiangxinnju

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

  • http://www.aspose.com/api/java/pdf
  • http://www.aspose.com/api/java/cells

经过尝试爬取深度设为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 条评论
登录 后参与评论

相关文章

  • 制作Aspose CHM文档的过程记录

    最近公司需要使用Aspose组件开发相关内容,但是网上找不到理想的参考文档,官网访问速度也慢的可以。所以打算自己做份CHM文档,做的过程中遇到很多困难,这里记录...

    用户1221057
  • Android Studio移动鼠标显示悬浮提示的设置方法

    以Windows 10 + Android Studio 3.0.1为例 默认情况下,在Android Studio中将鼠标移动到函数位置处无法显示悬浮提示,需...

    用户1221057
  • 使用CXF+Spring发布WebService,启动报错

    使用CXF+Spring发布WebService,启动报错,日志如下: 五月 12, 2017 9:01:37 下午 org.apache.tomcat.uti...

    用户1221057
  • Keras官方中文版文档来了~

    ? 发布三年之后,Keras终于有了官方中文版文档。 今年1月,Keras作者、谷歌AI研究员François Chollet在推特上发出召唤:讲中文的Ker...

    量子位
  • 干货 | Elasticsearch通用优化建议

    Elasticsearch开发实战的后期会遇到性能问题,包括:创建索引性能、写入数据性能、检索性能等。网上有很多结合自己实际应用场景的相关优化建议,但“对症下药...

    铭毅天下
  • 详解 redis-4.x 持久化机制

    redis的数据全部在内存中,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证redis的数据在遇到突发状况的时候不会丢失,或者只丢失少量,于是必须根据...

    CoderJed
  • NIO server && ThreadPoolServer

    大学里的混子
  • 文本处理,第2部分:OH,倒排索引

    这是我的文本处理系列的第二部分。在这篇博客中,我们将研究如何将文本文档存储在可以通过查询轻松检索的表单中。我将使用流行的开源Apache Lucene索引进行说...

    沈唁
  • Redis持久化详解

    随着写操作的不断增加,AOF文件会越来越大。例如你递增一个计数器100次,那么最终结果就是数据集里的计数器的值为最终的递增结果,但是AOF文件里却会把这100次...

    dogfei
  • Redis入坟(五)持久化

    Redis 速度快,很大一部分原因是因为它所有的数据都存储在内存中。如果断电或者宕机,都会导致内存中的数据丢失。为了实现重启后数据不丢失,Redis 提供了两种...

    源码之路

扫码关注云+社区

领取腾讯云代金券