[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(DTPtechNote:1657) [ruby][rb-appscript][MySQL][InDesign CS3]MySQLとの連携
MySQLデータベースに直接アクセスして、rb-appscriptを使って、InDesign CS3で自動組版
ほとんどこむぎさんのパクリともいいます。
ムービーも用意しました。クエリを引数で渡せば引き出してくるデータも自在。
<http://www.seuzo.jp/demo/appscript_db.mov> (mov 5.2MB)
コードはこんなかんじ。
#! /usr/bin/ruby -Ku
require 'rubygems'
require 'mysql'
require 'appscript'
require 'kconv'
my_q = ARGV.shift#コマンド引数からクエリーを得る
InD = Appscript.app('Adobe InDesign CS3')
InD.activate()
my_doc = InD.documents[1]
y1 = 20#初期座標
#データベースへの接続
my_db = Mysql.new('ホスト名',
'ユーザー名',
'パスワード',
'使用データベース名')
#文字化けを直すおまじない
res = my_db.query("SET NAMES binary")
#30代の人をセレクト
#my_db.query('select * from meibo where age >= "30" and age <= "39";') do |res|
my_db.query(my_q) do |res|
res.num_rows().times do
tmp_hash = res.fetch_hash(with_table=false)
#InDesign CS3上の操作
my_textframe = my_doc.make(:new=>:text_frame, :with_properties=>{:visible_bounds=>[y1,20,y1 +10,110]})
my_textframe.contents.set("#{tmp_hash['name']}(#{tmp_hash['sex']}性・#{tmp_hash['age']})".toutf8)
my_textframe.parent_story.applied_paragraph_style.set("name")#段落スタイル「name」を適用
my_textframe2 = my_doc.make(:new=>:text_frame, :with_properties=>{:visible_bounds=>[y1,110,y1 +10,210]})
my_textframe2.contents.set("#{tmp_hash['email']}".toutf8)
my_textframe2.parent_story.applied_paragraph_style.set("email")#段落スタイル「email」を適用
y1 += 10#y1座標を移動
end
end
#dbを切断
my_db.close()