LibreOfficeによるLinuxサーバ上でのPDFからWordへの変換

AWS

とある Web システムの開発プロジェクトにおいて、サーバサイドで PDF ファイルから Word ファイルへ変換してダウンロードする機能を実装することになった。

ローカル(パソコン)上では Adobe Acrobat 等の有料ソフトを使えば実現は可能だが、Linux サーバ上で無料でかつコマンドラインで使えるような機能は、なかなか見つけるのに苦労した。

最終的には、LibreOffice というフリーソフトウェア (執筆時点での最新バージョンは 6.0) を利用して機能を実現することができた。

今日は、そのセットアップ方法と、変換の方法を書いてみたいと思う。

スポンサーリンク

Ubuntu (Debian 系) でのインストール方法

# 以下は root として実行
$ cd /usr/src
$ wget https://download.documentfoundation.org/libreoffice/stable/6.0.5/deb/x86_64/LibreOffice_6.0.5_Linux_x86-64_deb.tar.gz
$ tar zxvf LibreOffice_6.0.5_Linux_x86-64_deb.tar.gz
$ cd LibreOffice_6.0.5.2_Linux_x86-64_deb/DEBS/
$ dpkg -i *.deb

# JRE, 各種ランタイムをインストール
apt install default-jre
apt install libxinerama1
apt install libdbus-glib-1-2

AWS (Amazon Web Service, Red Hat 系) でのインストール方法

$ cd /usr/src
$ sudo wget https://download.documentfoundation.org/libreoffice/stable/6.0.5/rpm/x86_64/LibreOffice_6.0.5_Linux_x86-64_rpm.tar.gz
$ sudo tar zxvf LibreOffice_6.0.5_Linux_x86-64_rpm.tar.gz
$ cd LibreOffice_6.0.5.2_Linux_x86-64_rpm/RPMS/
$ sudo yum install *.rpm

# 各種ランタイムをインストール
sudo yum install libXinerama.x86_64 cups-libs dbus-glib
 
# バージョン確認
$ libreoffice6.0 --version
LibreOffice 6.0.5.2 54c8cbb85f300ac59db32fe8a675ff7683cd5a16

PDF から Word ファイルへの変換コマンド

下記は、カレントディレクトリの hoge.pdf ファイルを変換する例。

# PDF を Word に変換するコマンド例
$ libreoffice6.0 --headless --infilter="writer_pdf_import" --convert-to doc --outdir ./ hoge.pdf

上記は、*.doc (MS Word 97) 形式への変換だが、*.docx (MS Word 2003) 形式への変換も可能。

しかし、docx では元の PDF 内のレイアウトが崩れるなどの問題が発生したため、今回は doc 形式を採用した。

なお、PDF 内のテキストは、Word 内ではテキストボックス(文字を好きな位置に配置するレイアウト枠)内のテキストに変換される。

Word は1ページに何行と決まっていて、それに揃えてテキストが配置されるが、PDF はそのような配置の仕方ではない(任意の位置にテキストを配置)ために起きるのではないかと推測される(ファイル形式の仕様上、仕方がないと思われる)。

参考

コメント

タイトルとURLをコピーしました