PSファイル経由でPDFに変換する方法

目次

はじめに --- PSファイルを経由してPDFを作る際の利点・欠点とは?

通常、LaTeXにおいてはdvipdfmxを用いて、DVIファイルから直接PDFファイルを作成するのがもっとも簡便で手軽な方法です。しかしながら、その方法はあるケースでは使えず、dvipskというコマンドでDVIファイルからPSファイルに変換し、さらにある方法を用いてPSファイルからPDFファイルを作成する必要があります。(矢印で流れを示すならば、DVI→PDFの代わりにDVI→PS→PDFのように変換しなければならないのです。)

PSファイルを経由する必要がある場合というのは、LaTeXで実現できないような複雑な機能を実現するためにPostScriptという命令を用いる必要がある場合です。PostScriptとは、「ページ記述言語」と呼ばれるものの一種で、複雑な図など、複雑な構成のファイルを作成するために、PDF以前に使われていた自由度の高い命令の形態です。よく分からない方は、PSファイルはこのPostScriptを用いて書かれていることだけを知っておけば十分です。

さて、LaTeXは図を扱うのが必ずしも得意ではありません。したがって、PostScriptの命令を特殊なやり方でDVIファイルに埋め込み、PSファイルを作る際にその命令をPSファイルに出力するやり方をとっているパッケージがあります。具体的にはPSTricksという複雑な図を描くためのパッケージで、Prosperというプレゼン用のパッケージなどでも用いられています。したがって、こういったパッケージを用いる際にはPSファイル経由でPDFを作らなければなりません。

また、movie15.styというパッケージはPDFの命令を用いて動画をPDFに埋め込むソフトらしいですが、これもdvipdfmxでは処理できず、PSファイル経由でPDFを作る必要があるようです。

しかし、残念ながら、無料で入手できるソフトのみを用いた場合、PSファイルからPDFファイルを作成する際にいくつかの問題が生じます。(Acrobatという1万円以上するソフトを用いる際には、これらのうちのいくつかの問題が解決します。しかし、ここではフリーソフトのみを用いて解説することにしていますので、その方法はここでは触れません。)

「一部のTrueTypeフォントを埋め込むのに時間がかかる」について補足します。現在よく用いられているAFPL Ghostscript 8.53ではTrueTypeフォントの埋め込みに対応しました。また、多書体化もできます。ただ、HG丸ゴシックM-PROなどの一部の拡張子がTTFのフォントでは変換に非常に時間がかかります。(拡張子がTTCのフォントはなぜか大丈夫です。)また、縦書きも、和文と英文が横方向にずれる、和文の句読点も横方向にずれるという現象が出ます。そのようなことから、TrueTypeフォントの扱いには難があります。

「図を貼る際にはEPS形式しか使えない」というのは、JPEGなどといった有名な画像形式が使えない、という意味でもあります。EPS 形式で扱う方法を参考に、PSプリンタドライバやEPS-convといったソフトを用いて、画像をEPSに変換する必要はありますが、png, jpeg, pnm, ppm, pgm, pbm 形式については、bmepsコマンドを背後で用いてEPSに変換するような一工夫をすることで、あらかじめEPSに変換しなくとも扱うことが出来ます。(やり方は後述します。)BMP形式は縦横のサイズさえ指定すれば使えましたが、個人的には画像サイズを自動判別できるEPS形式を用いることを勧めます。

「dvipdfmxで変換するときよりも面倒」は言葉の通りです。DVI→PDFよりもDVI→PS→PDFのほうが一工程多いのです。

ですので、PS経由でPDFを作成する際には、上記のような問題点を認識しておく必要があります。

PS経由でPDFを作成する為のインストール・設定

はじめに

ここでは、「TeXインストーラ3」あるいは手動でAFPL Ghostscript 8.53を既にインストールしていると仮定します。(「TeXインストーラ3」をお使いの方は、特に設定を変更しなければインストールされているはずです。)インストールしていない方は忘れずにインストールしてください。その際に、[Use Windows TrueType fonts for Chinese, Japanese and Korean]という項目がありますので、これにチェックを入れておきましょう。

なお、TrueTypeフォントを埋め込んだPDFのみ作る場合は下のようなインストール・設定を行う必要はありません。そのまま「使ってみよう」をご覧ください。(ただし、Windows 95, 98, Meの方は、、C:\gs\gs8.53\lib\cidfmap中のC:/WINNT/fonts/msgothic.ttcのように、「WINNT」と書いてあるところをすべて「WINDOWS」に変えておく必要があるかもしれません。(既に変わっていれば大丈夫かもしれません。)

Active Perlのインストール

まず、PS経由でPDFを作成する際に使うソフトを動かす際に必要となるPerlというソフトをインストールします。(これは簡単な文法でプログラムを動かすことの出来る実行環境です。LaTeXとは関係ありませんが、プログラミングに興味のある方はPerlに手を出してみるのがいいかもしれません。)Perlの実行環境の一つにActive Perlが知られており、Windows上ではこれがよく使われています。

Active Perlをインストールしていない方は、Active Perlのインストールを参考に、インストールしてください。

Ghostscriptの設定ファイルの改変

まず、CIDフォントというものを手に入れなければなりません。昔、東風TrueTypeフォントというものをCIDフォントにしたものが無料で配布されていましたが、現在では日立とのライセンス問題で配布が停止されています。しかしながら、CIDフォントからライセンス問題が生じる文字を取り替えて作成したダミーフォントが存在します。(もちろん無料で入手できます。)次のリンク先から入手してください。

http://www.eaflux.com/replacejfonts/sources/kochidum-modified.zip

これを「+Lhacaデラックス版」などを用いて解凍します。(解凍方法が分からない方は「+Lhacaデラックス版」による解凍方法をご覧ください。)

この中のKochiMin-DumおよびKochiGo-DumをC:\gs\gs8.53\Resource\CIDFontにコピーします。(Cドライブの中のgsフォルダの中のgsd8.53フォルダの中のResourceフォルダの中のCIDFontフォルダの中、という意味です。Ghostscriptをインストールした場所あるいはGhostscriptのバージョンによって異なります。directory-for-CID-fontsというファイルが入っていると思いますので分かりやすいと思います。)

CIDフォントのコピー

次に、C:\gs\gs8.53\libにcidfmapというファイルがあります。(Windows付属のメモ帳から開けます。今の説明が分からない方は、Windows左下の[スタート]より[ファイル名を指定して実行]を選び、出てきたウィンドウで[名前:]に「notepad C:\gs\gs8.53\lib\cidfmap」と記入し、[OK]をクリックすることで開けます。)

cidfmapをメモ帳で開く

cidfmapを開いたら、次のように記述します。ワープロで文章を書くように、キーボードから普通に入力します。(コピー&貼り付けでも多分大丈夫です。うまくいかなければ手で入力してください。)

なお、この設定はTrueTypeフォントを埋め込まない場合のやり方です。埋め込むことがある方はcidfmapの変更を行う前に、cidfmapのバックアップをとっておいてください。(oldcidfmapなどの名前にコピーしておき、後で埋め込みたいときはこれをcidfmapという名前に戻すのです。)

/Ryumin-Light /KochiMin-Dum ;
/GothicBBB-Medium /KochiGo-Dum ;
/HeiseiMin-W3 /Ryumin-Light ;
/HeiseiKakuGo-W5 /GothicBBB-Medium ;

もし既に「/Ryumin-Light」や「/GothicBBB-Medium」に関する記述がありましたら、その該当する記述の行すべての先頭に「%」をつけてコメントアウト(Ghostscriptなどによって処理されないようにすること)します。編集し終わりましたら[ファイル]→[上書き保存]で保存します。

なお、上の作業を行いますと、PSファイルを閲覧しても、文字が正常に表示されなくなります。(ダミーのフォントを用いるよう指定したのですから、当然です。)ですので、PSファイルを閲覧しないようにしてください。

cjkps2pdf.plのインストール

PS→PDFの変換をするためのソフトを次のところからダウンロードしてきます。

http://www.eaflux.com/replacejfonts/sources/cjkps2pdf.pl

その上で、このcjkps2pdf.plをLaTeXソースファイルと同じ場所か、PATHの通ったところ(たとえばLaTeX関連の実行ファイルがインストールされているC:\usr\local\bin、すなわちCドライブのusrフォルダの中のlocalフォルダの中のbinフォルダ。LaTeXのインストール先が違う場合は読み替える。)にコピーします。ここでは後者をとることにします。ついでに、同じ場所、すなわちC:\usr\local\binにあるperlexec(.exe)というファイルをコピーし、cjkps2pdf.exeと名前を変更(ファイルを右クリック→[名前の変更])します。

使ってみよう

以上のインストールが終わったら、次を実行してみましょう。ただし、最初にplatexなどで処理してDVIファイルを作っておいてください。(ここではLaTeXソースファイルの名前を「foo.tex」とします。)

まず、フォントを埋め込む場合(cidfmapを設定していない場合)、DVIファイルのあるフォルダにcdコマンドで移動し、は次のように変換します。

dvipsk -Ppdf foo
ps2pdf foo.ps foo.pdf

埋め込まない場合は次のように変換します。

dvipsk -Ppdf foo
cjkps2pdf foo.ps foo.pdf

上の作業方法がよく分からない方は、LaTeX をカンタンにする方法(設定編)を参考にして、EasyTeXかWinShellといった、コマンドラインソフトをマウス操作で実行できるようにするソフトをインストールするといいでしょう。ここではEasyTeXの設定の一例を示します。メニューバーの[オプション]→[ツールの設定]より設定します。(Windows 95, 98, Meの方は「PDF閲覧」の[プログラム:]を「command.com /c start」と直すとうまくいくと思います。)「PS作成」などは[タイトル]に記入する際の一例です。

「PS作成」
「PS→PDF変換」
「PDF閲覧」

こうすることで、[ツール]→[PS作成]でDVI→PS、[ツール]→[PS→PDF変換]でPS→PDFの変換が行われ、[ツール]→[PDF閲覧]でPDFファイルを閲覧できます。

では、実際の出力をご覧ください。

PS経由でのPDF出力

見た目では特に違和感を感じることなく綺麗に出力されています。では、フォントの埋め込み状況はどうでしょうか。Adobe Readerのバージョンによって異なりますが、Ctrl + DすなわちCtrlキーを押しながらキーボードのdキーを押すことで、フォントの情報を見ることが出来ます。

フォント埋め込み状況

Ryumin-LightおよびGothicBBB-Mediumにおいて、代わりのフォントとしてPDFを閲覧する人のパソコンにインストールされているMSフォントが用いられていることがわかります。つまり、埋め込みが解除され、綺麗なフォントで表示されていることが分かります。

リンクを張ろう

PS経由でPDFにする場合においても、リンクを張り、PDF閲覧者に任意のWebページなどにジャンプしてもらうことが出来ます。

プリアンブルには次のように記述し てhyperrefパッケージを読み込みます。(これは標準で付属しているはずです。)

\usepackage[dvips]{hyperref}

hyperref というパッケージは、簡単に言えばホームページのHTMLファイルで 実現されているようなことを、LaTeX 文書の中の命令で実現するパッケージで す。次に、リンクを張りたい本文中に、次のように書いてみましょう。(ここ ではGoogleへのリンクが張られています。)

\href{http://www.google.co.jp/}{Google} は、最も多くの人々に使われる検索 サイトとして有名です。

すると、「 Google は、最も多くの人々に使われる検索サイトとして有名です。」のように、リ ンクが張られます。(実際にリンクをクリックしてみてください。)リンクの形状は、おそらく水色の枠で囲った文字、という形 になると思いますが、そこをクリックすれば、先の上のリンクと同じ結果が出て くると思います。

また、リンクをクリックすると、指定したメールアドレスあてにメールを送れ るものもあります。それは次のように書きます。

御意見・ご感想は、\href{mailto:yas.axis@ma.mni.ne.jp}{私のメールアドレ ス} までお寄せください。

すると、「御意見・ご感想は、私 のメールアドレスまでお寄せください。」のようになります。(実際にリ ンクをクリックしてみてください。)

画像の埋め込み

dvipsk→ps2pdf は、EPS, BMP の各形式の画像を埋め込むことが出来ます。 BMP形式も一応使えましたが、画像ファイルサイズをいちいち指定しなければならないので、その必要のないEPS形式に変換しておくことを勧めます。

他の形式のまま画像を扱う方法 で、このあたりの方法を述べていますので、よくわからない方はそちらを参 照してください。graphicxパッケージを読み込む際には、dvipsオプションを使います。

png, jpeg, pnm, ppm, pgm, pbm 形式についても、bmepsコマンドを背後で用いてEPSに変換するような一工夫をすることで、扱うことが出来ます。具体的には、たとえばJPEG形式(jpg)の場合、プリアンブルに

\usepackage[dvips]{graphicx,color}
\DeclareGraphicsRule{.jpg}{eps}{.bb}{`bmeps -c -tjpg #1}

と書きます。(PNGの場合であれば、上の2箇所の「jpg」(「.jpg」と「-tjpg」)を「png」(「.png」と「-tpng」)に置き換えます。)本文(\begin{document}と\end{document}との間)には

\includegraphics*{foo.jpg}

のように、未変換のJPEGファイル(ここではfoo.jpg)を指定します。Bounding Box(画像のサイズ)を調べるために、TeXで処理する前にあらかじめ次のようなコマンドを実行しておきます。

bmeps -b foo.jpg foo.bb

あとは、dvipskのオプションに-R0オプションを付け加えることに注意して次のようなコマンドを実行します。ここでは、bar.texというTeXファイルを処理しています。

platex bar
dvipsk -R0 -Ppdf bar
ps2pdf bar.ps bar.pdf

目次や索引にリンクを張ろう!

ある命令を1行プリアンブルに挿入することで、目次、索引、\label等で相互 参照している箇所にリンクが張られ ます。これは使う側としても、大変便利です。ちなみに、リンクが四角の場合 (最初に示すやり方で変換した場合は赤い四角になるはず)は、紙に印刷する際にリ ンクの枠は印刷されませんので、ご安心を。

例として、昔作ったレポートをご覧ください。目次・注釈・索引部分にリン クが張られ、紙の文書とは別の意味での読みやすさがあると感じることでしょう。

リンクつき電子文書の例

使い方は簡単。プリアンブルに、次の1行を挿入するだけです。

\usepackage[dvips,bookmarks=false]{hyperref}

リンクの枠の赤色がお気に召さなければ、linkbordercolor オプションにRGB値 で好きな色を示します。例を先に示しましょう。次の例は緑と青を1ずつ混ぜた 色、すなわち青緑になります。(そのまんまですが。)

\usepackage[dvips,bookmarks=false,linkbordercolor={0 1 1}]{hyperref}

RGB値は{と}で囲み、区切りはスペースでつけます。値は最小0、最大1として 小数(1と0は整数)で示します。255でないことに注意してください。

RGB値はホームページ(web page)の編集等で知っている方もいらっしゃるかとは思います が、ここで、RGB値での示し方を知らない方への解説を行うことにします。 RGB値は、の順番で、最 大を1、最小を0として、それぞれの混ぜる色の度合いを示します。たとえば、 の混合物ですので {1 0 1}と示します。一般的 に、{ }のように、1を最大とした小数で書くわけです。

直感的にRGB値を知りたい方は、Windows付属の「ペイント」で[色 (C)] -> [色の編集 (E)] -> で出たウィンドウで、下の[色の作成 (D) >>] をクリックします。すると、下の図のようなウィンドウが出ますの で、1番右の濃淡を決めるパレットで黒と白の中間色をクリックしてから、左の パレットから望みの色をクリックします。その上で必要ならば右の濃淡パレッ トで白黒の濃淡を決めます。すると最大255、最小0でRGB値が示さ れますので、値から電卓で255を割ってください。これでお望みのRGB値が出る はずです。

RGB値の求め方

閑話休題、再びhyperrefのオプションの話に戻りましょう。

また、次のようにhyperrefのオプションに"colorlinks"を指定す ると、リンクの部分の文字色が赤で示されます。(赤い四角い枠はつきません。) ただし、 この場 合は、リンクの文字部分も赤で印刷されるようです。(モノクロプリンタだと薄 いグレーで印刷されるので、そう判断しました。手持ちにカラーのインクがない ので・・・。)印刷時にはご注意を。

\usepackage[dvips,bookmarks=false,colorlinks]{hyperref}

こちらの方が見た目はきれいですが、リンクだと分かりにくいこと、純粋 に黒で印刷したいときに困ることがあるのが欠点です。そこで、次のように "linkcolor"を使い、リン クの部分の文字色を青にしてみるといいでしょう。

\usepackage[dvips,bookmarks=false,colorlinks,linkcolor=blue]{hyperref}

こうすれば、直感的に「リンクだ」と分かってもらえるかもしれません。後 述する「アノテーション」(メモ)機能を使って、「文字色のついた部分はリン クだ」と示した方が、より分かりやすいかもしれません。

後は、普段どおりの処理を行うだけです。

日本語しおりを作ろう!

PDFには、「しおり」という機能があります。「し おり」は、下の図のように、左のほうに目次のようなものが現れ、そこのリンク をクリックすることで別の章へ容易にジャンプできるような機能です。しかし、 しおりに日本語を使うには、ちょっと一工夫する必要があります。(どうしてか といいますと、PDFの各機能では、日本語はUnicode(世界中の文字に対応したコー ド体系)として扱われなければならず、そのための処理を施さねばならないから です。)次の2つの方 法がありますので、お好きなほうをどうぞ。

日本語しおりの図。Acrobat Readerの左のほうに
あります。

日本語しおりを作るためには、プリアンブルに次のように記述します。

\usepackage[dvips]{color}
\usepackage[dvips,bookmarks=true,bookmarksnumbered=true,%
bookmarkstype=toc]{hyperref}

その上で、TeX文書の名前がfoo.texのとき、次を実行します。dvipskコマンドの出力結果をbkmk2uniというコマンド(角藤先生のpTeXに付属している)に渡して処理しているのがポイントです。「foo」はファイル名ですので、この部分は皆さんの作ったファイル名に置き換えてください。

platex foo
dvipsk -Ppdf -z -f foo | bkmk2uni >foo.ps
ps2pdf foo.ps foo.pdf

これで日本語しおりが出来ました。

PDF文書情報と、メモ(アノテーション)をつけよう

Adobe Reader 7では、[ファイル] -> [文書のプロパティ] -> [概要]タブとたどり、「文書の概要」というウィンドウ内で、PDFの作成者やタイトル、PDF作成ソフトを見る機能が付い ています。この欄に作成者の名前を入れておくと、文書の信憑性を挙げるのに一 役買うかもしれません。

(ちなみに、[ファイル] -> [文書のプロパティ] -> [フォン ト]タブとたどると、フォント情報が見られます。dvipdfmx での(デフォルトでの)変換だと、MS-Gothic や MS-Mincho の「実際のフォン ト」欄が”埋め込みサブ セット”となっており、フォントが埋め込まれていることが分かると思います。 「埋め込み」が何なのかについては、後ほど説明しようと思います。)

また、下の図のように、PDF文書にメモを置いておく「アノテーション機能」 があります。メモは開いておくことも閉じておくことも、動かすことも 出来ます。PDF文書とは別に読者に伝えたいメモがある場合や、下書きの完成度 合いをメモしておくことに使えるかもしれません。

「アノテーション機能」の例です。上が開い
 ていて、下が閉じています。

この2つは関連性のない機能ですが、作り方は同じなので、一緒に紹介します。

まず、文書はhyperrefのオプションとして指定します。具体的には、プリアンブルに次のように書きます。pdftitleの引数である「この文書のタイトル」の部分にPDF文書のタイトルを、pdfauthorの引数である「手空太郎」の部分にあなたの名前を、pdfsubjectの引数である「サブタイトル」の部分にサブタイトルを、pdfkeywordsの引数である「キーワード1,キーワード2」の部分に、PDF文書のキーワードを半角コンマ「,」で区切りながら列挙します。

\usepackage[dvips,pdftitle={この文書のタイトル},%
pdfauthor={手空太郎},pdfsubject={サブタイトル},%
pdfkeywords={キーワード1,キーワード2},bookmarks=true,bookmarksnumbered=true,%
bookmarkstype=toc]{hyperref}

また、アノテーションは本文(\begin{document}と\end{document}の間)に、たとえば次のように書きます。/Contentsの引数である「メモを適当に書きました。」の部分に、アノテーションの本文を、/Titleの引数である「メモのタイトル」にはアノテーションのタイトルを書きます。

\special{ps: SDict begin [
/Contents (メモを適当に書きました。)
/Rect [70 600 170 700]
/Open false
/Color [0 1 1]
/Title (メモのタイトル)
/Subtype /Text
/ANN pdfmark end}

処理はしおりを作る場合と同じです。ここでも、foo.texという名前のファイルを処理すると仮定しています。

platex foo
dvipsk -Ppdf -z -f foo | bkmk2uni >foo.ps
ps2pdf foo.ps foo.pdf

pdfcryptでかける、PDFの使用制限

PS経由でPDFを作成した場合においても、pdfcryptというコマンドを用いることで、PDFにパスワード制限・使用可能な機能の制限をつけることが出来ます。

これはJavaアプリケーションなので、これを使うためにはあらかじめJavaプログラムを動かす道具であるJ2SE Runtime Environment(JRE)をインストールしておく必要があります。J2SE Runtime Environmentのインストール方法を書きましたので、必要な方はご覧ください。

さて、まずはあらかじめdvipdfmxで、暗号化をしていないPDFを作成しておきます。これをold.pdfとします。その上で、たとえば次のように実行します。

pdfcrypt -P 00100100 -K 128 old.pdf new.pdf

こうすることで、old.pdfから制限つきPDFであるnew.pdfを生成することが出来ます。owner passwordとuser passwordを聞かれますので、それぞれ記入しましょう。

-P オプションの後の二桁の0と1の並びは、「どれを許可してどれを許可しないか」を指定するためのものです。具体的には次のとおりです。

一番目 印刷の許可(Printing)
二番目 文書の変更の許可(Modify-Contents)
三番目 コピー・抽出の許可(Copy)
四番目 注釈・フォームフィールドの作成の許可(Modify-Annotations)
五番目 フォームフィールドの入力または署名の許可(FillIn)
六番目 アクセシビリティを有効にする許可(ScreenReaders)
七番目 文書アセンブリの変更の許可(Assembly)
八番目 低解像度での印刷の許可(Degraded-Printing)

上のコマンドでは、「コピー・抽出の許可(Copy)」および「アクセシビリティを有効にする許可(ScreenReaders)」の2つを許可し、それ以外は不許可にする設定を行いました。

ただし、owner passwordを入力して開いた場合は、-Pオプションで不許可に指定したものでも、一部は「許可」にされてしまいます。配布先にはowner passwordではなく、user passwordを教えるようにしましょう。

-Kオプションでは、どれくらいのセキュリティを保持したいかを決めるためのものです。40と128から選べます。40の場合はセキュリティが低めだが多くのAdobe Readerで開ける、128の場合はセキュリティは高いがAdobe Reader 5以降でないとPDFを開けなくなります。

では、new.pdfを開いてみましょう。パスワードを聞かれますが、ここではuser passwordを答えます。うまく開けたら、Adobe Readerの場合、メニューより[ファイル]→[文書のプロパティ]と選び、[セキュリティ]タブをクリックします。すると、たしかに「コピー・抽出の許可(Copy)」および「アクセシビリティを有効にする許可(ScreenReaders)」に相当する項目が許可され、それ以外は不許可になっていることが分かると思います。

PDFのセキュリティ設定

PDF で多書体

PSファイル経由でPDFに変換した場合もTrueTypeフォントの多書体を実現することが出来ます。詳細は、 DVI→PS→PDF変換で多書体を実現する方法をご覧ください。

  目次に戻る

This document is dedicated to the Public Domain! --- この著作権を放棄した文書は「みなさんのもの」です!
This web page is written by Yasuhiro Otomo.
If you have any question about this page, send e-mail to me --- ご質問は大友まで。
You can link to this web page freely! --- リンクはご自由にどうぞ!
This web page typed on MKEditor for Windows 3.8.1-J