如何打开和转换CHM文档?


9

我有些.chm格式的文件。我想知道在Ubuntu中是否有一种文件格式可以更容易浏览,支持并具有相同的文件大小?

如果有的话,我想开始转换所有这些书籍,并可能在所有Ubuntu PC和Android手机上以较少的麻烦使用它们。


Answers:


13

您可以使用命令行程序chm2pdf在此处安装chm2pdf)将它们转换为PDF 。安装完成后,您可以从如下所示的终端运行命令:

chm2pdf --book in.chm out.pdf

如果您不知道,可以使用几种chm阅读器-只需chm在软件中心中搜索即可。

您还可以使用命令行工具7-Zip chm文件提取为html (在此处安装p7zip-full):

7z x file.chm

PDF转换不是我正在寻找的解决方案。但是,感谢您的快速回复。还有更多想法吗?
Julio

3

如果您不想使用PDF,那么我建议使用Epub(一种相当不错的开放式电子书格式),您可以在Ubuntu上为其安装一个称为Caliber的良好阅读器,Caliber具有有用的转换工具,可以导入chm文件,然后将它们转换为包括epub的其他格式。在大多数智能手机和平板电脑上也可以轻松阅读epub。

可以从软件中心安装口径。


2

如果您更喜欢KDE,也可以使用KChmViewer。


KChmViewer很好。但我更喜欢firefox插件[CHM Reader]。对于我的问题,这不是一个好的解决方案,因为我想摆脱那些糟糕的chm文件,我已经不得不采用更好的支持格式。Pdf也不好。选项?
Julio



0

dv3500ea的chm2pdf回答很好,但我更喜欢将它们阅读为html文件。

简而言之:

sudo apt-get install libchm-bin
extract_chmLib myFile.chm outdir

来源:http//www.ubuntugeek.com/how-to-convert-chm-files-to-html-or-pdf-files.html

然后打开./outdir/index.html查看转换后的html文件!耶!好多了。现在,我可以像.chm文件一样浏览它,但是我也可以使用Chrome浏览器在页面上搜索文本,轻松打印等。

让我们执行一个名为 chm2html

这是我写的一个不错的脚本。

  1. 复制以下脚本并将其粘贴到文件中 chm2html.py
  2. 使它可执行: chmod +x chm2html.py
  3. ~/bin如果您还没有目录,请创建一个目录:mkdir ~/bin
  4. ~/bin目录中建立指向chm2html.py的符号链接:ln -s ~/path/to/chm2html.py ~/bin/chm2html
  5. 注销Ubuntu,然后重新登录,或使用 source ~/.bashrc
  6. 用它!chm2html myFile.chm。这将自动转换.chm文件并将.html文件放入一个名为的新文件夹中./myFile,然后创建一个名为的符号链接./myFile_index.html,该链接指向./myFile/index.html

chm2html.py 文件:

#!/usr/bin/python3

"""
chm2html.py
- convert .chm files to .html, using the command shown here, with a few extra features (folder names, shortcuts, etc):
http://www.ubuntugeek.com/how-to-convert-chm-files-to-html-or-pdf-files.html
- (this is my first ever python shell script to be used as a bash replacement)

Gabriel Staples
www.ElectricRCAircraftGuy.com 
Written: 2 Apr. 2018 
Updated: 2 Apr. 2018 

References:
- http://www.ubuntugeek.com/how-to-convert-chm-files-to-html-or-pdf-files.html
  - format: `extract_chmLib book.chm outdir`
- http://www.linuxjournal.com/content/python-scripts-replacement-bash-utility-scripts
- http://www.pythonforbeginners.com/system/python-sys-argv

USAGE/Python command format: `./chm2html.py fileName.chm`
 - make a symbolic link to this target in ~/bin: `ln -s ~/GS/dev/shell_scripts-Linux/chm2html/chm2html.py ~/bin/chm2html`
   - Now you can call `chm2html file.chm`
 - This will automatically convert the fileName.chm file to .html files by creating a fileName directory where you are,
then it will also create a symbolic link right there to ./fileName/index.html, with the symbolic link name being
fileName_index.html

"""


import sys, os

if __name__ == "__main__":
    # print("argument = " + sys.argv[1]); # print 1st argument; DEBUGGING
    # print(len(sys.argv)) # DEBUGGING

    # get file name from input parameter
    if (len(sys.argv) <= 1):
        print("Error: missing .chm file input parameter. \n"
              "Usage: `./chm2html.py fileName.chm`. \n"
              "Type `./chm2html -h` for help. `Exiting.")
        sys.exit()

    if (sys.argv[1]=="-h" or sys.argv[1]=="h" or sys.argv[1]=="help" or sys.argv[1]=="-help"):
        print("Usage: `./chm2html.py fileName.chm`. This will automatically convert the fileName.chm file to\n"
              ".html files by creating a directory named \"fileName\" right where you are, then it will also create a\n"
              "symbolic link in your current folder to ./fileName/index.html, with the symbolic link name being fileName_index.html")
        sys.exit()

    file = sys.argv[1] # Full input parameter (fileName.chm)
    name = file[:-4] # Just the fileName part, withOUT the extension
    extension = file[-4:]
    if (extension != ".chm"):
        print("Error: Input parameter must be a .chm file. Exiting.")
        sys.exit()

    # print(name) # DEBUGGING
    # Convert the .chm file to .html
    command = "extract_chmLib " + file + " " + name
    print("Command: " + command)
    os.system(command)

    # Make a symbolic link to ./name/index.html now
    pwd = os.getcwd()
    target = pwd + "/" + name + "/index.html"
    # print(target) # DEBUGGING
    # see if target exists 
    if (os.path.isfile(target) == False):
        print("Error: \"" + target + "\" does not exist. Exiting.")
        sys.exit()
    # make link
    ln_command = "ln -s " + target + " " + name + "_index.html"
    print("Command: " + ln_command)
    os.system(ln_command)

    print("Operation completed successfully.")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.