u-ryo's blog

various information for coding...

Category: Pdf

Markdown to Pdf on CLI

| Comments

markdownで快調に書いたものを、「印刷して提出せよ」ということになっていたので、「へ?」とか思って。今時ねぇ、印刷なんてねぇ、何の意味があるのか。一応evidenceってことなんだろうけど。

調べると、意外とないんですよね日本語markdown to pdf。popularなのはMS Visual Studio Codeの拡張機能Markdown PDF使うものですけど、たったそれだけのためにVisual Studio Code入れたかぁないですし。 nodeのmarkdown-pdfmd-to-pdfとかサクッと出来そうだったんですけど、古いのか、どうしようもないエラーが出ます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
docker run --rm -it -v $PWD:/work -w /work -e https_proxy=http://192.168.120.1:3128 node:alpine sh
# npm i -g markdown-pdf
# markdown-pdf some.md
node:events:497
      throw er; // Unhandled 'error' event
      ^

Error: spawn /usr/local/lib/node_modules/markdown-pdf/node_modules/phantomjs-prebuilt/lib/phantom/bin/phantomjs ENOENT
  :
# npm i -g md-to-pdf
# md-to-pdf some.md
(node:29) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)

  Puppeteer old Headless deprecation warning:
    :

  ✖ generating PDF from some.md
    → TROUBLESHOOTING: https://pptr.dev/troubleshooting
ListrError: Something went wrong
    at /usr/local/lib/node_modules/md-to-pdf/node_modules/listr/index.js:102:18
     :

pandocもいいんですが、texの環境色々入れるのがかったるいなー。 というわけで、docker baseで。 探すと、参考文献がありました。proxyも使わないとならないので。

1
2
3
4
5
6
7
8
9
10
$ PROXY=http://192.168.120.1:3128
$ docker run --rm -it -e https_proxy=$PROXY -e http_proxy=$PROXY -e ftp_proxy=$PROXY -e use_proxy=yes -v $PWD:/data --entrypoint sh pandoc/latex
/data # tlmgr install collection-langjapanese
   :
tlmgr: package repository ftp://tug.org/historic/systems/texlive/2022/tlnet-final (not verified: valid signature with expired key)
   :
[108/108, 22:16/22:16] install: collection-langjapanese [1k]
running mktexlsr ...
   :
/data # pandoc some.md -o some.pdf -C --pdf-engine=lualatex -V linkcolor=blue -V documentclass=ltjsarticle -V luatexjapresetoptions=fonts-noto-cjk
  • 何か今どきftpで取りに行くので、ftp_proxyが必要
  • use_proxy=yesもないとproxy経由と認識してくれなかった
  • working directoryはdefaultで/dataなのでそこにmountする
  • entrypointが入っているので、optionで上書きしないとtlmgrを動かせない
  • pandoc/coreではなくpandoc/latexであることに留意
    • 500MB超とsizeも結構ある
  • tlmgr install collection-langjapaneseは22分かかった
    • 総計30分弱はかかる
  • 基本的にはpandoc md_file -o pdf_fileだが、--pdf-enginelualatexを指定したりdocumentclassltjsarticleを指定したり、日本語特有の指定が必要
  • ###が本文と同じ大きさの文字になるので、思っているよりlevelを1段階上げとかないと、思ったような出力にならない

Cut Pdf and Convert to Png

| Comments

「pdf fileの10ページ目を切り取ってpngにconvertする」やり方。 pdftk10ページ目をcatして標準出力に渡し、それをpipeで繋げてpdftoppmで標準入力から読み込みredirectして-pngで変換してfileへ。-pngがないと.ppmになるので注意。

1
pdftk nenga2021.pdf cat 10 output -|pdftoppm -png - > nenga2021.png