如何将 asciidoc 转换为 pdf?

How to convert asciidoc to pdf?

我尝试使用 pandoc 将我的 mybook.adoc 转换为 mybook.pdf,但出现以下错误。

$ pandoc -s mybook.adoc -t asciidoc -o mybook.pdf
pandoc: cannot produce pdf output with asciidoc writer

我应该使用其他工具来代替 pandoc 或与 pandoc 一起使用吗? 如何将 asciidoc 转换为 pdf?

AsciiDoc 有几个工具链可以从 AsciiDoc 源渲染 PDF。可以使用Ruby-based AsciiDoc -> Prawn -> PDF toolchain developed by Asciidoctor, or you can use the older AsciiDoc -> DocBook -> FOP toolchain。这些是 rendering/publishing 程序,而 Pandoc 主要提供转换,最适合从一种或另一种类型的源格式转换。

将 AsciiDoc 文档转换为 PDF 的最简单方法如下 -

  • 打开AsciiDocLive
  • 将您的文档粘贴到编辑器中并查看预览
  • 另存为HTML
  • 打开任何在线 HTML 到 PDF 转换器
  • 上传您新生成的 HTML 文件
  • 转换为 PDF 并下载。

完成。

先决条件:只需要Ruby(1.9.3或更高版本)

安装 AsciiDoc 的本机 PDF 转换器 - Asciidoctor PDF:

gem install asciidoctor-pdf --pre

运行:

asciidoctor-pdf mybook.adoc

您应该在同一目录中获取文件 mybook.pdf。

根据@Remis 的回答,我使用了 asciidoctor 的 pdf 后端。

我不知道如何在 nixos 上安装 asciidoctor-pdf,但设法 find 以下可行的替代方法:

asciidoctor -r asciidoctor-pdf -b pdf or asciidoctor-pdf

我经常使用的另一个工作流程是使用 AsciiDoctor 处理器从 AsciiDoc 文件创建 HTML,将自定义 CSS 样式表与打印样式规则链接:

asciidoctor -a stylesheet=path-to-stylesheet.css file.adoc

然后您可以在浏览器中打开 HTML 文件并打印为 PDF。

对于更高级的样式,例如页码、页眉、页脚、分页符和分栏,您可以使用 PrinceXML(或其他类似产品)。这是一个命令行处理器,它将使用 HTML 文件使用的 CSS 中的样式规则将 HTML 文件转换为 PDF。 PrinceXML 应用 CSS3 标准中的样式规则,但浏览器尚不支持这些规则,允许您创建样式精美的布局。

我现在意识到从 asciidoc 到 pdf 的理想途径是首先将 asciidoc 转换为 docbook。这采用了预期的 asciidoc 领域和一个 docbook->pdf 转换器,在其单独的关注领域中使用它们。

此外,我发现当包含数学公式时,使用 dblatex 进行 docbook->pdf 转换更容易,而不是 pandoc。因此我的转换管道如下:

asciidoc -> asciidoctor -> docbook -> dblatex -> pdf

生成文件示例:

make: my.adoc
  asciidoc -b docbook my.adoc
  dblatex my.xml

This discussion 页面表明 asciidoc 主要是为编译成 docbook 而设计的。

如果您使用的是 VS Code,Ctrl + SHFT + P 并输入 AsciiDoc: Export document as pdf

如果您安装了 Docker,您可以使用 AsciiDoctor Docker Image。然后您可以交互或以批处理模式使用图像,如下所述:

先决条件

  1. 安装Docker
  2. 安装 Docker 映像:

    $ docker pull asciidoctor/docker-asciidoctor
    

通过执行以下命令创建 pdf:

$ cd [directory to where my book.adoc is located]
$ docker run --rm -v $(pwd):/documents/ asciidoctor/docker-asciidoctor asciidoctor-pdf mybook.adoc

说明

  • docker run 启动一个 Docker 容器
  • --rm 清理 - 在命令执行后删除 Docker 容器
  • -vmount a volume到图片
  • $(pwd) 获取当前目录的路径,例如[directory to where my book.adoc is located] 的值高于
  • documents 运行 容器中挂载卷的名称
  • asciidoctor/docker-asciidoctor 用于创建 Docker 容器的 Docker 图像的名称
  • asciidoctor-pdf真正触发pdf生成的命令
  • mybook.adoc 从中生成 pdf 的 AsciiDoc 源文件的名称

另请参阅 docker run 文档

如果你在 Intellij 中有 AsciiDoc 插件,你可以通过以下方式生成 -

  1. 创建 adoc 文件 ex - "tktds-dhs-e2e-gcp.adoc" 并写入您的内容.. 或者您可能已经有 adoc 文件..
  2. 在编辑器中打开文件的顶部,单击 PDF 或 HTML 按钮生成 .pdf 或 .html 文件{需要一次单击 1} 参考下图 -

  1. 您还可以在同一目录中找到 pdf / html 文件,参考下图 -