soukouki’s diary

誰かの役に立つ記事をかけたらいいなあ

pdfをネガポジ反転するワンライナー

ImageMagickを使ってpdfをネガポジ反転するワンライナー

270ページの文章の例。ページ数に合わせて269の部分を変える必要があります。

for i in {000..269}; do convert -density 300 "origin.pdf[$i]" -alpha remove -negate np${i}.png; done; convert np*.png np.pdf

一度にpdfをネガポジ反転したり、pngに変換するとメモリが足りなくなったので、1ページごとの処理にしています。

-density 300でdpiを上げています。

難点・要改善点

  • 文字埋め込みではなく画像になるのでファイルサイズが増大する
  • 画像の画質が荒い
  • 最後のconvertでpngをまとめる段階でメモリを大量に消費して、場合によっては失敗する

参考文献

PDFのネガポジ反転(白黒反転) Junichiro NIIMI https://jun-systems.info/articles/convert-negaposi-pdf/

ImageMagickでpdfファイルの1ページ目だけをjpegにする matoken https://matoken.org/blog/2021/03/16/make-the-first-page-of-the-pdf-file-jpeg-with-imagemagick/

imagemagicでpdfをjpgにconvertしたらbackgroundが黒くなるとき prex-uchida https://qiita.com/prex-uchida/items/8443c5350e80c25c4efa

また、今回のコードでは出てないですが、一回ハマったのでこちらも置いておきます。

ImageMagick7 の negate(ネガポジ変換)で透明になる件 yoya https://qiita.com/yoya/items/9301c447093354d92185

動作環境

$ neofetch
OS: Arch Linux x86_64
Shell: zsh 5.9

$ convert --version
Version: ImageMagick 7.1.0-57 (Beta) Q16-HDRI x86_64 20701 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenCL OpenMP(4.5)
Delegates (built-in): bzlib cairo djvu fontconfig freetype heic jbig jng jp2 jpeg jxl lcms lqr ltdl lzma openexr pangocairo png raqm raw rsvg tiff webp wmf x xml zip zlib
Compiler: gcc (12.2)