[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()