注目の投稿

作ったもの

長らく更新していませんが、生きてます。   仕事上で作成したものの仮置き場。  ・ Thyroid_datasheet   とある研修用に作った入力用webアプリ。 データを入れると日付毎に簡単な解析をかける。アップデート予定 。 言語はpython。デプロイの楽さからstreamlitベースで作成。

TeXで作成した文書をPDF/A形式に変換する


どうも皆さん、こんにちは。
前回でFFTに関する話題は一通り移し終えたので、今回は私が以前備忘録代わりに作成したTeXに関する話題を記載します。

私は普段数式などを含む文書を書くとき、Overleafを使って執筆しています。
Overleafはオンラインで使えるLaTeX執筆環境で、クラウドとしての機能を備えているため執筆中のファイルを他の共著者に共有するのに便利です。
以前はWinshellやTeX worksを使用していましたが、TeXで作成した文書をソースファイルで受け渡しをするとPC間の微妙な環境の差で出力結果が違ったりします。
私は移動用のノートパソコン・職場のデスクトップなど、複数のパソコンでファイルの編集をすることも多いので、パソコン間でのファイル受け渡しの手間を減らすため、Overleafを使うようになりました。

で、最近所属先に文書のデータ提出を求められたときに問題は起こりました。
ファイル形式がPDF/A形式に指定されていたのです。
一般的なTeX環境ではPDFは普通の(PDF/Aではない)形式で出力されるので、これを作成するのにえらい労力を割いてしまいました。
今回の記事は半分今後のメモ代わりに残します。
同じようなことで困っている人の一助となれば幸いです。

まず、PDF/Aってなんだよ、という方のための説明ですが、要するにPDFよりも書きこみ制限を厳しくして、マシン間の表示齟齬を減らしたPDF形式だと理解していもらえれば良いと思います。
このPDF/A形式ですが、Officeのwordには出力の段階で形式を指定できますが、TeX環境だとそこまで簡単ではありません。
TeX wikiには一度PDFで出力してからAdobe Acrobat Proを使って変換しろと書いてある始末。
所属先でライセンスを買っている場合はそれで良いかもしれませんが、無料で使える手段を探しているから調べている訳で・・・
しかも調べたところ、TeXで作成したPDFをAcrobat ProでPDF/Aに変換すると一部数式や図が文字化けするなど、うまく表示されないことがあるらしいです。
数式をきれいに書くためにTeXで文書を作成しているのに提出のための変換で文字化けするって、それでは本末転倒ですよね。

ということで、色々調べた結果、以下のwebが参考になりました。

LaTeXとその周辺のtips
GhostscriptでPDF/Xファイルを作成する
ps2pdf: PostScript-toPDF converter
Creating high-quality PDF/A documents using LaTeX

参考になりましたが、残念ながら私の環境ではどれもうまくいきませんでした。
このあたりはPC環境の差が出るところだと思うので、今回私が記載する内容でうまくいかないという人はこれらを参考にするとうまくいくものがあるかも知れません。
基本的なアプローチとして、Ghostscriptのps2pdfを使ってPDF/A形式にファイルに変換する、というのは共通になります。
ps2pdfは.psや.epsのファイルを.pdfに変換するのに用いる機能ですが、PDFファイルを別のPDFファイルに変換するのにも使えるらしいです。
ということで、今回はこの機能を使ってTeXのソースファイルから直接PDF/A形式で出力するのではなく、一度普通のPDFで出力したファイルをPDF/A形式に変換します。
Overleafを利用する場合はクラウド上で記述したソースをPDFに変換してダウンロードできるので、一度ソースファイルをダウンロードするよりもこの方法の方が何かと楽かと思います。
ps2pdfはGhostscriptが入っているPCならすでに使用可能なことが多いとは思いますが、Ghostscriptが入っていない場合やps2pdfが動かないという場合には一度Ghostscriptをアンインストールしてから再度インストールしてみてください。

ps2pdfには-dPDFAというオプションがあり、PDF/A形式にも変換することができるようです。
(webによっては-dPDFA=1と書いてあったりしますが、この表記が正しいかは不明です。)
windowsの場合、コマンドプロンプトで

gswin64c (オプション) -sDEVICE=pdfwrite (入力ファイル)

と入力して使用します。
(オプション部分は上に挙げたwebなどを参考にしてくだい)
ただこいつが曲者で、私の環境ではなぜか-sで入力するオプションがエラーになってしまい、うまくいきませんでした。
つまり、Ghostscriptから-dのオプションは入るのに-sのオプションは入らないという状態でした。
この原因は現在でも不明です。
環境によってはここで挙げたコマンドで解決する場合もあるかもしれません。

色々見ているうちにps2pdfをコマンドプロンプトで直接実行することができると知りました。
試しに、

ps2pdf 入力ファイル 出力ファイル

とやってみると、ちゃんとps2pdfが動くじゃありませんか。
ということで、Ghostscriptから実効するのをやめ、ps2pdfに直接-dPDFAを入れて実行することにしました。

ps2pdf -dPDFA 入力ファイル 出力ファイル

としたところ、めでたくPDF/A形式に変換することができました。
ただ、ファイルの変換中に

PDF/A doesn't allow images with Interpolate true.

というエラーメッセージがいくつか表示されました。
要するにPDF/Aの形式に対応していない図がありますよ、と言っているのですが、ぱっと見たところ図の文字が消えてるとか化けてるとかいうことは見当たりませんでした。
もしかすると変換の過程で図の形式を一部自動的に変更してくれているのかもしれません。
詳細は不明ですので、何かご存じの方がいればお教え下さい。

私の場合はOverleafで既にPDFとして出力されていますが、pdf > pdf変換がうまくいかない場合はソースファイルから一度epsファイルを生成すると良いかもしれません。
TeXの執筆環境によってはこの方が楽な可能性もあります。
ps2pdfの元々の用途から考えるとepsからPDF/Aに変換するのなら通る可能性はあると思います。
その場合、図はepsで用意する必要がありますのでご注意を。

コメント