【问题标题】:How to generate a cover image picture with asciidoctor-fopub如何使用 asciidoctor-fopub 生成封面图片图片
【发布时间】:2016-04-28 04:56:18
【问题描述】:

我正在尝试自定义我们的developer guide pdf 以使首页看起来不错。由于 asciidoc 在这里的能力似乎非常有限,因此我完全可以在 Photoshop 中将所有内容作为图像进行处理。

不幸的是,尽管到处寻找,我似乎无法找到一种方法来自定义封面或将其替换为适用于 asciidoctor-fopub 的图像。

令人讨厌的是,这个用例在项目https://github.com/asciidoctor/asciidoctor-fopub 的自述文件中特别提到(在自定义 XSL 模板下),但除了“它在 XSL 中”之外,没有提到如何实际执行它。作为一个不熟悉 docbook 的人,我不知道从哪里开始。

asciidoctor-pdf 有一个包含图像的标签,但它会在我们的文档上产生错误并生成垃圾(ToC 会覆盖所有内容)。

【问题讨论】:

    标签: pdf codenameone apache-fop asciidoc asciidoctor


    【解决方案1】:

    这可以使用 build/fopub/docbook/fo/ 下的 division.xsl 文件来完成

    搜索“占位符模板”

    并粘贴下面的代码,您将能够在生成的 fopub 中看到封面图片

    <!-- Placeholder templates -->
    <xsl:template name="front.cover">
      <xsl:call-template name="page.sequence">
        <xsl:with-param name="master-reference">titlepage-cover-image</xsl:with-param>
        <xsl:with-param name="content">
          <fo:block text-align="center">
         <fo:external-graphic src="url(path/to/cover.png)" content-height="250mm" content-width="176mm"/>
          </fo:block>
        </xsl:with-param>
      </xsl:call-template>
    </xsl:template>
    

    根据您的书籍要求更改高度和宽度。

    完成后,您需要为封面上的图像留出边距以保持清晰。在pagesetup.xsl下面添加

    <fo:simple-page-master master-name="titlepage-cover-image"
                               page-width="{$page.width}"
                               page-height="{$page.height}"
                               margin-top="{$title.page.margin.top}"
                               margin-bottom="{$page.margin.bottom}">
          <xsl:attribute name="margin-{$direction.align.start}">
            <xsl:value-of select="$page.margin.inner"/>
      <xsl:if test="$fop.extensions != 0">
        <xsl:value-of select="concat(' - (',$title.margin.left,')')"/>
            </xsl:if>
          </xsl:attribute>
          <xsl:attribute name="margin-{$direction.align.end}">
            <xsl:value-of select="$page.margin.outer"/>
          </xsl:attribute>
          <xsl:if test="$axf.extensions != 0">
            <xsl:call-template name="axf-page-master-properties">
              <xsl:with-param name="page.master">titlepage-cover-image</xsl:with-param>
            </xsl:call-template>
          </xsl:if>
          <fo:region-body margin-bottom="{$body.margin.bottom}"
                          margin-top="{$title.body.margin.top}"
                          column-gap="{$column.gap.titlepage}"
                          column-count="{$column.count.titlepage}">
            <xsl:attribute name="margin-{$direction.align.start}">
              <xsl:value-of select="$body.margin.inner"/>
            </xsl:attribute>
            <xsl:attribute name="margin-{$direction.align.end}">
              <xsl:value-of select="$body.margin.outer"/>
            </xsl:attribute>
          </fo:region-body>
          <fo:region-before region-name="xsl-region-before-first"
                            extent="{$region.before.extent}"
                            precedence="{$region.before.precedence}"
                            display-align="before"/>
          <fo:region-after region-name="xsl-region-after-first"
                           extent="{$region.after.extent}"
                            precedence="{$region.after.precedence}"
                            display-align="after"/>
          <xsl:call-template name="region.inner">
            <xsl:with-param name="sequence">first</xsl:with-param>
            <xsl:with-param name="pageclass">titlepage</xsl:with-param>
          </xsl:call-template>
          <xsl:call-template name="region.outer">
            <xsl:with-param name="sequence">first</xsl:with-param>
            <xsl:with-param name="pageclass">titlepage</xsl:with-param>
          </xsl:call-template>
        </fo:simple-page-master>
    

    然后在 fo-pdf.xsl 中添加变量以将正文上边距归零。

    HTH。

    【讨论】:

    • 非常感谢!我差点放弃了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 2018-04-01
    • 1970-01-01
    • 2014-01-27
    相关资源
    最近更新 更多