|
5.9 PDF, ドキュメント形式
5.9 PDF, ドキュメント形式 Mathematica の使用法で重要なもののひとつに,技術文書のための電子形式があります.この大部分はMathematica ノートブックのプロパティに由来します.Mathematica ノートブックは,テキスト,数式,グラフィックスを組み合せる多くの技術分野に適したドキュメント形式です.webMathematica サイトで技術ドキュメントを生成することができます.簡単に生成できるフォーマットのひとつにMathematica ノートブックがあります.また,クライアントにMathematica を返すことで実行できるwebMathematica の例題もたくさんあります.Content.jspはそのような例題のひとつです.Mathematica のノートブックを使うと,クライアントに届いた後でもさらにドキュメントで作業が続けられるという利点があります.欠点は,クライアントの側がMathematica あるいはMathReader http://www.wolfram.co.jp/products/mathreader/のようなノートブックが読めるアプリケーションにアクセスできなければならない点です.ノートブックの代りにPDFを使うこともできます.PDFには大半のクライアントがこれを描画できるという利点があります.このセクションではwebMathematica でPDFドキュメントを生成する方法について説明します. 現在のところ,Mathematica はPDFを生成する組込み技術を有していません.このため,外部ツールが必要になります.PDFの生成は,Mathematica ノートブックの生成,ノートブックのPostScriptへの変換,PostScriptのPDFヘの変換の3段階からなります.次のセクションではこれらの各段階について説明します. Mathematica ノートブックの生成 Mathematica ノートブックを生成する一般的な方法は,ノートブック生成のためのMathematica コマンドを用いることです.以下に例となる関数を挙げましたのでご覧ください(これはContent.jspで使われているソースから取ったものです).
MakeNotebook[] := UseFrontEnd[ Module[ {nb, nbobj}, nb = NotebookCreate[] ; NotebookWrite[ nb, Cell[ "A Dynamically Created Notebook", "Title"]] ; NotebookWrite[ nb, Cell[ "Converted to " <> $$button, "Subtitle"]] ; NotebookWrite[ nb, Cell[ "The date is " <> ToString[ Date[]], "Text"]] ; nbobj = NotebookGet[ nb] ; NotebookClose[ nb] ; nbobj]]
この例は,NotebookCreateでノートブックオブジェクトがどのように作られるか,またNotebookWriteで内容がどのように加えられるかを示しています.ノートブックが完成するとNotebookGetでノートブックを持っているMathematica の式が得られ,これが返されます.実際には,ドキュメントにグラフィックスやテキスト,計算等が入れられます.Mathematica のドキュメントには,ノートブックを生成するコマンドに関する情報がたくさん載っています. Mathematica ノートブックを使う主な利点は,フォントの選択,グラフィクス,数式等の細部に十分な注意が払われるので,製作者がそれほど気を遣わなくてもよい点です. PostScriptへの変換 この変換は関数NotebookPrintを使うと極めて簡単に行えます.次はノートブックオブジェクトをfile.psというPostScriptでの表現にします.ノートブックオブジェクトは,前のセクションで説明した方法で生成することができます.
NotebookPrint[ nb, file.ps]
残念ながら,現行バージョンのMathematica (4.2)では,NotebookPrintはWindowsでは満足するような動作をしません. PostScriptからPDFへの変換 PostScriptをPDFに変換するツールはたくさんあります.試してみたのはps2pdf(http://www.cs.wisc.edu/~ghost/doc/AFPL/8.00/Ps2pdf.htm)とPStill(http://www.pstill.com)の2つです.これらはサードパーティによるツールでWolfram Researchはサポートしていません.しかし,極めて満足できるものです.どちらを使う場合も,Mathematica が使う特殊フォント全部にアクセスできるようにしなければなりません.Mathematica のレイアウトに含まれる追加フォントの加え方は,それぞれのコンバータについてのドキュメントをご覧ください. 5.9.1 PDFの例題の作成 このセクションでは,ノートブックを生成し,これをPDFに変換する例題について説明します.この例題が動くためには前のセクションで説明したPDFツールがインストールされていなければなりません.前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/PDF/Generate.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異なる場合もあります).ソースはwebMathematica/Examples/PDF/Generate.jspとwebMathematica/WEB-INF/Applications/ExampleUtilities/PDF.mにあります. まず,これがJSPのソースです.
<form action="Generate.jsp" method="post"> This example generates a notebook, converts it to PDF and returns the PDF. </p>
<msp:allocateKernel>
<msp:evaluate> If[ MSPValueQ[ $$button], Get[ "ExampleUtilities`Content`"] ; Get[ "ExampleUtilities`PDF`"] ; nb = MakeNotebook[] ; pdf = NotebookToPDF[ nb] ; If[ StringQ[ pdf], MSPReturn[ pdf, "application/pdf"], "Conversion failed, perhaps the PDF tools are not installed."]] </msp:evaluate>
</msp:allocateKernel>
<br> <br> <input type="submit" name="button" value="Generate">
</form>
このコードで,ノートブックを作成してこれをPDFに変換する2つのパッケージをロードします.このコードは関数MakeNotebookを呼び出します.この関数は大変単純なノートブックを生成します.次に,作成されたノートブックオブジェクトを関数NotebookToPDFに渡します.これが文字列を返すと,その文字列がMSPReturnを使ってクライアントに返されます. 次は関数NotebookToPDFのMathematica のソースです.
$PStillCommand = "/usr/local/pstill_dist/pstill"
PDFCommand[ out_, in_] := $PStillCommand <> " -o " <> out <> " " <> in
NotebookToPDF[nb_]:= Module[ {stm1, stm2, file1, file2, res}, stm1= OpenTemporary[]; stm2=OpenTemporary[]; Close[stm1]; Close[stm2]; file1=First[stm1]; file2=First[stm2]; UseFrontEnd[ NotebookPrint[nb, file1]]; Run[ PDFCommand[ file2, file1]]; res=Read[file2, Record, RecordSeparators -> {}]; DeleteFile[file1]; DeleteFile[file2]; res ]
これには変換ツールの場所を示す定義が必要です.ここではPStillを使う設定が行われていますが,ps2pdfを使うように簡単に変更することができます.また,コマンドはUnixのファイルシステムに適しています.Windowsでは下記のように設定するとよいでしょう. コマンドの前後のダブルクォートと2重になったバックスラッシュにご注意ください.
$PStillCommand="\"C:\\Program Files\\GPStill\\pstill.exe\""
このコードは最初にいくつかの一時的なファイルを作り,コマンドNotebookPrintを使ってPostScriptをファイルの1つに送ります.それからRunコマンドを使ってPostScriptのPDFへの変換を誘発します.最後にこのPDFをMathematica の文字列に読み込んで,これを結果として返します. PostScriptからPDFへの変換ツールとなるこれらの簡単な関数をさらに拡張することができます.例えば,いろいろなオプションをコンバータに渡すようにすることができます.
|