分享

NOOK step by step:不破解,也中文。之二:实例

 maychao 2014-09-18

  《NOOK step by step:不破解,也中文》一贴从原理、思路和解决方案上给出了NOOK不破解情况下修改epub文档以正确显示中文的做法。其中的解决方案部分也有具体的操作步骤。由于原贴正文过长,现把具体的实例单独出来,成此一贴。
  这里,仅举一最简单的操作实例,即简化修改法(解决方案三)。

  1.原文档:从书仓下载的“南方周末20100812.epub”

  2.目的:由于该文档中没有NOOK的中文字体调用路径,在NOOK上显示为问号,不成正确显示中文。因此,根据一文的原理和解决方案,在不破解的前提下,简单修改epub文档,让NOOK正确显示中文。

  3.应用方案:简化修改css文件法。(解决方案三)

  4.原理回顾:
  4.1 NOOK中文字体调用显示代码:不完全再述,核心代码是:
  自装内存字体简化代码:url(res:///system/media/sdcard/fonts/zw.ttf);
  自装TF卡字体简化代码:url(res:///sdcard/fonts/zw.ttf);
  默认字体简化代码:url(res:///system/fonts/DroidSansFallback.ttf);
  4.2 将上述核心代码添加到原css文件中字体调用显示代码中。

  5.实施步骤:
  5.1 改后缀名。将下载的epub文档的后缀.epub改为.zip。如将“南方周末20100812.epub”改为“南方周末20100812.zip”。
  5.2 打开压缩文件。进入ops目录,找到以.css为后缀的样式表文件。这个样式表文件也可能被制作者放在再下一级子目录里。也有的epub文档竟然没有按规范把代码文件和内容文件放到ops目录里,而是全部扔到根目录下,晕。
  南方周末20100812.zip的css文件为:about.css,放在OPS/css目录下:

META-INF
OPS
  ├─..
  ├─ css
  │     └─about.css
  ├─ images
  ├─ ArticelA01002FM.htm
      ...
mimetype


  5.3 打开样式表文件。双击压缩文件中的.css样式表文件,压缩程序会用记事本打开以供编辑。
  注意:有的样式表文件保存时有问题,打开的代码是一大串没有换行符的代码,看着头晕(coay.com生成的epub文档都这样,再晕)。解决办法,Ctrl+A选择全部,复制粘贴到一个空白word文档里,在word里就可识别出规范分行的代码;然后Ctrl+A选择全部,复制粘贴回记事本里,这回就显示规范分行的代码了。
  5.4 修改编辑样式表文件。在打开的样式表文件中,找到以@开头的字体名称定义代码和body代码,用上述NOOK代码(3种代码任选一)覆盖粘贴,即用NOOK代码取代原代码。
  一般来说,epub文档中的.css中,定义字体调用的代码为@打头的代码,字体名称为font-family后的名称“cnepub”。引用路径是src:url后括号里的具体字体文件路径。如下面就是一个epub文档的字体定义和调用代码,是典型的为SONY系列机型定义的:

  1. @font-face {
  2. font-family:"cnepub";
  3. src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf), url(res:///tt0011m_.ttf);
  4. }
复制代码

  修改的办法,就是把上述NOOK的字体路径代码添加到这句SONY代码之后。修改后的代码为:
  1. @font-face {
  2. font-family:"cnepub";
  3. src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf), url(res:///tt0011m_.ttf),
  4. url(res:///system/fonts/DroidSansFallback.ttf);
  5. }
复制代码

  注意:此时要把SONY代码后的";"(分号),改为","(逗号),在新添加的NOOK代码后写上";"(分号)或者没有标点符号。
  这里我举的是南方周末20100812.epub的例子,其中的about.css中,定义字体调用的代码为@打头的代码,字体名称定义为"shucang":
  1. @font-face {
  2. font-family: "shucang";
  3. src:local("微软雅黑"),
  4. local("宋体"),
  5. url(msyh.ttf);
  6. }
复制代码

  这里调用的是本地(机器)字体微软雅黑或宋体,或者epub文档内的"msyh.ttf"字体。实际上这个epub文档没有内嵌字体,因此在NOOK上显示不出中文,只是一堆问号。
  为了让NOOK显示中文,必须在其后添加一行NOOK代码。但实际上是通不过的。只能干脆废除这个完整的本地代码,完全改为NOOK代码。修改后的代码为:
  1. @font-face {
  2. font-family: "shucang";
  3. src:url(res:///system/fonts/DroidSansFallback.ttf);
  4. }
复制代码

  同样要注意逗号和分号的修改。

  5.5 保存修改。点击保存所修改的css文件,压缩软件会提出是否将修改后的文件保存到原压缩文件中,点“是”保存。并关闭压缩软件。

  5.6 改后缀名。将修改后的zip文档的后缀.zip改回.epub。如将“南方周末20100812.zip”改回“南方周末20100812.epub”。
  这样,简单地添加一句NOOK字体路径语句,epub文档就能顺利在NOOK上阅读了。

  6.进一步的讨论:

  6.1 关于通用代码

  上述修改,只是简单地添加一行代码,即可在不破解的NOOK上显示中文。但是,为了保持修改后的文档能让他人分享,还是不要删除掉原来的SONY机型代码,保留为好。
  更进一步,为了让各种机型都能通用,可以修改为如下代码,在SONY、DR800SG、NOOK、翰林V3+等各机型上都能正常显示中文:
  1. @font-face {
  2. font-family:"shucang";
  3. src:url(res:///opt/sony/ebook/FONT/zw.ttf),
  4. url(res:///Data/FONT/zw.ttf),
  5. url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)
  6. url(res:///fonts/ttf/zw.ttf),
  7. url(res:///../../media/mmcblk0p1/fonts/zw.ttf),
  8. url(res:///DK_System/system/font/zw.ttf),
  9. url(res:///abook/fonts/zw.ttf),
  10. url(res:///system/fonts/zw.ttf),
  11. url(res:///system/media/sdcard/fonts/zw.ttf),
  12. url(res:///sdcard/fonts/zw.ttf),
  13. url(res:///system/fonts/DroidSansFallback.ttf),
  14. url(fonts/zw.ttf);
  15. }
复制代码


  6.2 关于改用自己喜欢的字体

  如果你自己不喜欢系统内置的黑体字,想改用自己喜欢的字体,不破解能实现么?可以。把你喜欢的字体(比如方正兰亭纤黑)FZLTXHK.TTF改名为zw.ttf,安装在NOOK上内存fonts目录或TF卡fonts目录里。这时字体调用的代码为:
  1. @font-face {
  2. font-family:"shucang";
  3. src:url url(res:///system/media/sdcard/fonts/zw.ttf),
  4. url(res:///sdcard/fonts/zw.ttf),
  5. url(res:///system/fonts/DroidSansFallback.ttf);
  6. }
复制代码

  这段代码的意思是:先看你是否在内存fonts目录里安装了zw.ttf字体,如果没有,再看是否在TF卡上安装有zw.ttf,再没有,则调用系统默认的黑体字DroidSansFallback.ttf。三个有调用顺序的字体,用逗号分隔,并依次寻找调用。

  6.3 关于书仓epub的问题

  上述简化修改办法,在各大网站上下载的都可以成功显示中文。但在书仓下载的epub文档,经上述修改后,仍不正确显示中文,仍是问号满屏。怎么办?
  这个问题曾困扰我一整通宵,并无果而终。
  后来请教高手,并仔细分析了书仓epub文档的代码,发现问题不在我的修改思路,不在我的修改代码的准确性,而出在书仓的epub代码不规范上。最关键的问题就在于其epub包里的html文件中,对css样式表的链接代码有误,采用了大写字母,造成NOOK不能正确识别并调用css文件。
  找到了问题的结症,解决就很简单。
  解决办法:用有整个目录查找替换功能的文本编辑器(如EditorPlus)或网页编辑软件(如DreamWeaver),把不规范的大写字母改为小写字母,保存即可。
  即,出问题的代码是:
  1. <link REL="stylesheet" HREF="css/about.css" TYPE="text/css" />
复制代码

  修改为:
  1. <link rel="stylesheet" href="css/about.css" type="text/css" />
复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多