Gitbook 生成 pdf 中文字体错乱问题解决办法

Gitbook 生成 pdf 中文字体错乱问题解决办法

用过 Gitbook 的都知道, Gitbook 会自动生成 pdf 以提供下载, 但十分遗憾的是自动生成的 pdf 对中文的支持并不好, 经常出现字体不一致的现象, 影响阅读, 强迫症更是难以忍受.

示例:

下面针对这一问题提供简单的解决办法: 本地命令行生成 pdf 文件. 当然这种方法有一定局限性, 你需要找到托管在 github 对应的源码仓库且转换过程中不出错. (由于水平有限未能解决在线生成的pdf中文字体错乱问题, 见谅. 也就是说网站自动生成的 pdf 依旧字体错乱, 但是本地生成的pdf文件是没有这个问题的 orz... 如果是 gitbook 上的写作者的话可以本地生成 pdf 上传至网盘提供下载)

Gitbook 项目介绍

GitBook 是一个基于 Node.js 的命令行工具,可使用 Github/Git 和 Markdown 来制作精美的电子书,GitBook 并非关于 Git 的教程。

Gitbook 安装(以下环境是在 OS X 中进行的, 其他环境记得替换命令)

  • 通过 NPM 安装 Gitbook
$ npm install gitbook-cli -g
  • 查看 Gitbook 版本
$ gitbook versions
$ sudo ln -s ~/Applications/calibre.app/Contents/MacOS/ebook-convert /usr/bin

Gitbook 本地生成文档

$ git clone https://github.com/Aaaaaashu/Mac-dev-setup

注意是电子书托管的仓库地址而不是电子书的地址, 有的作者会直接给出, 没有给出的话通过作者 id 在 github 上查找, 注意替换地址. 还有一些没能找到仓库的, 可以去其他网站找一下 pdf.

  • 进入文件夹
$ cd Mac-dev-setup
  • 生成 HTML 文件(非必要)
$ gitbook serve

默认在当前目录下生成包含 html 网页名为 _book 的文件夹, 并启动端口为4000的预览服务器, 可通过 http://localhost:4000 预览.

  • 生成 pdf 文件
$ gitbook pdf

默认在当前目录下生成名为 book.pdf 的文件, 类似的可生成 epub 和 mobi 文件.
这样字体正确的 pdf 文件就生成了, 对比直接从 gitbook 下载的 pdf, 体积变大了.

常见错误

本地命令经常会卡在最后一步, 经常见的如 permission denied, 即没有权限, 记得在前面添加 sudo 或直接启用 admin.
你还可能碰到许多诸如下载失败的错误, 多数情况下是墙引起的, 还请自备FQ技巧哈.
其他的错误有插件加载失败, 错误信息里有命令提示gitbook install.
还有就是 svg 转换 png 的错误, 不影响阅读情况下可以找到对应的文件删除对应语句. 如果 svg 图片很多的话, 靠删除不能解决问题. 看了些讨论也没能解决, 如果你有解决办法, 请联系我.

写在最后

网上的一些教程由于时间太早, 有些命令已经舍弃了, 如 gitbook 的安装命令, 添加 pdf 依赖等, 还请以官方文档为准.

本文旨在解决从 gitbook 下载的 pdf 中文字体错乱问题, 更多的 gitbook 使用技巧及如何构建电子书可以参考GitBook 简明教程, 和参阅官方文档或自行 Google. 希望能对你有所帮助.

Gitbook地址 || Gitbook项目地址 || 中文文档
参考: Gitbook 使用入门

时间: 2024-12-20 01:18:52

Gitbook 生成 pdf 中文字体错乱问题解决办法的相关文章

iText生成pdf中文字体解决方案

相信用过itext的朋友都知道,中文显示一直都是个问题(最新版5.5.7官方也没直接集成中文字体). 当然这样的问题,早就有高手解决了,那就是使用iTextAsian.jar. 但是本文介绍的,不是使用iTextAsian.jar,而是另一种解决方法. 在此之前,需要准备的仅仅为itextpdf-5.x.jar 和一个 ttf格式的中文字体.比如我们常用的宋体simsun.ttf. 我们首先要做的,就是将simsun.ttf集成到我们的项目中: 测试例子: package com.example

dompdf中文字体乱码解决办法(特别是代码迁移引起的乱码)

dompdf\lib\fonts\dompdf_font_family_cache.php记住这个文件里面存放的是字体生成的缓存,迁移时如果覆盖了这个文件会导致乱码而且很难找到出错的地方,相信我.... dompdf是php把html导出pdf的工具,十分好用,除了个别css3的属性不支持,其他都非常不错,中文需要引用中文字体,具体办法官方有这里简单说下: 代码: $html = '<html><head> <meta http-equiv="Content-Typ

JasperReport4.6生成PDF中文

Web项目中PDF显示中文 本人无奈使用JasperReport4.6,因为这本书(好像也是唯一的一本国内的介绍JasperReport的书), 选择"文件"→New命令,弹出一个新建打印有关资源的向导 在这里选择Report中的B lank A4,含义是创建一个A4幅面纸张大小的模板文件, 1.2.1  创建模板文件(2) 选中后单击右下角的 按钮,即打开这个模板,并且设置保存模板文件的路径,效果如图1.6所示. 模板文件的扩展名为jrxml,单击"下一步"按钮出

jupyter画图中文显示乱码问题解决办法

下定决心好好修炼一下可视化能力,却发现自己电脑上jupyter notebook画图显示中文字符会显示为小方格,网上查找了好多方法,虽然每位分享者都写着亲测有效,但是叶子姐姐亲测无效,伤心.... 大海捞针式检索各大神方法,终于一不小心成功了,记录一下,以备下一台电脑又出现此问题!!! 1.anaconda加载中文字体库 将C:\Windows\Fonts\SimHei.ttf复制到anaconda安装路径\Lib\site-packages\matplotlib\mpl-data\fonts\

Android中ListView的item按钮监听错乱问题解决办法

在开发中经常会遇到这样的问题,做了一个列表,给列表的每一项添加了按钮监听事件,但是在列表的数据很多的时候经常会出现点击后错乱的问题.对于这种问题,我们在程序中可能都有自己的解决办法,但是你也许第一次发现这个问题的时候会跟我之前一样手足无措. 那么现在我们可以分析一下这种问题的根本原因. 首先,我们来看一下一个出错的BaseAdapter. package com.example.listdelectdemo; import java.util.ArrayList; import android.

myeclispe中向mysql中插入中文数据出现??问题解决办法

或许很多人会出现??这种令人头痛的mysql的中文乱码问题:解决如下: 1.先对于新建的数据库要设置默认的字符集为UTF-8 create database mydb default character set utf8 collate utf8_general_ci; 2.然后对于想对应的表进行设置默认字符集 CREATE TABLE IF NOT EXISTS `mydb` ( `username` varchar(64) NOT NULL, `userid` int(11) NOT NUL

jsp中request接收中文参数乱码问题解决办法

在利用表单提交数据时发现,获得的中文参数会发生乱码,解决方法如下: <body> <% String s=request.getParameter("uname"); s = new String(s.getBytes("ISO-8859-1"),"utf-8");//解决乱码问题 %> <%=s %> </body> s = new String(s.getBytes("ISO-8859

数据库中文显示乱码问题解决办法

Ubuntu 14.04    mysql 5.5  python 2.7 从网页爬取数据存入数据库显示乱码 以root权限登录 修改mysql配置文件 /etc/init.d/my.cnf 找到[client]在下面加入 default-character-set=utf8 找到 [mysqld_safe]在下面加入 default-character-set=utf8 找到[mysqld]在下面加入 default-character-set=utf8 init_connect='SET N

mysql,用存储过程插入中文导致乱码问题解决办法

DELIMITER $$ USE `u2_test10`$$ DROP PROCEDURE IF EXISTS `Pro_apply`$$ CREATE DEFINER=`root`@`%` PROCEDURE `Pro_apply`(IN aid INT,IN uid INT,IN reas CHAR(50) CHARACTER SET utf8)//char(50) 这只urf-8BEGIN DECLARE score INT; SELECT COUNT(*) INTO score FROM