5 件 見つかりました。

CHALOW Search - hiChangeLog ChangeLog INDEX

あふの表示ディレクトリをEshellで開く方法 [emacs][Eshell][シェル][VBScript(WSH)]

シェル環境としてはMSYSのbashをコマンドプロンプトで開くのがお気に入りであるが、日本語に難があるのが玉にキズ。Eshell => MSYS と辿ってきたのだが、日本語対策としてEshellも考え直してみることにした。

私がシェル環境に求めるものは、コピペ環境、キーバインドなどがあるが、実は第一条件はあふの表示ディレクトリに素早く飛べることである。これができなければ試す気にもならない。というわけでその方法についてメモ。

まずはEshellで指定したディレクトリに飛ぶ関数を作っておく。(Emacs - Hirotake Itoh's memo by PukiWiki

(defun eshell-in-the-directory (targetdir)
  (interactive)
  (let ((dir default-directory))
    (eshell)
    (cd targetdir)
    (eshell-interactive-print (concat "cd " targetdir "\n"))
    (eshell-emit-prompt)
    (cd dir)
    (end-of-buffer)
    ))
以上の関数を外部から呼出せればよい。NTEmacs 22.0.90を用いているのだが、付属のemacsclientwを使うことを考える。gnuclientと違ってemacsウィンドウをアクティブ(フォアグラウンド)にするオプションが無いので、自分でそこまで面倒を見る必要がある。この条件からVBScript(WSH)を用いるのが便利と思う。([2007-4-17-1])以下で、ダブルクォーテーションが2連続な場所は、ダブルクォーテーションで囲まれた中で自分自身をエスケープしているという意味(バックスラッシュではない)。
Option Explicit
''' パスの準備
Dim strArg      ' 引数情報
' WScript.Arguments.Count が引数の数

Dim path
path = WScript.Arguments(0)
path = Replace(path, "\", "/")

''' EShellの起動

Dim objWshShell     ' WshShell オブジェクト
Dim strCmdLine      ' 実行するコマンド

Set objWshShell = WScript.CreateObject("WScript.Shell")
If Err.Number = 0 Then
    strCmdLine = "C:\programs\emacs-22.0.90\22.0.90\bin\emacsclientw.exe -e ""(eshell-in-the-directory \""" + path + "\"")"" -n"
    objWshShell.Exec(strCmdLine)
    objWshShell.AppActivate("emacs@ITOH")
    If Err.Number = 0 Then
        ' successful
    Else
        msgbox "error"
    End If
Else
    msgbox "エラー: " & Err.Description
End If

Set objWshShell = Nothing

以上をEshell.vbsなどと保存しておき、あふから
wscript C:\programs\afx\Eshell.vbs $P
などとパスを引数として渡して起動してやれば、あふの表示ディレクトリをEshellで開くことができる。

ここまでやって、eshellじゃなくってshellだけで充分じゃないかと思うようになったが、試すのはまた後日。

ウィンドウをアクティブ(フォアグラウンド)にするにはAppActivate [VBScript(WSH)]

タイトルの通り。前方、後方一致するウィンドウタイトルを指定する。以下は http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/object/wshshell.htm にある記述とほぼ同一

Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.AppActivate("MyWindowTitle")
まあ以下でもよい。
WScript.CreateObject("WScript.Shell").AppActivate("MyWindowTitle")

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

PDFのサムネール画像の作成方法 [PDF][COM][VBScript(WSH)][画像ファイル]

Acrobatの機能として、ページのイメージのサムネール画像の作成・埋め込みがサポートされているが、単体のラスタ画像ファイルでこれを作成したい場合にはどうすればよいか。

外部プログラムでこれらを行うものがいくつかある。

Xpdfに付属する pdftoppm でPDFのページイメージをppmにできる。

pdftoppm.exe -f 3 -l 5 adachi.pdf -r 50 myimg
として、3ページから5ページの画像が50dpiで myimg-000003.ppm とかの名前で出力される。ppmはそれなりに一般的な画像形式のようだが手元のwwwブラウザでは表示できなかった。

またImageMagickの convert でも
convert.exe -resample 50x50% mydoc.pdf hoge.png
などとして全ページのイメージを出力できる。(指定したページのみの場合はどうするのだろう?)

Ghostscriptの使用が多分最も正統派なのだろうが、それはPDF Hacksを参照。

手元のAcrobat 7 Standardはアドバンスドメニューから「すべての画像を書き出し」というメニューがあった。

またAcrobatがあればCOM経由で以下のようにもできる。拡張子をvbsなどとして保存し、ダブルクリックすれば開いてる文書の最初のページがクリップボードにコピーされる。
Dim app, avdoc, pddoc, pdpage, point, rect
Set app = CreateObject("AcroExch.App")
Set avdoc = app.GetActiveDoc
Set pddoc = avdoc.GetPDDoc
Set pdpage = pddoc.AcquirePage(0)
Set point = pdpage.GetSize()
Set rect = CreateObject("AcroExch.Rect")
rect.Left = 0
rect.Right = point.X
rect.Top = 0
rect.Bottom = point.Y
pdpage.CopyToClipboard rect, 0, 0, 100

こんなところか?

OLE(COM)によるAcrobatの操作を介したPDFのリンク作成は無理っぽい [COM][PDF][Windowsプログラミング][VBScript(WSH)]

AcrobatにはCOMインターフェースが備わっており、他のプログラムから操作ができる。で、PDFのリンクをいじろうと思ったけどできなかった。全機能が利用できると思ったが、そうでもないみたい。

Acrobat Developer Center - Interapplication Communication から他プログラムからの操作のための技術文書が入手できる。でリンクツールに関連するあたりを見てみるとAcroExch.PDAnnotなるオブジェクトを発見したが、これにリンク先を指定・取得するメソッドが無い。AcroExch.PDDoc.AddNewAnnotメソッドを見てみると、subtypeは(Linkではなく)Textでないといけないと書いてある。つまりOLE経由ではリンクの操作はできないみたいなのである。一方でApple eventの方にはannotationクラスできちんとリンク周りのメソッドが用意されている。ムカツク。

ちなみにPDAnnotは以下のようにして取得できる。

Dim app
Set app = CreateObject("AcroExch.App")
Dim avdoc, pddoc, pdpage, pdannot
Set avdoc = app.GetActiveDoc
Set pddoc = avdoc.GetPDDoc
Set pdpage = pddoc.AcquirePage(0)
Set pdannot = pdpage.GetAnnot(0)
msgbox pdannot.GetContents
msgbox pdannot.GetTitle
msgbox pdannot.GetColor
msgbox pdannot.GetSubtype

ChangeLog INDEX
Powered by chalow