利用kindlegen实现txt格式小说转换为mobi格式小说(C++实现)

   一直以来喜欢在kindle上看小说,kindle不伤眼,也可以帮助控制玩手机的时间。但在kindle上看txt格式的网络小说就很头疼了,这类小说在kindle上是没有目录的,而且篇幅巨长。所以一直以来我都想加上目录。于是就有了这篇文章。

  在这里,要想加上目录,就要将txt格式的小说转换为mobi格式。我借助了kindlegen,它的一些语法不再这里详说了,给个示意图,如下:

  利用kindlegen实现txt格式小说转换为mobi格式小说(C++实现)_第1张图片

 

   总思路就是生成html和ncx、opf文件,代码如下:

  1.read.cpp

  

#include 
#include <string>
#include 
#include 
#include 
#include 
#include "productHtml.h"

using namespace std;

int main(int argc,char * * argv)
{
    fstream fin(argv[1],fstream::in);
    string test="";
    vector<string> vec_menu;
    vector<string> vec_text;
    string rs="^[0-9]";
    regex expression(rs);
    smatch wm;
    string str_text="

"; while(getline(fin,test)) { if (regex_search (test,wm,expression)) { vec_menu.push_back(test); //cout< str_text+="

"; vec_text.push_back(str_text); str_text="

"; } else { str_text+=test; str_text+="
"; } } vec_text.push_back(str_text); cout<" "<endl; for(int i=0;i) { /* cout<*/ string str=vec_text[i]; string str_name=i==0?"前言":vec_menu[i-1]; productHtml(str_name,str,i); } productNcx(vec_menu); productOpf(vec_menu); cout<<"finished"<<endl; fin.close(); int ret=(int)ShellExecute(NULL,"open","kindlegen.exe","test.opf",NULL,SW_SHOWNORMAL); cout<<"ret: "<endl; return 0; }

2.productHtml.h

#include 
#include <string>
#include 

using namespace std;

void productHtml(string str_name,string str_text,int no)
{
    string fileName="./chapter"+to_string(no)+".html";
    fstream fout(fileName,ios::out);
    fout<<""<""<""
        <""
        <""<"";
    fout<<"</span><span style="color: #800000;">"</span><<str_name<<<span style="color: #800000;">"</span><span style="color: #800000;">"<str_text;
    fout<<" "<"";

    fout.close();
}

void productNcx(vector<string> & menu_name)
{

    fstream fout("./menu.ncx",ios::out);
    fout<<""<""
<""<""<""<""<""<""<""<"藏地密码"<"何马"<"";
fout<<""<""<"前言"<""<""<"";
    for(int i=0;i)
    {
        fout<<""+menu_name[i]+"\" playOrder=\"1\">"<""<""+menu_name[i]+""<""<""+to_string(i+1)+".html\"/>"<"";
    }
    fout<<" "<"";
    fout.close();
    cout<<"finished ncx"<<endl;
}

void productOpf(vector<string> & menuName)
{
    fstream fout("./test.opf",fstream::out);
    fout<<""<""<"电子书标题"<"en-us"<""<"";
    fout<<""<<endl;
    for(int i=0;i1;i++)
    {
        fout<<""+to_string(i)+"\" media-type=\"application/xhtml+xml\" href=\"chapter"+to_string(i)+".html\"/>"<<endl;
    }
    fout<<""<"";
    for(int i=0;i1;i++)
    {
        fout<<""+to_string(i)+"\"/>"<<endl;
    }
    fout<<" "<"";
    fout.close();
    cout<<"finished opf"<<endl;
}

git地址如下:https://github.com/JsonZhangAA/Txt2Mobi,有兴趣的朋友,大家一起改良。

你可能感兴趣的:(利用kindlegen实现txt格式小说转换为mobi格式小说(C++实现))