1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PDFの編集アプリをセルフホストして怪レいオンラインアプリから脱却しよう

Posted at

PDFの編集ツール

会社貸与のPCなどにはAcrobatが入っているけど、自宅PCでわざわざPDFの編集ツールに金を出すのはアレなのでよくわからないオンラインツールでPDFを編集したり、ファイルを変換したりしている人がいると思います。
ただ、同時に変換したり編集したりできるファイル数に制約があったり、1日2ファイルまでしか使えなかったり、データが本当に安全なのかわからなかったりといろいろ不便なところがあるので、Stirling PDFをセルフホストしてセキュアかつ便利に編集できる環境を作っていきます。

Stirling PDF

Java製のPDFソリューションです。
Windows・Linux・Macで動作します。

その辺に転がってるオンラインツールでできそうなことは大体ぜんぶできます。

image.png

構築

Dockerで一発で終わらせたい人はここ見てやればいいと思います。

今回は全部自分で構築します。

前提ソフトウェア

Stirling PDFの前提ソフトウェアは次の通りです。

  • Java 17以降 (21を推奨)
  • Gradle 7.0以降
  • Git
  • Python 3.8 + pip

インストール

$ sudo dnf config-manager --set-enabled crb
$ sudo dnf install -y git java-21-openjdk python3 python3-pip epel-release

OCR

OCR 機能を使用するために、jbig2enc を snap からインストールします。

$ sudo dnf install snapd
$ sudo systemctl enable --now snapd.socket
$ sudo ln -s /var/lib/snapd/snap /snap
$ sudo snap install jbig2enc --edge

追加のソフトウェア

ファイル変換機能を利用するためにLibreOfficeを、OCRのためにtesseractを、パターン認識のためにopencvをインストールします。

$ sudo dnf install -y libreoffice-writer libreoffice-calc libreoffice-impress tesseract 
$ pip3 install uno opencv-python-headless unoconv pngquant WeasyPrint

Stirling PDFのビルド

標準で入っている JDK17 から JDK21 に切り替えます。

console
$ sudo alternatives --config java

There are 3 programs which provide 'java'.

  Selection    Command
-----------------------------------------------
   1           java-21-openjdk.x86_64 (/usr/lib/jvm/java-21-openjdk-21.0.6.0.7-1.el9.alma.1.x86_64/bin/java)
   2           java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.442.b06-2.el9.x86_64/jre/bin/java)
*+ 3           java-17-openjdk.x86_64 (/usr/lib/jvm/java-17-openjdk-17.0.14.0.7-2.el9.alma.1.x86_64/bin/java)

Enter to keep the current selection[+], or type selection number: 1

本体をビルドします。

$ cd ~/.git && git clone https://github.com/Stirling-Tools/Stirling-PDF.git && cd Stirling-PDF && chmod +x ./gradlew && ./gradlew build

ビルドが完了したら、ファイルを移動します。

$ sudo mkdir /opt/Stirling-PDF && sudo mv ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/ && sudo mv scripts /opt/Stirling-PDF/

OCRのサポート言語追加

一括で全言語をサポートしたい場合は次のコマンドを実行します。

$ sudo dnf install -y tesseract-langpack-*

今回は日本語を追加します。
リポジトリで見つけられなかった場合は tessdata の Github リポジトリから jpn.traineddata をダウンロードして、/usr/share/tesseract/tessdata/ に配置します。

$ sudo dnf install -y tesseract-langpack-jpn

サービス登録

Stirling PDFをサービスとして登録します。
.envファイルを作成します。

$ touch /opt/Stirling-PDF/.env

サービスファイルを作ります。
jarファイルのバージョンは適宜書き換えてください。

/etc/systemd/system/stirlingpdf.service
[Unit]
Description=Stirling-PDF service
After=syslog.target network.target

[Service]
SuccessExitStatus=143

User=root
Group=root

Type=simple

EnvironmentFile=/opt/Stirling-PDF/.env
WorkingDirectory=/opt/Stirling-PDF
ExecStart=/usr/bin/java -jar Stirling-PDF-0.41.0.jar
ExecStop=/bin/kill -15 $MAINPID

[Install]
WantedBy=multi-user.target

デーモンを再読み込みして、サービスを起動します。

$ sudo systemctl daemon-reload
$ sudo systemctl enable --now stirlingpdf

これで完了です。

おわり

ファイル数制限とかに縛られずファイルをいじれるようになりました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?