Asciidoctor-pdf生成pdf文件


本文由asciidoctor轉docbook,再由pandoc轉markdown而來

簡述

asciidoctor-pdf是Asciidoctor一個使用Prawn將asciidoc文檔轉換成pdf的插件,由Asciidoctor組織開發維護,托管在GitHub上,本文將簡單介紹下這個插件的使用,部分內容來源於官方。

安裝

使用gem安裝

$ gem install asciidoctor-pdf

語法高亮支持

Rouge (preferred, minimum version: 2.0.0)

$ gem install rouge

Pygments

$ gem install pygments.rb

CodeRay

$ gem install coderay

啟用語法高亮,只需要在.adoc文檔頭部填寫如下內容即可:

:source-highlighter: rouge

使用

基本命令,轉換asciidoc成為pdf

$ asciidoctor-pdf basic-example.adoc
$ # 這兩個命令是等效的,只不過上邊的命令更加簡潔
$ asciidoctor -r asciidoctor-pdf -b pdf basic-example.adoc

這里需要說明一下,如果文檔中包含中文,初次轉換的時候會出現亂碼的問題。解決方式請看中文亂碼問題章節。

我是占位符

后續新增內容區間

問題

中文亂碼問題

如果文檔中包含中文,初次轉換的時候會出現亂碼的問題。這里簡單介紹下asciidoctor-pdf的默認主題。如果查閱了asciidoctor-pdf的幫助文檔,就會知道他支持自定義主題的。中文亂碼的原因也是由於默認主題中使用了非中文字體導致的,需要添加中文字體。這里有兩種解決方式可供選擇:

  • 創建項目/用戶主題

項目和用戶的創建方式一樣,不同的是二者存儲的位置不一樣,用戶的存儲在一個固定文件夾,比如~/.config/adoc,只要使用命令生成的時候填寫了正確的路徑即可。

  • 在adoc所在文件下新建 fonts文件夾,將中文字體復制到 fonts文件夾中

  • 復制asciidoctor-pdf安裝目錄中的data/themes/default-theme.yml到當前目錄,或者新建一個 theme.yml

  • 編輯修改default-theme.yml內容,主要節點:

font:
  catalog:
    song: # 宋體,請保證fonts文件中包含如下字體
      normal: STSONG.TTF
      bold: STSONG.TTF
      italic: STSONG.TTF
      bold_italic: STSONG.TTF
  base:
    # 設置字體
    font_family: song
literal:
  font_family: song
  • 生成pdf
$ asciidoctor-pdf -a pdf-style=default-theme.yml -a pdf-fontsdir=fonts test.adoc
  • 默認主題

查看../bin/asciidoctor-pdf源碼,看到他實際使用的是../../lib/asciidoctor/pdf.rb,我們再查看下這個ruby文件,發現這個又重新定位到../asciidoctor-pdf文件夾,即../lib/asciidoctor-pdf,其中包含了 theme_loader.rb,繼續查看這個文件,閱讀源碼之后,發現默認會先加載主題data\themes\base-theme.yml,如果這個不存在會加載data\themes\default-theme.yml,也就是說base-theme.yml的優先級比default-theme.yml高,我們需要更改base-theme.yml內容。主要修改內容同創建項目/用戶主題 章節是一樣的。修改完成之后,此后只需要執行:

$ asciidoctor-pdf test.adoc

或者我們可以修改default-theme.yml,或者創建自己的主題文件,此后生成需要指明主題文件:

$ asciidoctor-pdf -a pdf-style=default-theme.yml test.adoc

如果以上兩種解決方法不合你心意,那你可以參考下asciidoctor-pdf-cjk-kai_gen_gothic這個項目,這是一個asciidoc-pdf的主題項目,主要用於支持CJK [1],支持中文簡體、繁體、韓語、日語等。

[1] 中日韓統一表意文字(CJK Unified Ideographs)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM