動機
Hugo で documentationを用意しつつ、それを pdf としても読めるようにしたい
参考
https://discourse.gohugo.io/t/generate-hugo-website-as-a-pdf/22855/4
Nader_K_Radさんの投稿
やりたいこと
複数 page を ひとつの pdf として出力
方法
guide.pdfというものが出力pdfと想定
一時的に allというcontentを用意して、そこに 全pageをcombineしたhtmlを生成し、それをwkhtmltopdf
を使って pdf化する。wkhtmltopdfは https://wkhtmltopdf.org/ で手に入れる。
#!/bin/sh
mkdir content/all
touch content/all/_index.md
hugo --cleanDestinationDir
wkhtmltopdf public/all/index.html --allow public public/downloads/guide.pdf
rm -r public/all
rm -r content/all
さて、all/index.htmlはどのようにしてbuild するのか? これは layoutで定義する。使っている theme の css などを使いつつ、layout定義する場合は、 /themes/your_theme/layouts
のなかにall
というfolderを掘り、そこにlist.html
というfileを用意します。
<!DOCTYPE html>
<html>
{{- partial "head.html" . -}} <!-- depends on the theme -->
<style>
h1 {page-break-before: always;} <!-- if h1 is only used at the title of the pages, this will be used as page-break in the pdf. -->
</style>
<body>
<div class="container-fluid"> <!-- my theme is based on bootstrap -->
<div class="row">
{{ range .Site.Pages }}
<div class="main col-12 order-1 col-md-9 col-lg-10 col-xl-10 py-3">
<h1 id="{{ .RelPermalink }}">{{ .Title }}</h2>
{{ .Content }}
</div>
{{ end }}
</div> <!-- /end of row -->
</div> <!-- /end of container -->
</body>
</html>
これで all/index.html
にすべてのpage (range .Site.Pages) が書き出されるので、それを pdfにしている。