7 件 見つかりました。
タイトルの通り。Illustratorが悪いのかAcrobatが悪いのかはわからないが、AcrobatがクラッシュするようなPDF中の斜線柄のスウォッチをただの色に変えると現象が生じなくなったので、スウォッチがクラッシュに一役買っていることは間違いないだろう。なんでそうなる場合とそうならない場合があるのだろう?今時間がないのでこれ以上のトラックはやめておく。
[2007-02-02-01]の続き。
ちょっと試してみたが、PDF形式のデータをクリップボードに用意するのは難しそうだ。
一方でCOMインターフェースからはあっさりできてしまったので、そのVBScriptソースをメモする。嬉しいやら悲しいやら。
Dim appRef, docRef, txt ' 旧バージョンのIllustratorがある場合、以下のように末尾に数字を加えて ' バージョンを指定する。10が1、CSが2、CS2が3 ' "Visual Basic Scripting Reference" (CS2) p.61見よ Set appREf = CreateObject("Illustrator.Application.2") Set docRef = appRef.ActiveDocument 'Set docRef = appRef.Documents.Add ' 新規作成の場合はこちら Set txt = docRef.TextFrames.Add txt.Position = Array(200, 200) txt.Contents = "Itoh et al., Appl. Phys. Lett. 83, 2043 (2003)" ' フォントを見つける Dim fontR, fontB, fontRname, fontBname fontR = Null fontB = Null fontRname = "KozGoStd-Regular" ' 小塚ゴシックStd (R) fontBname = "KozGoStd-Heavy" ' 小塚ゴシックStd (H) 'fontRname = "ArialMT" ' Arial (Regular) 'fontBname = "Arial-BoldMT" ' Arial (Bold) For Each fontToTest In appRef.TextFonts If(fontToTest.Name = fontRname) Then Set fontR = fontToTest ElseIf(fontToTest.Name = fontBname) Then Set fontB = fontToTest End If If(IsNull(fontR) Or IsNull(fontB)) Then ' 何もしない(ループ続行) Else Exit For ' フォント見つかったのでもうループは不要 End If Next If(IsNull(fontB) Or IsNull(fontR)) Then msgbox "fonts not found" WScript.Quit ' 見つからなかったらやめる End If txt.TextRange.CharacterAttributes.TextFont = fontR txt.TextRange.CharacterAttributes.Size = 19 ' 太字にする箇所は別途調べておくなり、それ用のルーチンを用意するなりしておく txt.Characters(32).CharacterAttributes.TextFont = fontB txt.Characters(33).CharacterAttributes.TextFont = fontB
Dim app, objRE Set app = CreateObject("Illustrator.Application.2") Set objRE = new RegExp objRE.IgnoreCase = True objRE.pattern = "kozgostd" For Each font In app.TextFonts If objRE.Test(font.Name) Then msgbox font.Name End If Next
私はプレゼン用スライドなど諸書類はIllustratorで準備することが多い。
で、仕事柄以下の様な形式の論文参照テキストオブジェクトを頻繁に用いる。
Itoh et al., Appl. Phys. Lett. 83, 2043 (2003)
この文字列自体は別途作成した論文整理ソフトから容易にクリップボードにコピーしIllustratorにペーストできる。ペースト自体はすぐ終わるが、上で「83」となっているvolume番号は太字で表記したいので、ペーストの度に手作業でここを太字に直す作業が発生する。これが意外と面倒なので、何とかして一発で太字入りテキストオブジェクトを作成したいと思った。
こういうことはJavascript(参考:【Illustrator CS自動化作戦】)とかCOMインターフェースとかIllustrator SDKを用いるのが正攻法で、手間も小さいだろう。でもクリップボードに(ただの文字列ではなく)Illustratorが解釈できるデータを用意し、それをペーストするというアプローチも面白そうだなと思った。開発は面倒そうだが概念的には明瞭で既存のペーストコマンドから実現できるし、またIllustratorに頼らずIllustratorのオブジェクトが作れれば、今後何かと便利かもしれない。
古くはAICBという形式が使われていたようだが、現在はPDF形式がメインのようである。というわけでPDF形式が良さそうだが、勉強すべき事項は多く、しばらくはトライ&エラーの体当たりな開発が必要そうだ。そこでとりあえず、PDF形式でのペーストを行うためだけのプログラムを書いた。これはクリップボードにコピーしたテキスト形式のデータを、PDF形式として無理矢理解釈しているだけである。これを用いて、メモ帳相手にひたすら手書きPDFを作成しながらIllustratorペーストした際にどのようになるかを調べれば、だんだん形式への理解も深まるのではと思う。たぶん。
#include <windows.h> #include <tchar.h> static HGLOBAL PrepareClipboardTextData(char* buf){ HGLOBAL hMem = GlobalAlloc(GHND | GMEM_SHARE, lstrlenA(buf)); if(!hMem) return NULL; char* buf2 = (char*)GlobalLock(hMem); lstrcpyA(buf2, buf); GlobalUnlock(hMem); return hMem; } UINT ConvertClipboardTextIntoPDF(){ try{ if(!OpenClipboard(NULL)) return 1; const UINT cf_pdf = RegisterClipboardFormat(TEXT("Portable Document Format")); if(cf_pdf == 0) throw 2; char* buf = (char*)GetClipboardData(CF_TEXT); if(!buf) throw 3; HGLOBAL hMem = PrepareClipboardTextData(buf); if(!hMem) throw 4; if(!SetClipboardData(cf_pdf, hMem)) throw 5; } catch(UINT i) { CloseClipboard(); return i; } CloseClipboard(); return 0; } int WINAPI _tWinMain(HINSTANCE /* hInstance */, HINSTANCE /* hPrevInstance */, LPSTR /* lpCmdLine */, int /* nCmdShow */){ const UINT err = ConvertClipboardTextIntoPDF(); if(err){ MessageBox(NULL, TEXT("failed"), TEXT("hiConvertClipboardTextIntoPDF"), MB_ICONEXCLAMATION); } return 0; }
[2007-01-18-01]や[2007-01-19-01]に書いたがやっぱりリンク付きPDFは便利(プレゼンなどで)。
Javascriptでもいじれるみたいだが、残念ながら上書きのみのようで、完全に制御するにはSDKでプラグイン作るレベルまで行かないとダメのようだ。
しかし実際にリンクを貼る作業をIllustrator上でどうやって実現すればいいのだろう?
現在の妄想:
__HILINK__(ファイル名、しおり名)といったテキストオブジェクトを、ファイル名やしおり名へのリンクに変換するようにすれば良いのでは?ととりあえず思ってる。クリッカブルな領域は、縦横比に捕われず自由変形できるテキストオブジェクトが占める領域で指定するようにすればどうだろう。
以下はTeXの数式をDTPソフトにの内容と同一である。
Illustrator CS(Windows)を大金はたいて購入したものの、(Illustrator 10では問題無くできていた)TeXの数式が記されたepsファイルの読み込みに難があった。(http://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/27936.html)
どうしたものかとムカツイていたが、以下のようにしてTeXの数式をアウトライン化すれば、Illustrator CSで問題無く読み込めた。
dvips -Ppdf -E testeq -o testeq.eps gswin32c -dSAFER -q -dBATCH -dNOPAUSE -sDEVICE=epswrite -dEPSCrop -r9600 -sOutputFile=testeq2.eps testeq.eps
\documentclass{article} \begin{document} \begin{eqnarray} z^2 = x^2 + y^2 \end{eqnarray} \end{document}
PDFのサムネール表示は全体を俯瞰するのに便利。手元のAcrobat 7 Standardでは「ページ」というナビゲーションタブでこれが見られる(Foxit Readerを2分ほど使ってみたが、同様の機能はなかった)。特に私は口頭発表でPDFを用いるため、ページの順序を考えたり、聞き手の方々に全体を示しつつ指示のあったページに素早く移動する際にこれが活躍する。この時のサムネール画像の解像度について考えたことをメモする。
まず、PDFにはページのデータとは別にサムネール用のラスタ画像ファイルを内包する仕様が用意されている。これを持っていないPDFをAcrobatでサムネール表示する際には、Acrobatがその都度サムネール画像を作成し描画する。これが一番解像度の良い表示となるが、当然ながら描画にあたってはそれなりの時間がかかってしまう。
この欠点を克服するのが「サムネール画像の埋め込み」というものである。「ページ」のオプションメニューからこれを選択すると、ラスタイメージがPDFの仕様に従ってファイルに埋め込まれ、サムネール表示にあたっての描画の負担はかなり軽減される。だが解像度はサムネール画像なしの場合よりも悪い。かつ、その解像度を指定するオプションも見当たらなかった。
私は発表用のスライドはIllustrator CSで1枚ずつ作成し、後でこれを結合している。Illustratorのオプションとしてサムネール画像を作成というのがあるが、この場合の解像度はかなり悪い。
またPDFキャビネットもPDFのサムネール表示をすることが可能である。これは既存のサムネール画像とは別の機構で表示してくれるようで、その解像度はそれほど悪くなく、かつ内容はどこかにキャッシュするらしく、表示のたび再描画してる気配は見えない。
まとめる。解像度の大小は以下の通り:
埋め込みサムネール画像なし > PDFキャビネットの表示 > Acrobat 7 Standardによる埋め込みサムネール画像 > Illustrator CSによる埋め込みサムネール画像
埋め込みサムネール画像なし | |
PDFキャビネットの表示 | |
Acrobat 7 Standardによる埋め込みサムネール画像 | |
Illustrator CSによる埋め込みサムネール画像 |
TeXにおいて画像はEPSが一番相性が良い。で、論文を書く際には大量のEPSが生産されるのであるが、そのうちどのファイル名がどの画像に対応するのかわけがわからなくなってくる。そんな場合はサムネイル表示が活躍するわけであるが、jpgやpngなどと違い、EPSのサムネイル表示はややハードルが高い。
一覧するためのソフトを幾つか試した所感:
= Irfanviewがフリーで高機能で便利なのだが、EPSの表示は私の環境では遅く、やや不満。キャッシュもしてくれない。また、ディレクトリのパスを手入力やペーストができないのも残念。
= XnViewもフリーで高機能で便利。EPS表示は遅いが、キャッシュしてくれるようなので、2回目以降の閲覧は高速。Irfanviewで残念だった所をカバーしている感がある。
= susieプラグインでEPS用のものがいくつかあるようだが、手元のEPSは見られなかった。このあたりは、プレビューあるなしなどEPS作成時の事情に強く依存するようである。あふを愛用してる関係で、susieプラグインがあると一番嬉しいのだが、難しいようだ。
= エクスプローラは何げに優秀で、Illustrator CSで「サムネールを作成」としたものはサムネイル表示が可能である。しかし、Igor Proから出力したEPSは"Suppress Preview"のチェックをオフにしてもサムネイル表示はできなかった。偶然だろうが、Illustrator CSの「ファイルを開く」ダイアログや、Photoshop CSのファイルブラウザでも同様であった。Adobe Bridgeを試したいが、そんなカネはない。
というわけで今日のドラフト結論:
= XnView便利そう
= EPS出力の際、Illustrator CSの「プレビュー」と「サムネール」、Igor Proの"Preview"などのオプションがあるが、これらは不要。でも「サムネール」はファイル開く時に便利だからあってもいいかも。Igor Proの"Preview"はつけるとdvioutでコケたりする(dvipdfmは問題なし)のでつけるべきではない。つけるメリットもない
ChangeLog INDEX