とある 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 はそのような配置の仕方ではない(任意の位置にテキストを配置)ために起きるのではないかと推測される(ファイル形式の仕様上、仕方がないと思われる)。
参考
- LibreOffice 最新版ダウンロード
Download LibreOffice | LibreOffice - Free Office Suite - Based on OpenOffice - Compatible with MicrosoftDownload free office suite for Windows, macOS and Linux. Microsoft compatible, based on OpenOffice, and updated regularl... - ターミナルからのインストール手順
Installing LibreOffice on Linux - The Document Foundation Wiki
コメント