Asciidoctor PDF CJK Ext 是用來提供 Asciidoctor / AsciidoctorJ / AsciidocFX / Maven / Gradle 產生包含 CJK languages (Chinese, Japanese, Korean) 的 PDF 時所需要的 theme 跟 ttf 檔案。
Asciidoctor PDF CJK Ext 是用來提供 Asciidoctor / AsciidoctorJ / AsciidocFX / Maven / Gradle 產生包含 CJK languages (Chinese, Japanese, Korean) 的 PDF 時所需要的 theme 跟 ttf 檔案。
-
Theme 支援 Asciidoctor PDF 1.x 跟 Asciidoctor PDF 2.x。
-
Font 包含 Noto Sans CJK, Noto Sans Mono CJK, Noto Serif CJK。
-
每種 Font 的 包含 4 種 Style: Regular, Bold, Italic, BoldItalic。(Italic, BoldItalic 是透過 Fontforge 產生)
提供兩種使用方式: jar 檔案跟目錄方式。
如果你是使用 AsciidoctorJ, AsciidocFX, Maven 建議優先使用 Jar 的方式。
如果你是使用 Asciidoctor, Gradle 建議優先使用 下載Zip 的方式。
Runtimes | Jar Format | Zip Format |
---|---|---|
AsciidoctorJ |
||
AsciidocFX |
||
Asciidoctor |
❌ |
|
Maven |
||
Gradle |
❌ |
請根據你要使用的字型與語言選擇其中一個下載。
Language / Fonts | Sans | Sans Mono | serif |
---|---|---|---|
SC (Simplified Chinese) |
|||
TC (Traditional Chinese) |
|||
HK (Hong Kong) |
|||
JP (Japanese) |
|||
KR (Korean) |
請根據你要使用的字型與語言選擇其中一個下載。
Language / Fonts | Sans | Sans Mono | serif |
---|---|---|---|
SC (Simplified Chinese) |
|||
TC (Traditional Chinese) |
|||
HK (Hong Kong) |
|||
JP (Japanese) |
|||
KR (Korean) |
Important
|
請先確認 AsciidocFX 的版本
從 AsciidocFX-1.7.6 開始才有支援 PDF Converter 為 ASCIIDOCTOR。 |
-
請將下載的 jar 檔案放到 AsciidocFX/lib 目錄下。
EX: pdf-ext-notosans-cjk-tc.jar, pdf-ext-notosansmono-cjk-tc.jar, pdf-ext-notoserif-cjk-tc.jar
-
修改 AsciidocFX 記憶體配置
為何需要修改 AsciidocFX 記憶體配置?
如果不修改,在套用中文 pdf 時可能會出現記憶體不足錯誤。然後不會產生 pdf。
java.lang.OutOfMemoryError: Java heap space
編輯 AsciidocFX/AsciidocFX.vmoptions , 找到 -Xmx756M
修改 -Xmx1024M
或是更多例如 -Xmx1536M
。然後存檔。
-Xmx1536M
-
修改 AsciidocFX 的 ASCIIDOCTOR 的 PDF 設定 你可以使用 GUI 方式修改或是編輯器方式修改。
-
執行 AsciidocFX
Important
|
確認 PDF Converter 目前是選定為 ASCIIDOCTOR
|
-
點選 右邊側面選單 Settings ①
-
點選 右邊上方選單 PDF Settings ②
-
點選 Add 按鈕 ③
-
依照下方表格輸入對應 attribute 跟 value 內容 ④
attribute | value |
---|---|
pdf-fontsdir |
uri:classloader:/data/fonts;GEM_FONTS_DIR; |
pdf-themesdir |
uri:classloader:/data/themes |
pdf-theme |
default-ext-notosans-cjk-tc |
pdf-theme: 每種對應的字型有 3 種套表樣式 , 對應語言, 例如你的語言是 tc (a) 選擇 Font (sans, sansmono, serif), 假設你要使用 Noto Sans CJK (b) 選擇 對應的 theme (default-ext-notosans-cjk-tc , default-notosans-cjk-tc , notosans-cjk-tc)
-
完成後點選 Save 按鈕 ⑤
儲存完成後 , AsciidocFX 預設就會使用你設定的 theme 來對 PDF 進行套表。
-
(假如你使用的是 AsciidocFX 1.7.8) ,
-
如果你已經啟動過 AsciidocFX , 開啟你的 home 目錄下的
.AsciidocFX-1.7.8
的asciidoctor_pdf.json
-
如果你剛安裝 , 還沒有啟動過 AsciidocFX , 開啟你的 AsciidocFX 安裝目錄下的 conf 子目錄下 的
asciidoctor_pdf.json
-
-
在 attributes 下加入以下內容
"pdf-themesdir": "uri:classloader:/data/themes",
"pdf-fontsdir": "uri:classloader:/data/fonts;GEM_FONTS_DIR;",
"pdf-theme": "default-ext-notosans-cjk-tc",
-
修改後的內容如下,然後存檔,啟動 AsciidocFX
{
"backend": "pdf",
"jsPlatform": "Asciidoctorj",
"safe": "unsafe",
"header_footer": true,
"converter": "ASCIIDOCTOR",
"attributes": {
"pdf-themesdir": "uri:classloader:/data/themes",
"pdf-fontsdir": "uri:classloader:/data/fonts;GEM_FONTS_DIR;",
"pdf-theme": "default-ext-notosans-cjk-tc",
"showtitle": "true",
"allow-uri-read": "true",
"experimental": "true",
"source-highlighter": "rouge",
"imagesdir": "images",
"icons": "font"
}
}
pdf-theme: 可以選擇以下其中一種
-
default-ext-notosans-cjk-tc
-
default-notosans-cjk-tc
-
notosans-cjk-tc
-
default-ext-notosansmono-cjk-tc
-
default-notosansmono-cjk-tc
-
notosansmono-cjk-tc
-
default-ext-notoserif-cjk-tc
-
default-notoserif-cjk-tc
-
notoserif-cjk-tc
-
將下載的 jar 複製到 asciidoctorj/lib 目錄下
EX: pdf-ext-notosans-cjk-tc.jar, pdf-ext-notosansmono-cjk-tc.jar, pdf-ext-notoserif-cjk-tc.jar
-
請自行下載 asciidoctorj-pdf-2.3.0.jar 到 asciidoctorj/lib 目錄下
-
修改 asciidoctorj/bin/asciidoctorj 內容
-
把原先的 asciidoctorj-pdf-1.6.2.jar 改成 asciidoctorj-pdf-2.3.0.jar
-
加入 pdf-ext-notosans-cjk-tc.jar, pdf-ext-notosansmono-cjk-tc.jar, pdf-ext-notoserif-cjk-tc.jar
-
#CLASSPATH=$APP_HOME/lib/asciidoctorj-2.5.4-bin.jar:$APP_HOME/lib/asciidoctorj-2.5.4.jar:$APP_HOME/lib/asciidoctorj-api-2.5.4.jar:$APP_HOME/lib/asciidoctorj-epub3-1.5.1.jar:$APP_HOME/lib/asciidoctorj-diagram-2.2.3.jar:$APP_HOME/lib/asciidoctorj-diagram-ditaamini-1.0.3.jar:$APP_HOME/lib/asciidoctorj-diagram-plantuml-1.2022.5.jar:$APP_HOME/lib/asciidoctorj-pdf-1.6.2.jar:$APP_HOME/lib/asciidoctorj-revealjs-4.1.0.jar:$APP_HOME/lib/jruby-complete-9.3.4.0.jar:$APP_HOME/lib/jcommander-1.82.jar:$APP_HOME/lib/pdf-ext-kaigengothic-tw.jar:$APP_HOME/lib/pdf-ext-notosansmono-cjk-tc.jar:$APP_HOME/lib/pdf-ext-notosans-cjk-tc.jar:$APP_HOME/lib/pdf-ext-notoserif-cjk-tc.jar
CLASSPATH=$APP_HOME/lib/asciidoctorj-2.5.4-bin.jar:$APP_HOME/lib/asciidoctorj-2.5.4.jar:$APP_HOME/lib/asciidoctorj-api-2.5.4.jar:$APP_HOME/lib/asciidoctorj-epub3-1.5.1.jar:$APP_HOME/lib/asciidoctorj-diagram-2.2.3.jar:$APP_HOME/lib/asciidoctorj-diagram-ditaamini-1.0.3.jar:$APP_HOME/lib/asciidoctorj-diagram-plantuml-1.2022.5.jar:$APP_HOME/lib/asciidoctorj-pdf-2.3.0.jar:$APP_HOME/lib/asciidoctorj-revealjs-4.1.0.jar:$APP_HOME/lib/jruby-complete-9.3.4.0.jar:$APP_HOME/lib/jcommander-1.82.jar:$APP_HOME/lib/pdf-ext-notosansmono-cjk-tc.jar:$APP_HOME/lib/pdf-ext-notosans-cjk-tc.jar:$APP_HOME/lib/pdf-ext-notoserif-cjk-tc.jar
Important
|
為何要改用 asciidoctorj-pdf-2.3.0.jar
因為 asciidoctorj-pdf-2.x 修改了某些關於存取 pdf-theme, pdf-fontsdir 的問題, 所以建議優先使用 asciidoctorj-pdf-2.x |
asciidoctorj -b pdf \
-a allow-uri-read \
-a icons="font" \
-a idprefix \
-a idseparator="-" \
-a imagesdir="images" \
-a pagenums \
-a toc \
-a scripts="cjk" \
-a pdf-fontsdir="uri:classloader:/data/fonts;GEM_FONTS_DIR;" \
-a pdf-themesdir="uri:classloader:/data/themes" \
-a pdf-theme="default-ext-notosans-cjk-tc" \
PDF-CJK-TEST_TW.adoc
pdf-theme: 可以選擇以下其中一種
-
default-ext-notosans-cjk-tc
-
default-notosans-cjk-tc
-
notosans-cjk-tc
-
default-ext-notosansmono-cjk-tc
-
default-notosansmono-cjk-tc
-
notosansmono-cjk-tc
-
default-ext-notoserif-cjk-tc
-
default-notoserif-cjk-tc
-
notoserif-cjk-tc
-
將下載的 jar 複製到 asciidoctorj/lib 目錄下
EX: pdf-ext-notosans-cjk-tc.jar, pdf-ext-notosansmono-cjk-tc.jar, pdf-ext-notoserif-cjk-tc.jar
-
安裝 jar 檔案到你的 Maven Local Repo ( /home/demo/.m2)
以下以語言 tc 為例, 執行以下指令安裝 jar 檔案到 你的 Local Maven Repo。
Important
|
注意事項
在執行以下指令前, 執行位置要在你下載的 jar 檔案所在目錄。 |
mvn install:install-file \
-Dfile=pdf-ext-notoserif-cjk-tc.jar \
-DgroupId=com.life888888.lab \
-DartifactId=pdf-ext-notoserif-cjk-tc \
-Dversion=0.1.0 \
-Dpackaging=jar
mvn install:install-file \
-Dfile=pdf-ext-notosans-cjk-tc.jar \
-DgroupId=com.life888888.lab \
-DartifactId=pdf-ext-notosans-cjk-tc \
-Dversion=0.1.0 \
-Dpackaging=jar
mvn install:install-file \
-Dfile=pdf-ext-notosansmono-cjk-tc.jar \
-DgroupId=com.life888888.lab \
-DartifactId=pdf-ext-notosansmono-cjk-tc \
-Dversion=0.1.0 \
-Dpackaging=jar
-
設定
下載到本機後, 首先進行測試,確認 專案可以正常運行
執行以下指令
cd asciidoctor-pdf-example
mvn
執行完成後, 檢視 target/generated-docs/example-manual.pdf 是否產出。
開啟 example-manual.pdf 檢查字型屬性 , 確認為 預設的 NotoSerif
接著要修改 pom.xml
找到 build → plugins → plugin (asciidoctor-maven-plugin)
dependencies 之下加入以下內容, 可以只加入一個要加入的字型與樣式 , 例如:pdf-ext-notoserif-cjk-tc
<dependency>
<groupId>com.life888888.lab</groupId>
<artifactId>pdf-ext-notoserif-cjk-tc</artifactId>
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>com.life888888.lab</groupId>
<artifactId>pdf-ext-notosans-cjk-tc</artifactId>
<version>0.1.0</version>
</dependency>
<dependency>
<groupId>com.life888888.lab</groupId>
<artifactId>pdf-ext-notosansmono-cjk-tc</artifactId>
<version>0.1.0</version>
</dependency>
然後找到 execution (generate-pdf-doc) → configuration , 在 attributes 之下加入以下參數設定
<attributes>
<pdf-fontsdir>uri:classloader:/data/fonts;GEM_FONTS_DIR;</pdf-fontsdir>
<pdf-themesdir>uri:classloader:/data/themes</pdf-themesdir>
<pdf-theme>default-ext-notosans-cjk-tc</pdf-theme>
...
再次執行以下指令
cd asciidoctor-pdf-example
mvn clean generate-resources
執行完成後, 檢視 target/generated-docs/example-manual.pdf 是否產出。
開啟 example-manual.pdf 檢查字型屬性 , 確認為 已經是 NotoSansCJKTC
-
請下載 zip 檔案(EX: notoserif-cjk-tc.zip ), 後解壓縮。假設解壓縮後放在 /home/demo/Asciidoctor-PDF-CJK 目錄下
.
├── fonts
│ ├── LICENSE
│ ├── notoserif-cjk-tc-bold_italic.ttf
│ ├── notoserif-cjk-tc-bold.ttf
│ ├── notoserif-cjk-tc-italic.ttf
│ └── notoserif-cjk-tc-normal.ttf
└── themes
├── default-ext-notoserif-cjk-tc-pdf-1-theme.yml
├── default-ext-notoserif-cjk-tc-theme.yml
├── default-notoserif-cjk-tc-pdf-1-theme.yml
├── default-notoserif-cjk-tc-theme.yml
├── LICENSE
├── LICENSE-asciidoctor-pdf
├── LICENSE-asciidoctor-pdf-cjk-kai_gen_gothic
├── notoserif-cjk-tc-pdf-1-theme.yml
└── notoserif-cjk-tc-theme.yml
-
建議使用 asciidoctor-pdf 2.x
請行以下指令
sudo gem install asciidoctor-pdf --pre
-
執行指令如下
asciidoctor-pdf \
-a scripts="cjk" \
-a allow-uri-read \
-a icons="font" \
-a idprefix \
-a idseparator="-" \
-a imagesdir="images" \
-a pagenums \
-a toc \
-a pdf-theme="default-notoserif-cjk-tc" \
-a pdf-themesdir="/home/demo/Asciidoctor-PDF-CJK/themes" \
-a pdf-fontsdir="/home/demo/Asciidoctor-PDF-CJK/fonts;GEM_FONTS_DIR;" \
PDF-CJK-TEST_TW.adoc
pdf-theme 可以使用 default-notoserif-cjk-tc
(如果有設定 pdf-themesdir) 或是 /home/demo/Asciidoctor-PDF-CJK/themes/default-notoserif-cjk-tc-theme.yml
-
請下載 zip 檔案(EX: notoserif-cjk-tc.zip ), 後解壓縮。假設解壓縮後放在 /home/demo/Asciidoctor-PDF-CJK 目錄下
-
以下以 https://github.com/asciidoctor/asciidoctor-gradle-examples 為例。 下載到本機後, 首先進行測試,確認 專案可以正常運行
執行以下指令
cd asciidoctor-gradle-examples/asciidoc-to-pdf-example
./gradlew asciidoctor
可以在 build/docs/asciidocPdf 目錄下找到 example-manual.pdf
-
修改設定。加入 pdf-fontsdir,pdf-themesdir,pdf-theme 的設定。
...
asciidoctorPdf {
dependsOn asciidoctorGemsPrepare
baseDirFollowsSourceFile()
asciidoctorj {
requires 'rouge'
attributes 'build-gradle': file('build.gradle'),
'scripts': 'cjk',
'pdf-fontsdir': '/home/demo/Asciidoctor-PDF-CJK/fonts;GEM_FONTS_DIR;',
'pdf-themesdir': '/home/demo/Asciidoctor-PDF-CJK/themes',
'pdf-theme': 'default-notoserif-cjk-tc-pdf-1',
...
Important
|
注意事項
因為 Asciidcotor Gradle Plugin 目前使用 asciidoctor-pdf-1.x , 所以 pdf-theme 後面必須要使用有
|
AscidocFX 在套用 PDF 時會使用已設定預設套表。 Asciidoc 檔案(.adoc)不需要設定 pdf-fontsdir,pdf-themesdir,pdf-theme。
如果只有某個 adoc 檔案(EX: AAA.adoc)想要套用不同的 Theme,可以這樣做:
直接在 AAA.adoc 檔頭, 加入 pdf-fontsdir,pdf-themesdir,pdf-theme 設定。
:pdf-theme: default-notoserif-cjk-{font_lang}
如果只有某個 adoc 檔案(EX: AAA.adoc)想要修改與已經安裝不一樣的 theme 設定,例如字型顏色,可以這樣做:
(你不需要修改 Installed Jar 裡面的 theme 檔案)
-
在 adoc 檔案所在目錄, 建立子目錄 custom-theme
-
在子目錄 custom-theme, 建立 custom-default-notoserif-cjk-tc-theme.yml
-
修改 custom-default-notoserif-cjk-tc-theme.yml , 調整要變更的設定
-
在 AAA.adoc 檔頭, 加入 pdf-fontsdir,pdf-themesdir,pdf-theme 設定,指向 custom-theme。
:pdf-themesdir: {docdir}/custom-theme
:pdf-theme: custom-default-notoserif-cjk-{font_lang}
延伸自訂 Custom Theme
.
├── PDF-CJK-TEST_TW.adoc
└── theme
├── cover.png
└── custom-default-ext-notosans-cjk-tc-theme.yml
extends:
- default-ext-notosans-cjk-tc
title-page:
align: left
logo:
image: image:{docdir}/theme/cover.png[align=center]
top: 0%
page:
margin: [0.75in, 1in, 0.75in, 1in]
base:
line-height-length: 20
heading:
font-color: #FF8000
font-size: 12
line-height: 1.2
link:
font-color: #009900
header:
height: 0.75in
line-height: 1
recto:
right:
content: '{document-title}'
verso:
left:
content: '{document-title}'
footer:
height: 0.75in
line-height: 1
recto:
right:
content: '{chapter-title} | *{page-number}*'
verso:
left:
content: '*{page-number}* | {chapter-title}'
image:
align: center
caption:
align: center
font-color: #FF0000
font-size: 10
以下使用 AsciidoctorJ 為例把修改後參數列舉於以下
asciidoctorj -b pdf \
-a allow-uri-read \
-a icons="font" \
-a idprefix \
-a idseparator="-" \
-a imagesdir="images" \
-a pagenums \
-a toc \
-a scripts="cjk" \
-a pdf-fontsdir="uri:classloader:/data/fonts;GEM_FONTS_DIR;" \
-a pdf-themesdir="uri:classloader:/data/themes" \
-a pdf-theme="/home/demo/Documents/TestAsciidoc/theme/custom-default-ext-notosans-cjk-tc-theme.yml" \
-o PDF-CJK-TEST_TW-custom-default-ext-notosans-cjk-tc-theme.pdf \
PDF-CJK-TEST_TW.adoc
比對 PDF-CJK-TEST_TW.pdf vs PDF-CJK-TEST_TW-custom-default-ext-notosans-cjk-tc-theme.pdf
asciidoctorj -b pdf \
-a doctype=book \
-a allow-uri-read \
-a icons="font" \
-a idprefix \
-a idseparator="-" \
-a imagesdir="images" \
-a pagenums \
-a toc \
-a scripts="cjk" \
-a pdf-fontsdir="uri:classloader:/data/fonts;GEM_FONTS_DIR;" \
-a pdf-themesdir="uri:classloader:/data/themes" \
-a pdf-theme="default-ext-notosans-cjk-tc" \
-o PDF-CJK-TEST_TW_BOOK.pdf \
PDF-CJK-TEST_TW.adoc
asciidoctorj -b pdf \
-a doctype=book \
-a allow-uri-read \
-a icons="font" \
-a idprefix \
-a idseparator="-" \
-a imagesdir="images" \
-a pagenums \
-a toc \
-a scripts="cjk" \
-a pdf-fontsdir="uri:classloader:/data/fonts;GEM_FONTS_DIR;" \
-a pdf-themesdir="uri:classloader:/data/themes" \
-a pdf-theme="/home/demo/Documents/TestAsciidoc/theme/custom-default-ext-notosans-cjk-tc-theme.yml" \
-o PDF-CJK-TEST_TW_BOOK-custom-default-ext-notosans-cjk-tc-theme.pdf \
PDF-CJK-TEST_TW.adoc
You can re-generate jar and zip files, please refer to the following settings:
-
OS: Ubuntu 20.04 or Other Linux
-
JDK: JDK 8+, only for
jar
command to package jar files.
Download this project Source Code.
$ unzip asciidoctor-pdf-cjk-ext.zip
$ cd asciidoctor-pdf-cjk-ext
Execute build-themes-all.sh
./build-themes-all.sh
-
Edit build-themes-all.sh
# * Noto Sans CJK
# * Noto Sans Mono CJK
# * Noto Serif CJK
export BUILD_FONT_FS_SANS=1
export BUILD_FONT_FS_SANSMONO=1
export BUILD_FONT_FS_SERIF=1
# Languages: 1 = Build , 0 = None
# * SC (Simplified Chinese)
# * TC (Traditional Chinese)
# * HK (Hong Kong)
# * JP (Japanese)
# * KR (Korean)
export BUILD_FONT_LANG_SC=0
export BUILD_FONT_LANG_TC=1
export BUILD_FONT_LANG_HK=0
export BUILD_FONT_LANG_JP=0
export BUILD_FONT_LANG_KR=0
You can find the creted file in releases folder , include jar, zip files.
Copyright © 2022 life888888. and the asciidoctor-pdf-cjk-ext Project.
Free use of this project fonts is granted under the terms of the SIL Open Font License.
-
Fonts License: cjk-fonts-ttf fonts - SIL Open Font License.
My theme is modify from Two Projects:
-
Asciidoctor::Pdf::CJK::KaiGenGothic https://github.com/chloerei/asciidoctor-pdf-cjk-kai_gen_gothic
MIT License - Copyright (c) 2015 Rei
-
Asciidoctor PDF: A native PDF converter for AsciiDoc https://github.com/asciidoctor/asciidoctor-pdf
MIT License - Copyright © 2014-present OpenDevise Inc. and the Asciidoctor Project