InDesignデータからテキストを抽出する
(コマンドライン)

コマンドラインからInDesignを起動し、引数に指定されたファイルから、テキストを抽出し、標準出力に出力します。


動作環境・注意

InDesign 2.0 以降で動作すると思います(CSしか検証してません)。

InDesign が複数バージョンインストールされている場合は、どのバージョンが起動されるかわかりません(レジストリの値に従います)。特定のバージョンで開くためにはvbsファイルのCreateObject("InDesign.Application")の部分をバージョンに合わせて変更する必要があります。

ファイルを開く際、フォントがないなどの警告がでたまま放っておくとエラーになります。

インラインフレームのテキストは、別に出力されます。

段落毎に出力しています。1回に出力できる文字数に限界があると思うのですが、確認していません。


使用方法

コマンドプロンプト(MS-DOSプロンプト)を起動します。

次のように入力します。

cscript [ドライブ]:[パス]idtxtout.vbs 入力ファイル名のフルパス

例)

c:\>cscript "c:\documents and settings\administrator\デスクトップ\idtxtout.vbs" "c:\documents and settings\administrator\my document\sample.indd"

標準出力に出力されますので、ファイルに落としたい場合はリダイレクトしてください。

例)

c:\>cscript idtxtout.vbs c:\sample.indd > sample.txt

標準入出力をサポートしているプログラムとの連携も可能です。

例)

c:\>cscript idtxtout.vbs c:\sample.indd | grep '/word/' ...


ソース

Dim filename 'As String
Set objArgs = WScript.Arguments
If objArgs.Count = 0 Then
    WScript.Echo "入力ファイル名がありません"
    WScript.Echo ""
    WScript.Echo "cscript [ドライブ]:[パス]idtxtout.vbs 入力ファイル名のフルパス"
    WScript.Quit
End If
filename = objArgs(0)
WScript.Echo filename

Dim app 'As InDesign.Application
Dim doc 'As InDesign.Document
Dim sty 'As InDesign.Story
Set app = CreateObject("InDesign.Application")
Set doc = app.Open(filename)
For i = 1 To doc.Stories.Count
    Set sty = doc.Stories.Item(i)
    For j = 1 To sty.Paragraphs.Count
        WScript.Echo sty.Paragraphs.Item(j).Contents
    Next 'j
Next 'i
doc.Close

[HOME]