Gradle插件AsciidoctorPdf:扩展字体搜索路径

j91ykkif  于 2023-04-30  发布在  其他
关注(0)|答案(1)|浏览(140)

我想使用Gradle和AsciidoctorPdf插件将Asciidoctor文件转换成PDF文件。为了能够自定义生成的PDF,我定义了一个自定义主题。我使用Google的EB-Garamond字体作为基本字体。
我的主题引用默认主题,该主题引用捆绑的诺托Serif字体:https://github.com/asciidoctor/asciidoctor-pdf/blob/main/data/themes/default-theme.yml
绑定字体的搜索路径由GEM_FONTS_DIR关键字提供:
字体路径可以是绝对的或相对的。绝对路径按原样使用。从字体搜索路径解析相对字体路径。您还可以使用GEM_FONTS_DIR关键字来引用捆绑字体的位置。
https://docs.asciidoctor.org/pdf-converter/latest/theme/custom-font/#declare
我在AsciidoctorPdf的扩展中设置了包含EB-Garamond字体的目录的相对路径:

tasks.asciidoctorPdf {
    setFontsDirs(listOf("fonts"))
}

现在,当我运行构建时,我得到一个错误消息:

No such file or directory - notoserif-regular-subset.ttf not found in <absolute-path>/play-books/fonts
Exception in thread "main" org.asciidoctor.gradle.remote.AsciidoctorRemoteExecutionException: Error running Asciidoctor whilst attempting to process <absolute-path>/cocinero.adoc using backend pdf

我怀疑通过调用setFontsDirs,字体的搜索路径被完全重置,因此捆绑字体的路径也丢失了。
如何将我自己的字体目录的路径传递给AsciidoctorPdf而不丢失捆绑字体的路径?
build.gradle.kts:

plugins {
    id("org.asciidoctor.jvm.convert")
    id("org.asciidoctor.jvm.pdf")
}

tasks.asciidoctorPdf {
    dependsOn("asciidoctor")

    setFontsDirs(listOf("fonts"))
    setTheme("play-book")
}

pdfThemes {
    local("play-book") {
        themeDir = projectDir
    }
}

tasks.build {
    dependsOn("asciidoctor")
    dependsOn("asciidoctorPdf")
}

settings.gradle.kts:

pluginManagement {
    repositories {
        gradlePluginPortal()
        mavenCentral()
    }

    plugins {
        val versions = object {
            val asciidoctor = "3.3.2"
        }

        id("org.asciidoctor.jvm.convert") version versions.asciidoctor
        id("org.asciidoctor.jvm.pdf") version versions.asciidoctor
    }
}

dependencyResolutionManagement {
    repositories {
        mavenCentral()
    }
}

rootProject.name = "cartel-deutsch"

include("play-books")

play-book-theme.yml:

extends: default

font:
  catalog:
    merge: true
    EBGaramond:
      normal: EB_Garamond/static/EBGaramond-Regular.ttf
      italic: EB_Garamond/static/EBGaramond-Italic.ttf
      bold: EB_Garamond/static/EBGaramond-Bold.ttf
      bold_italic: EB_Garamond/static/EBGaramond-BoldItalic.ttf

page:
  size: A5
  margin: [ 8mm, 8mm, 12mm, 8mm ]

base:
  font-family: EBGaramond

heading:
  font-family: Helvetica
thtygnil

thtygnil1#

tasks.asciidoctorPdf {
    setFontsDirs(listOf("fonts"))
}

我怀疑通过调用setFontsDirs,字体的搜索路径被完全重置,因此捆绑字体的路径也丢失了。
这是正确的,比较实现1:

void setFontsDirs(Iterable<Object> paths) {
        this.fontDirs.clear()
        this.fontDirs.addAll(paths)
    }

如何将我自己的字体目录的路径传递给AsciidoctorPdf而不丢失捆绑字体的路径?
两种形式,第一种是作弊,第二种是有根据的猜测。

  • 作弊第一:当你merge: true的时候不要使用绝对路径到你的字体。
  • 猜测第二:(在回答时不工作)setFontsDirs(listOf("fonts", "GEM_FONTS_DIR")),其中GEM_FONTS_DIR是此令牌verbatim 2。
  • 回退第三步:还有另一个选项,也可以在YAML中列出默认字体,并在那里使用GEM_FONTS_DIR前缀,请参阅 * 扩展字体目录 *3中的 * 在自定义主题中重新声明捆绑字体 *。

因此,有根据的猜测是不够的,奥拉夫评论说:
第二个建议的解决办法没有奏效。GEM_FONTS_DIR不被识别为关键字,而是相对路径:
没有这样的文件或目录- notoserif-regular-subset。ttf未在/play-books/fonts:/play-books/GEM_FONTS_DIR中找到
1./groovy/org/asciidoctor/gradle/jvm/pdf/AsciidoctorPdfTask.槽#L101-L111
1.配置字体搜索路径,具体如下:
要在搜索中包含捆绑字体的位置,请在列表中包含GEM_FONTS_DIR标记:

$ asciidoctor-pdf -a pdf-theme=basic-theme.yml -a pdf-fontsdir="path/to/fonts;GEM_FONTS_DIR" document.adoc

1.扩展字体目录

相关问题