2020年9月10日木曜日

PDFの全ページをSVGに変換する方法

WindowsでPDFの画像や表をWordやPowerに貼り付けたいときは, スクリーンキャプチャやAdobe AcrobatやAcrobat Readerのスナップショット機能を使うのが普通だと思う. でも,PDFは拡大縮小しても文字や線画が劣化しないベクトル画像なのにこれらの機能でビットマップ画像化してしまうと文字がボケてしまう. そこでPDFの全ページをベクトル画像の形式の一つのSVG画像に変換する方法をメモしておく. 今回はWSL(Windows Subsystem for Linux)を使ったけどPower ShellとChocolateyを使え同じ事ができそう.

手順

  • WSL+Ubuntu18.04LTSを起動
  • WinddowsのフォントをWSLで使用可能に
  • pdf2svgをインストール
  • シェルスクリプトで全ページ自動変換

WSL+Ubuntu18.04LTSを起動

といっても別に難しい手順はなくてインストール方法もググればいくらでも出てくる. WSL(Windows Subsystem for Linux)を使う理由は,既にインストールされてたからということと,コマンド一つ「apt install」でインストールしたいということと, スクリプトを使う場合に今更WindowsのPowerShellを勉強するよりLinuxのシェルスクリプトの方が汎用性あるよなという個人的理由. WindowsならPower ShellとChocolatey使うのが正統派なのかな?

WinddowsのフォントをWSLで使用可能に

PDFのフォントが正しく変換されない部分があったので念のためにWSLでWindowsのフォントがつかるように設定しておいた. これについては効果あるかどうかは不明. 次のコマンドで設定ファイルを作る.

sudo nano /etc/fonts/local.conf

中身はこれをそのままコピペして保存.

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>

このコマンドでフォントキャッシュを再構築.

fc-cache -fv

pdf2svgをインストール

これは一発.

sudo apt install pdf2svg

シェルスクリプトで全ページ自動変換

テキストエディタで次のスクリプトをpdf2svgs.shというファイル名で作る. この場合,pdfの1ページ目から1268ページまでをsvgで変換するという意味.

for i in `seq -w 1 1268`
do
pdf2svg cg.pdf cg$i.svg $i
done

これを実行すれば終わり.test.pdfというファイルからtest000.svgなどの連番ファイルが大量に生成される.

sh pdf2svgs.sh