Hatena::ブログ(Diary)

名もないテクノ手 このページをアンテナに追加 RSSフィード

EPUB版『InDesign者のための正規表現入門』

InDesignのTips一覧

2009-06-17

[][]pdftkインストール

(2013-12-22 追記)この記事の内容はもう既に古く、野良バイナリも既にありません。最新版のPDFtkのMac版インストーラーは

http://www.pdflabs.com/docs/pdftk-version-history/

にあります。また、バージョン2.02のパッケージを使ってインストールされたパスは/usr/local/bin/pdftkです。

#ここまで追記


PDFをごにょごにょする必要に迫られて、いろいろと調べもの最中です。「PDF Hack」を読みますと、pdftkを使え、と。本家はここですね。

pdftk - the pdf toolkit

ただこのPDF Hackも2005年の日本語訳ですし、pfftkの最終更新が1.41 - November 28, 2006なのが少し気がかりです。

本家リンクにはバイナリもあったんだけれどfor Mac OS 10.3で、ちょっとおっかないですね。自力インストールだとgcjが必要みたい。ハードル高いなあ、と思っていたら10.5用野良バイナリを公開してくださっている方を発見。

Mac OS X 専用バイナリ

当方、Mac OS X 10.5.7ですので、ありがたく使わせていただくことに。Javaアプリケーションをダブルクリックするとターミナルが立ち上がるんですが、いまいち使いづらいので、環境変数PATHに/Applications/pdftk.app/binを追加すると(あるいは/Applications/pdftk.app/bin/pdftkで呼び出すか)ターミナルから普通に使えるようになります。

$ pdftk hoge.pdf cat 2-4 output fuga.pdf

などとするとhoge.pdfの2ページから4ページまでを抽出してfuga.pdfに書出してくれます。ほかにもpdftkを使うとパスワードの設定や、セキュリティなどのPDFタグ情報を読み込んだり、設定できるようです。例えば、PDFタグを確認したいなら、

$ pdftk font_test.pdf dump_data output
InfoKey: Creator
InfoValue: Adobe Illustrator CS4
InfoKey: Title
InfoValue: font_test
InfoKey: Producer
InfoValue: Adobe PDF library 9.00
InfoKey: ModDate
InfoValue: D:20090222230254+09'00'
InfoKey: CreationDate
InfoValue: D:20090222230254+09'00'
PdfID0: 21e52bc11f874b3489a14b242b9462f9
PdfID1: a8b12917cd9c4de4bf7e6d39c7fe57
NumberOfPages: 3

なんて感じになります。

だがしかし! ものすごくよく落ちます3回に1回は異常終了します。Javaのバージョンが合っていないのか、InDesignの書き出すPDFにクセがあるのか...うちだけ?

Acrobatでは詳細なDOMをJavaScriptでも触れるようですが、ExtendScript Toolkitとは勝手が違うのでたいへん戸惑っています。JavaScriptデバッガにはDOM辞書ないのか... Adobeにはものすごく重いオンラインリファレンスがあるんだが、これを見ろってことなのか。あー、謎だらけ。


参考

pdftk のインストール(Mac OS X 10.4 Tiger)

PDF Hacks ―文書作成、管理、活用のための達人テクニック

PDF Hacks ―文書作成、管理、活用のための達人テクニック

2009-05-19

[][]SayKanaを使ってInDesignで読み上げテスト

Mac版音声合成ソフト「SayKana」がリリースされましたので使ってみました。

SayKana - Mac用音声合成プログラム

$ saykana "わたしのなまえはいちかわせうぞーです"

おー、喋るしゃべる。たのしい。

mecabを介して、仮名漢字まじり文を試してみます。

$ echo "私の名前は市川せうぞーです。" | mecab -Oyomi | saykana -f -

楽しいなあ...で終わってしまうと、いかにも遊んでる風なので、InDesignにこじつけてみます。むりむり。読み上げ校正とかが必要な仕事に縁がないのだけど...^^

tell application "Adobe InDesign CS4"
	tell document 1
		set str to contents of selection
		set str to do shell script "echo " & quoted form of str & " | tr \"[\\']\" ' '"--ここはもうちょっと考える必要があるかも
		do shell script "echo " & quoted form of str & " | /usr/local/bin/mecab -Oyomi | /usr/local/bin/saykana -f -"
	end tell
end tell

楽しいので、動画age。

D

2008-11-09

[][][][]XMPやEXIFをrubyで読み書きする

妄想をしていても仕方ないんで、いまあるものでXMPやEXIFを読み書きしてみたい。rubyから使えたら便利っぽい。予習にもなる(かもしれない)メモ。

google:ruby xmpでぐぐるとChilkat Ruby XMP Libraryなんてのに行き着くけれど、$289の売り物っぽいので、遊び用途には向かない。RAAで検索したら、

にヒットしました。なかなかよさげ。これ、要するに

っていうコマンドラインアプリケーションのラッパーになっている風。さっそくExifToolからインストールしてみる。Mac OS X用のパッケージとインストール方法が記されている。ライセンスはperlライセンス。

インストールといっても、ダウンロードしたパッケージをダブルクリックするだけ。あー便利な世の中。

/usr/binにlibディレクトリが作られていて、ちょっといやんな感じ。中を覗くとperl用モジュールっぽい。アンインストールするときは、この「/usr/bin/lib/」と「/usr/bin/exiftool」(本体)を削除すればいいのね。

$ exiftool --help

とすると長々とヘルプが現れる(たいていこんな感じ)。

ExifToolでの読み書き

ためしにPhotoshopのサンプル画像「アイランドガール.jpg」(island_girl.jpgにリネームした)のexif情報を表示してみよう。

$ exiftool island_girl.jpg 

とするだけで以下の情報が出力された。

ExifTool Version Number         : 7.52
File Name                       : island_girl.jpg
Directory                       : .
File Size                       : 1223 kB
File Modification Date/Time     : 2007:10:29 02:16:08+09:00
File Type                       : JPEG
MIME Type                       : image/jpeg
Exif Byte Order                 : Little-endian (Intel, II)
Image Description               : I think I'll go canoeing
Orientation                     : Horizontal (normal)
X Resolution                    : 72
Y Resolution                    : 72
Resolution Unit                 : inches
Y Cb Cr Positioning             : Co-sited
Exposure Time                   : 1/400
F Number                        : 7.1
Exposure Program                : Program AE
ISO                             : 100
Exif Version                    : 0210
Date/Time Original              : 2002:12:16 14:20:56
Create Date                     : 2002:12:16 14:20:56
Components Configuration        : YCbCr
Compressed Bits Per Pixel       : 2
Exposure Compensation           : 0
Max Aperture Value              : 2.8
Metering Mode                   : Multi-segment
Light Source                    : Unknown
Flash                           : No Flash
Focal Length                    : 13.6 mm
Warning                         : Invalid PrintIM header
Flashpix Version                : 0100
Color Space                     : sRGB
Exif Image Width                : 2048
Exif Image Height               : 1536
Interoperability Index          : R98 - DCF basic file (sRGB)
Interoperability Version        : 0100
File Source                     : Digital Camera
Scene Type                      : Directly photographed
Compression                     : JPEG (old-style)
Make                            : SONY
Camera Model Name               : CYBERSHOT
Modify Date                     : 2002:12:16 14:20:56
Thumbnail Offset                : 856
Thumbnail Length                : 3648
Image Width                     : 2048
Image Height                    : 1536
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:2 (2 1)
Aperture                        : 7.1
Image Size                      : 2048x1536
Shutter Speed                   : 1/400
Thumbnail Image                 : (Binary data 3648 bytes, use -b option to extract)
Focal Length                    : 13.6 mm
Light Value                     : 14.3

特定の情報だけを得るにはどうしたらいいか。カメラメーカー名だけを得たければ、

$ exiftool -s -Make island_girl.jpg

とすれば、

Make                            : SONY

と出力される。モデルの「値だけ」を得たければ、

$ exiftool -s -s -s  -Model island_girl.jpg

とすれば、(「Camera Model Name」タグが「CameraModelName」ではなくて「Model」と略されるのか不明だけど)

CYBERSHOT

と出力される。「-s -s」がスペーシングをなくし、「-s -s -s」で値だけという意味みたい。

では、今度はEXIF情報を書き込んでみる。緯度と経度を書き込むには

$ exiftool -GPSLatitude="35.684675" -GPSLongitude="139.755495" -GPSLatitudeRef="North" -GPSLongitudeRef="East" island_girl.jpg 

こんな感じか。Photoshopで確認すると、確かに書き込まれている。ちなみに、上記のコマンドを実行すると、勝手にオリジナルファイル(island_girl.jpg_original)が作成されるが、不要な場合は-overwrite_originalオプションをつけるといい。

f:id:seuzo:20081108173353p:image

mini_exiftoolの読み書き

さて、ようやく本丸。というか、たぶん、exiftoolそのものはPerlでの使用を前提としているみたい。Ruby厨ってわけじゃないけれど、なにかと便利な場面があるかもしれないってことで。さっそくインストール。READMEに書いてある通りなんだけど、

$sudo gem install mini_exiftool

とするだけ。あとはTutorialの引き写しだけれど、撮影日を得たいなら

require 'rubygems'
require 'mini_exiftool'

photo = MiniExiftool.new 'island_girl.jpg'
puts photo['DateTimeOriginal']

とすればいい。結果は

Mon Dec 16 14:20:56 +0900 2002

こんどは「island'」「girl」「sea」って3つのキーワードを追加してみる。

require 'rubygems'
require 'mini_exiftool'

photo = MiniExiftool.new 'island_girl.jpg'
photo.keywords = ['island', 'girl', 'sea']
photo.save

f:id:seuzo:20081109003257p:image

なぜかわからないけれど、日本語が通らない。なんらかの処理が必要なんだろうか。謎。

AppleScriptで読み書きする

ちょっと見つけたので、参考までに追記。Image Eventsを使う方法。

Extracting Metadata

AppleScript & EXIF data

2008-10-18

[][][]ターミナル<->Finderのやりとり

ターミナルでごにょごにょしているとき、カレントディレクトリをFinderで表示したい時ってありませんか? MacOSX固有のコマンドになってしまいますが、こんな感じでさくっとフォルダが開きます。

$ open `pwd`

ちなみに、openコマンドはアプリケーションを指定してファイルを開くことも可能です。MacWiki - コマンド/openが詳しいかな。この説明はやや古いみたいなので、manページも参照してください。

fcd

上記のような場合の逆として、Finder上でごにょごにょしているときに、最前面のフォルダーをターミナルのカレントディレクトリにしたいときがあります。わたしはいままで、ターミナル上で「cd 」とタイプして、Finderからドラッグ&ドロップしていました。

だがしかし、fcdを導入すればターミナル上で「fcd」とタイプするだけで、最前面のフォルダーをターミナルのカレントディレクトリになります。おー、便利。

f:id:seuzo:20081018160801p:image

f:id:seuzo:20081018160802p:image

fcdはScript factoryのTetsuro KURITAさんがターミナル用に書かれたスクリプトです。

インストール、使い方、ダウンロードはこちらから。

http://www.script-factory.net/software/terminal/fcd/index.html

2008-03-26

[]タブ区切りでソート

Tab区切りのテキストの2カラム目をsortコマンドで処理したいとき、

$ sort -k 2

などとすると1コラム目にスペースが混じっているとうまくいかない。デフォルトでwhite spaceとしてtabもspaceも同一視されてしまうから。

$ sort -t "\t" -k 2

もエラーになる。

タブ文字を(ターミナル上で)入力しようとしても、タブキーが入力補完に割り当てられているため、うまく入力できない。

コピー&ペーストしてもタブ文字は無視されてしまう。あらら。

こんなときは、ターミナル上で「sort -t ’」まで入力しCtrl+vキーで入力モードを変えてタブ文字を入力できる。

$ sort -t '	' -k 2

とする。

AppleSciptのdo shell scriptなら

do shell script "echo " & quoted form of str & "| sort -t '" & tab & "' -k 2"

と書いてもいいです。


いつか書いたかもしれないけれど、sortコマンドはMacOS X 10.4系と10.5系(sort (GNU coreutils) 5.93)ではバージョンが違うので、気をつけた方がいいです。

使えないオプションもけっこうあるし、今回のような場合「--field-separator=SEP」みたいな名前指定は10.4系ではできない。カラム指定の書き方もちょっと違う。