こちらの機能の検証をしていたところ、Entra IDの制限で2MBまでのPDFしか利用できないことがわかり、利用していた利用規約PDFが2MBを超えていたため圧縮する必要があった。
VSCodeのMarkdown PDFを使用したものだったが、画像の圧縮オプション(markdown-pdf.quality)はあるもの、全体のファイルを圧縮するためのオプションが見当たらなかったので、別の方法で当たることにした。
早速ChatGPTに聞いてみた
早速ChatGPTに聞いてみたところ、以下の3つの方法を示唆された
- Ghostscriptを使用する
- pdftk
- pdfcompress
PDFKitは、ファイルの分割などはできるようだが圧縮機能は持たず、今回の用途には不向きと判断。
Ghostscriptとpdfcompressは好みが分かれると思うが、圧縮だけとはいえ今後も使う可能性があると判断しGhostscriptを使用した
試した結果
PCの環境を汚したくなかったので、Dockerを使う。
$ docker run --it --rm $(pwd):/app alpine:latest ash
/app # apk update
/app # apk add ghostscript
/app # gs --version
10.02.1
これで、Ghostscript自体はインストールできた。
aptなどのリポジトリにも含まれているらしく簡単に入手できるのはありがたい。
次に、コマンドを指定してファイルを変換する
s -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET
-dBATCH -sOutputFile=output.pdf ./terms_of_service_ja-jp.pdf
この時、品質に影響するオプションは「PDFSETTINGS」
オプション値 | 品質 |
---|---|
/screen | 最も低い解像度と画質で、ファイルサイズを最も小さくします。 |
/ebook | 良好な品質と中程度のファイルサイズを提供します。 |
/printer | 高品質(プリント適用)で、より大きなファイルサイズになります。 |
/prepress | 高品質で、画像を元の品質で保持し、ファイルサイズがさらに大きくなります。 |
最初、/ebook
で試したのだが、埋め込んでいた画像がかなり荒くなってしまった。
そのため/printer
にしたところまぁ見れるかなという画像になったのでこれで行こうと思う。
結果:
- 4235628バイト -> 336930バイト
- 3959783バイト -> 117805バイト