Markdown to PDF
Denoで動かす
Deno 1.46.3で動作した
$ deno run --allow-read --allow-env --allow-write=$HOME/.cache --allow-net=storage.googleapis.com:443 --allow-sys=homedir npm:puppeteer@23 browsers install
./hoge.mdを./hoge.pdfへ変換する
$ deno run --allow-env --allow-read --allow-write=./,/tmp --allow-net=0.0.0.0,127.0.0.1 --allow-sys=homedir --allow-run npm:md-to-pdf@5 ./hoge.md
--allow-writeに渡した./は、./hoge.pdfを書き込むための許可
書き込み先ファイルパスに応じて適宜変えること
--allow-netは2024-09-19時点のtakker.iconの環境での値。もしかしたら他の環境だと別のIPアドレスになるかもしれない
--allow-runは$HOME/.cahce/puppeteer/にあるchromeを起動するための許可
終了処理が正しく動かないため、変換後に<C-c>などでprocessをkillすること
ファイル指定を外すと、同じdirectoryにあるファイルを全て変換する
その他の機能
強制改ページ
以下を改行したい部分に入れる
code:page-break.html
<div class="page-break"></div>
Header/Footer
code:header-footer.yml
---
pdf_options:
format: A4
margin: 30mm 20mm
printBackground: true
headerTemplate: |-
<style>
section {
margin: 0 auto;
font-family: system-ui;
font-size: 11px;
}
</style>
<section>
<span class="date"></span>
</section>
footerTemplate: |-
<section>
<div>
Page <span class="pageNumber"></span>
of <span class="totalPages"></span>
</div>
</section>
---
GitHub風レイアウト
code:github-format.yml
---
body_class: markdown-body
css: |-
.page-break { page-break-after: always; }
.markdown-body { font-size: 11px; }
.markdown-body pre > code { white-space: pre-wrap; }
---
/icons/hr.icon
2020-07-09 15:03.17 使ってみたらerrorが出た
環境:Ubuntu(WSL2)
code:error.log
$yarn -s md-to-pdf test.md generating PDF from test.md
ListrError: Something went wrong
at /home/takker/markdown-test/node_modules/listr/index.js:102:18
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at async main (/home/takker/markdown-test/node_modules/md-to-pdf/dist/cli.js:114:5) {
errors: [
Error: Failed to launch the browser process!
/home/takker/markdown-test/node_modules/puppeteer/.local-chromium/linux-756035/chrome-linux/chrome: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory
at onClose (/home/takker/markdown-test/node_modules/puppeteer/lib/cjs/node/BrowserRunner.js:193:20)
at Interface.<anonymous> (/home/takker/markdown-test/node_modules/puppeteer/lib/cjs/node/BrowserRunner.js:183:65)
at Interface.emit (events.js:327:22)
at Interface.close (readline.js:416:8)
at Socket.onend (readline.js:194:10)
at Socket.emit (events.js:327:22)
at endReadableNT (_stream_readable.js:1221:12)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
],
}
コードをいじればいけそうだけど、そこまでしたくない。takker.icon