制作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 条评论
登录 后参与评论

相关文章

来自专栏机器学习和数学

[编程经验] 我是如何半自动抓取素材公社图片的

网络爬虫是一件比较繁琐的事情,特别考验人的耐心。但又是非常令人着迷的一件事,因为当你从网络上爬到了自己的想要的数据,满满的成就感油然而生。但是我对爬虫掌握的并不...

36150
来自专栏林德熙的博客

如何使用 C# 爬虫获得专栏博客更新排行

昨天,梦姐问我们,她存在一个任务,找到 关注数排行100 和 浏览量排行100 的专栏博客,在2017年还有更新的专栏。 梦姐说他要出去一趟,M大神在吃饭,于是...

14610
来自专栏撸码那些事

是什么影响了数据库索引选型?

上一篇文章我们介绍了索引背后的数据结构,这篇文章我们来介绍影响索引数据结构选型的因素——存储器存取。

6520
来自专栏张善友的专栏

开源项目Generics.Net介绍

STL (标准模版库,Standard Template Library)各种不同类型的容器(container)、模板(template)、游标(Iterat...

209100
来自专栏知晓程序

开发 | 技术高人如何开发小程序?他们用这套方法

11620
来自专栏代码GG之家

Android 关机对话框概率没有阴影故障分析

Android 关机对话框概率没有阴影故障分析 ? 以玩的心态,做着感兴趣的事情而已,别无其他杂念。 android recent key长按事件弹起触发最近列...

25260
来自专栏张善友的专栏

基于DotNetOpenAuth实现OpenID 服务提供者

EverBox网盘(www.everbox.com)是由盛大创新院推出的一款网盘产品,提供了超大的免费存储空间(可升级到 10GB),支持文件同步、文件分享、在...

359100
来自专栏牛客网

C++后台腾讯WXG实习面经(已拿offer)

时间:2018年4月16日 岗位:C/C++后台开发(Linux) BG:WXG 关于我:本科大三 预计2019年毕业 一面(普通技术面) 过程:递交简历 ->...

837100
来自专栏CSDN技术头条

MongoDB的设计模式策略

MongoDB是一项通用工具,但它也并非完美。针对某些MongoDB不适用的场合,有时可选用设计模式来加以应对。 MongoDB是一个NoSQL文档数据库,在大...

22760
来自专栏牛客网

C++后台实习面经 - 腾讯WXG

拿到题目之后没有任何思考,想用中序遍历然后把遍历结果放到一个容量为k的队列中(基本操作)。但是为什么顺手就写下vector???面试官看见我这么快下笔之后看了看...

22340

扫码关注云+社区

领取腾讯云代金券