7 件 見つかりました。

CHALOW Search - hiChangeLog ChangeLog INDEX

Illustrator CSで作成した斜線柄スウォッチを含むPDFをAcrobat 7.0.9 Standardで拡大表示させるとAcrobatがクラッシュする場合があった [PDF][Illustrator]

タイトルの通り。Illustratorが悪いのかAcrobatが悪いのかはわからないが、AcrobatがクラッシュするようなPDF中の斜線柄のスウォッチをただの色に変えると現象が生じなくなったので、スウォッチがクラッシュに一役買っていることは間違いないだろう。なんでそうなる場合とそうならない場合があるのだろう?今時間がないのでこれ以上のトラックはやめておく。

Illustratorにフォントの種類や大きさを指定した文字列オブジェクトを挿入する [Illustrator][COM][VBScript(WSH)]

[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にペーストを行うため、PDF形式のデータをクリップボードに用意する [PDF][Illustrator][Windowsプログラミング]

私はプレゼン用スライドなど諸書類は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;
}

IllustratorでPDFを作る際にリンクを貼るためにはどうすれば良いだろう? [Illustrator][PDF][Windowsプログラミング]

[2007-01-18-01][2007-01-19-01]に書いたがやっぱりリンク付きPDFは便利(プレゼンなどで)。
Javascriptでもいじれるみたいだが、残念ながら上書きのみのようで、完全に制御するにはSDKでプラグイン作るレベルまで行かないとダメのようだ。

しかし実際にリンクを貼る作業をIllustrator上でどうやって実現すればいいのだろう?
現在の妄想:

__HILINK__(ファイル名、しおり名)
といったテキストオブジェクトを、ファイル名やしおり名へのリンクに変換するようにすれば良いのでは?ととりあえず思ってる。クリッカブルな領域は、縦横比に捕われず自由変形できるテキストオブジェクトが占める領域で指定するようにすればどうだろう。

作成途中でどこにどんなページが来るかわかりっこないので、リンク先はファイル名で指定するしかない。で、PDFを連結する際に元ファイル名がそのページのしおりになるようにすれば、このリンクが有効となる。

リンクの実装と管理、PDF連結、サムネイル表示を一手に引き受けるプログラムを用意すればファイル名を考える煩わしさから解放されるけど、ちょっとしんどそう。ただ、画像データに対しいちいちファイル名を考えて与え、管理もファイル名で行うのはいただけないと日頃思っているので、余裕があればなんとかしたい。

TeXの数式をGhostscriptでアウトライン化する [TeX][Illustrator]

以下は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

TeXソースの記述では特に何も気をつける所は無い。

\documentclass{article}
\begin{document}

\begin{eqnarray}
z^2 = x^2 + y^2
\end{eqnarray}

\end{document}

PDFのサムネール表示とその画像の解像度について [PDF][Illustrator][画像ファイル]

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キャビネットの表示PDFキャビネットの表示
Acrobat 7 Standardによる埋め込みサムネール画像Acrobat 7 Standardによる埋め込みサムネール画像
Illustrator CSによる埋め込みサムネール画像Illustrator CSによる埋め込みサムネール画像


画像ファイルを指定した埋め込みが最もflexibleと思うのだが、AcrobatのメニューのみならずAPI(もちろんJavaScript、COMインターフェースも)にもそういったものは無かった。まあAPIの方には PDDocCreateThumbs なる関数が用意されているのでこれを駆使すれば同等のことができると思うのだけれど。

ならばサムネール画像を埋め込むソフトはあるかと思いきや、以下しか発見できなかった。複数ページに一気に埋め込むのは面倒な感じである。
http://www.coolpdf.com/pdfthumbnail.html

調べてる最中に、いっそ自前でこういうソフトを作ってしまおうかとも考えたが、PDFの仕様を理解する時間がとれないのでとりあえず保留。

EPS画像をサムネイル表示するためにはどうすればよいか [TeX][Illustrator][Igor Pro][画像ファイル]

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
Powered by chalow