Webの戸籍謄本

Standard
Webの戸籍謄本

女の人と初めて会うときは、第二印象が決まる最初の10秒が大事だそうですね。
 
 
Webの戸籍謄本ことFacebookに登録しました。ユーザ数を考えると避けては通れないですね。
http://www.facebook.com/bugcloud
 
友達欲しいよウワウワー。リクエストしてくださいウガウガー
 
 
@、今週はtwitterで知り合ったWebディレクターのお仕事してる方と会ってきました。一緒に仕事してる人達だと意外と聞けなかったりする、管理する側とか要求出す側の視点からの話とか聞けたのでよかったです。あと、twitterの使い方っていうか、とらえ方っていうか、そんな感じなものが自分とは違っておもしろかったです。自分にない価値観に触れるのはおもしろいですね!思えば、昔は「ロックじゃねー」みたいな、自分とマッチするもの以外を拒絶する謎の感情があったんですが、いつからか、もっといろんな価値観に触れたいと思うようになりました。やっぱり、インターネット素晴らしいですね!

findme.cloud作り中なのである。

Standard
findme.cloud作り中なのである。

それにしても全然進まない。それもこれもボブっ娘が後ろで寝ていてくれないせいである。破壊力強めの刺激ください。
 
 
GPS使ったWebサービス作ってみたい症候群はあいかわらず治らないのでこの週末も少しだけ進めた。コンセプトは「近くて遠いの人とつながろう」っていう方向で固まったのです。知ってるねん、オレ、知ってるねん!出会い系と紙一重だけど「つながる」って言葉とかけっこうポジティブにとらえてもらえること知ってるねん!これから作ってこうとしてる機能を簡単に説明すると、「登録」と「検索」の2機能があって、「登録」は携帯から今の位置情報と自分の情報を登録。緯度・経度+名前とかtwitterIDとか画像とか。「検索」はいま自分がいる場所の半径○kmで「登録」した人を探すっていう機能。職場とかよく遊ぶとことかで使って、何回か顔みてるはずなのに一生他人の人と他人じゃなくなれるようなサービスを狙っている。「出会いがない」なんて言わせないって広告が出せるね。「検索」を表す言葉はfindでいこうと思うけど、「登録」を表す言葉が見つからない。”cloud”にしてみてるけどいい感じじゃなさすぎる。。自分の目の前にあるエア掲示板に書き込むようなイメージの言葉、誰か作ってください。
 
(モバイル専用)

http://bugcloud.railsplayground.net/

 
QR

QR

 
 
携帯で取得した位置情報の精度がどんなもんかっていうの調べないといけないし、Google Maps APIで逆ジオコーディングしたときに変な住所が返ってきてしまうことがあるらしいので、テスト要因募集中です。報酬はうまい棒かチョコバットか蒲焼きさん太郎から選べます。
 
Google Maps APIで逆ジオコーディングやってみたものの、住所取得できないことがあるのかとかAddressDetails要素の属性Accuracyが”9″で返ってきたときってどんな感じなのかとかわからないことが多い。まーとりあえずメモ。いまのところ、jpmobile使って取得した緯度と経度を使って住所を取ってくるメソッドをコントローラーの中に書いてる。
 

require 'open-uri'
require 'nkf'
require 'rexml/document'

def getAreaName(lat, lon)
  url = "http://maps.google.com/maps/geo?output=xml&oe=utf-8&ll=#{lat}%2C#{lon}&hl=ja&key=#{Key}"
  doc = REXML::Document.new(open(url))
  if doc.elements["/kml/Response/Status/code"].text != "200"
    return 'error'
  end
  return doc.elements['/kml/Response/Placemark/address'].text
end

 
 
来週は自分の半径○km以内の人を検索するっていう機能を実装する!ロゴはこれで”findme.cloud”と読ませようという横着さです。

英語DM=SPAM=悪 みたいなノリは悲しいので

Standard
英語DM=SPAM=悪 みたいなノリは悲しいので

フラれたと見せかけて持ちこたえてます。こんばんわ。
 
この週末にtwitterでこんなDMを3件ぐらい受信しました。

  • Hey, I just added you to my band in 140 King of Pop. It is a tribute game to Michael Jackson. You should accept my invitation! Click here:http://www.140kingofpop.com/?platform=twitter&refuid=47113758&source=friends_invite_f

 
 
そう言えばわきげさんがなんかやってたなと思ってボクはこのリンクをクリックして140KingOfPopというページに飛びました。どうやらマイケルジャクソンをテーマにしたゲームみたいです。しかもtwitterを使ったゲームというなんとも興味深いものでした。これはやってみないとってことで140KingOfPopからボクのアカウントにOAuthアクセスを許可しました。
 
で、その日はなんもやんなくて次の日にtwitterにログインしたら普段まったくこないDMがやたらたくさん来てました。ほとんどが日本人のフォロワーの方からでその内容が、「あなたのアカウントからスパムDMが送られてきました。アカウントのっとられてませんか?」とか「スパムDM送られてきたから対処してください」とかそんなんでした。他にも外国のフォロワーからもDMきてましたが、そっちは「ありがとうありがとう、いま仕事中だから帰ったらやってみるよ」とかそんな感じでした。ん?って感じだったんですが、DMの送信の方を見たら、フォロワー全員に140KingOfPopのinvitationDMが飛んでました。あらあらって感じだったんですが、DM送ってくれたフォロワーの方からは若干「スパム送んなよ!」みたいな空気が感じられたので、理由を説明して、すみませんっていうDMを送りました。
 
だから何?っていえばそれまでの話なんですが、ボクが思ったのは、「英語DM = SPAM = 悪」みたいな式が成り立ってるんじゃないかってこと。ただ英語でURLリンク付きのメッセージってだけでスパムSPAMって騒ぐのは少々稚拙じゃないかと。正直、日本語だったらこんなに反応しないし、自分に必要なかったらすんなりスルーしてくれるんじゃないかと思いました。日本人のtwitterユーザが増えるのは全然いいことだし、日本人同士で仲良くやるのはとてもいいことだと思います。でも時々タイムラインを眺めてて、海外の人に気軽に声かけてる日本人ユーザは少ないなと思います。なんかのハッシュタグが盛り上がってて、海外ユーザがそれに反応してなんかつぶやいても、それに英語でからんでいく人って少なくないですか?逆になんか入ってくるなよ的な空気が漂うことすらある気がします。twitterのいいところは発言を恐れなくていいところじゃなかったの?っていう気持ちになります。英語間違っててもきっと誰も気にしないよ。昔セカンドライフやってたころもこんなことあったなー。テキスト中心のコミュニケーションだから全然あせることもないし、辞書でもひきながら単語並べればそれなりに伝わると思う。困ったら”lol”って言っとけばいいし。完全に使い方は人それぞれなのでウダウダ言ってんなよって話ですが、ボクはタイムラインにいろんな言葉があって欲しいし、世界中の人のtweetを見ていろんな”今”を感じたいのでだれかれ構わずfollowします。英語間違ってても、つか英語すら通じなくてもReplyもRTもします。11.24「followJPじゃなくてfollowWORLDにしろよ」宣言です。
 
 

メール送ってみた

1回もプレイしてないんだけど、140KingOfPop が悪者SPAM業者のままじゃなんか悔しいので開発者?のplaymobsterworld@gmail.com宛てに↓みたいなメールを送りました。

  • Hi, my name is bugcloud in japan. Twitter screen name is too. @bugcloud
  • When I added aplication connection to my twitter account for 140 King Of Pop,
  • the invitation DM has send to all my followers without my confirmation.
  • So my followers send me DM they said ” Don’t send me SPAM!! “
  •  

  • I want to change my setting I don’t send some DMs to my followers.
  • And how can I add 140 King Of Pop without sending DM?
  •  

  • I think 140 King Of Pop is so nice game^^
  • But many japanese think English DMs are SPAM.

 
 
言いたかったのはこんなこと。ボクの英語力じゃこれがマックスだった。

  • こんちわ、bugcloudといいます。日本人です。twitterのアカウントもbugcloudです
  • 140KingOfPopをボクのtwitterアカウントに追加したときに、確認なしでフォロワー全員に招待DMが飛んじゃったよ
  • で、フォロワーから「スパム送んじゃねーよ!」ってDMもらっちゃった。
  • フォロワーにDM送らないようにセッティングを変えたいんだけどどうすればいい?
  • あと、招待DMの送信なしで140KingOfPopを追加するにはどうすればいい?
  • 140KingOfPopはとってもいいゲームだと思うよ^^
  • でも日本人には英語DMをSPAMだと思っちゃう人が多いんだ。

 
 
で、一日後、返信がきました。
 

  • Hi bugcloud,
  • Thanks for contacting us and being a fan.
  • We have disabled all outgoing DMs for your account.
  • Thanks for playing!
  • Best,
  • 140KingOfPop

 
 

  • ヨーメン、bugcloud
  • コンタクトありがとう。気に入ってくれたんだね。
  • ユーのアカウントからDMは全部飛ばさないようにしたよ
  • 140KingOfPopをプレイしてくれてありがとサンクス!

 
ということで、ちゃんと対応してくれるし、いいやつじゃん!Mobster World!!
“And how can I add 140 King Of Pop without sending DM?”の回答がないから、たぶんDM送信なしで140KingOfPopの追加はできないんだけど、日本でいうところの”迷惑メール”という意味のSPAM業者じゃ全然ありません!
あー満足した。
 
 

ディベロッパーの端くれとして

ボクも全然へたれながら将来は世界の誰かを豊かに出来るようなWEB上のサービスを作りたいと思ってる一人として、自分は全然当たり前にやったことでも、むしろ良かれと思って追加した機能でも、煙たがられることだってあるんだなと。お国柄とか文化の違いとか、世界を視野に入れるんだったら考えるべきことは山ほどあるんだなーと思いました。おすまい
 
 
追記
そういえばこの頃知らなかったtwitterのDMの機能があったので追記。うわDM送ってしまった!って時は自分の送信DMを消せば、相手の受信DMを消えるらしいよ。イカしたテーブル設計!

夏希先輩役は仲里依紗にお願いしたかった

Standard
夏希先輩役は仲里依紗にお願いしたかった

仲里依紗がデブのおばさん役なのはムッチリ体系だからですか?
 
昨日サマーウォーズみてきました。普段ネットをあまり使わない人は全然おもしろくないだろうなと思いました。”アバター”とか”コミュ”とかって言葉に抵抗がない人とか、ネットとリアルがシームレスに繋がる世界を信じるとこができる人とかはグッとくるところがある映画だと思います。泣き所のいくつかは少し子供っぽいけど。ボクは完全後者なので「ドイツ人少年が―」のくだりで泣きました。
 
 
サマーウォーズの世界の”OZ”ぐらいメタバースが浸透する時代はくるんでしょうか?観てておもしろいなと思ったところは、出てくる人たちが”OZ”(作品中の仮想世界)に接続するときに使ってる端末がほんといろいろってところ。PC、携帯、DS、テレビ、家の電話機…. メタバースが浸透するために越えないといけない壁がそこだと思った。セカンドライフは間違いなくいい線いってたんだけど、ユーザに要求してるスペックが高すぎた。(日本では)ユーザの多くがハードゲーマーとかグラフィック系やIT系の仕事やってる人とかだったんじゃないかと思います。ユーザがそんな人ばっかりだから、ゲーマーにしてみればゴール(クリアすべきもの)のないセカンドライフには魅力が感じられなかったし、おしゃれに貪欲でセカンドライフの中で自分のデザインしたものを売ってるようなデザイナーたちは、ダサいアバターの人たちとコミュニケーションをとることに嫌悪感を感じてごく小さいコミュニティーしか形成しなかったっていうのが日本でセカンドライフが一瞬しか流行らなかった原因なのかなーと思います。コミュニティーの発達なくしてメタバースの発展は絶対にない。これからもっともっといろんな技術がオープンになって、いろんな機器からネットワークに接続することが可能になって、さらにキーボードとかマウスとか以外にもいろんなデバイスでコンピュータが操作できるようになってくと”OZ”も実現できるんだろうと。自分がじーさんになったころには、海外に住んでる孫たちとネットの世界で遊べるようになるといいな。「じいちゃんのアバはちんちんデカくてかっちょええやろ?」とか言いたい。
 
そんな未来を作るプロジェクトに末端でもいいから参加したいですね。
 
 
 
P.S.
日本のサマーウォーズは日本らしい結果で決まりましたね。「どこに投票していいかわからないけど、なんか流れ的にココっぽい」っていう日本人らしさが民主党圧勝っていう結果にあわわれてるような気がするようなしないような。ボクが住んでる神奈川6区の創価地盤の厚さがおもしろいなー
 
result

result

Ruby on Railsで日本語PDF

Standard
Ruby on Railsで日本語PDF

先月で契約が切れた派遣のお姉さんが恋しくてたまらない今日このごろ。巨乳という華を職場に返してもらいたい。
 
昨日からRailsで作ったWebアプリでPDF形式の出力はどうやるかっつーので右往左往してます。”ruby pdf 出力”とかでグーグル教授にたずねてみると、使えるライブラリがいろいろでてくるけど、pdf-writerらへんが多い気がする。で、http://d.hatena.ne.jp/octech/20070904 とか http://youichi-kato.cocolog-nifty.com/blog/2007/10/ruby_pdf_64d5.html とかを参考にpdf-writer を使ってみた。日本語パッチなんかも公開されてて普通に表示する分には問題なさそうなんだけれども、”―”(全角ダッシュ)とか”①”(”まるいち”とかの特殊文字)とかを出力しようとすると、バケたり途中で落ちるのか文字が出力されなかったりする。そんな文字使うなよって言えれば一瞬で片付く話なんだけど、まーそう言えるわけもないので他の手段を探してみる。

行き着いた先が “librsvg” っていうパッケージ。windowsにもインストールできる。http://kyle-in-jp.blogspot.com/2008/10/librsvgwindowssvgpng.html とか http://web.fpso.jp/article.php/20080101013132688 とかを参考にしてrsvgコマンドが使えるようになった。で、あとはrubyからsvgファイルを書き出してやればいいんだろうと思う。中身はxmlなのでrexmlを調べながらゴニョゴニョしてみた。

まず、テンプレートファイルを作る。Inkscapeってツールでこんな感じでテンプレートを作成。履歴書を作ってみよう。

Inkscape.jpg

Inkscape

GIMPに似てる。保存されるsvgファイルをfirefoxで開くとInkscapeで作成したのと同じ感じで表示される。ちなみにieだと↓
 
ie.jpg

ie

 
こういうとこが嫌い。プラグイン入れればPDFみたいな感じで表示できるらしい。
 
 
出力されたsvgファイルにrsvg-convertコマンドを実行するとpdfファイルに変換できる。

rsvg-convert hoge.svg -f pdf -o hoge.pdf

変換されたPDFはInkscapeの画面とまったく同じこの時点では。
 
svgファイルはテンプレートにしたいのでtext要素とtspan要素を全部削除してみた。↓みたいにして保存。
 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="210mm"
height="297mm"
id="svg2383"
sodipodi:version="0.32"
inkscape:version="0.46"
sodipodi:docname="templete.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs3">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective2389" />
<inkscape:perspective
id="perspective2550"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 526.18109 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2567"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 526.18109 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2429"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 526.18109 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2431"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 526.18109 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2435"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 526.18109 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
inkscape:document-units="mm"
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.49497475"
inkscape:cx="401.35844"
inkscape:cy="623.80647"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="974"
inkscape:window-height="666"
inkscape:window-x="439"
inkscape:window-y="-1" />
<metadata
id="metadata4">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<text
xml:space="preserve"
style="font-size:65.77341461px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic"
x="22.938391"
y="83.420784"
id="text2403"
sodipodi:linespacing="125%"
transform="scale(1.0435025,0.9583111)"><tspan
sodipodi:role="line"
id="tspan2405"
x="22.938391"
y="83.420784">履歴書</tspan></text>
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.89128971px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 26.263966,111.91017 L 458.60926,111.91017"
id="path2433" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.60533047px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 30.26396,1010.1662 L 30.26396,113.05536"
id="path2435" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.92985797px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 456.58895,357.69693 L 456.58895,112.60063"
id="path2439" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.92985797px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 455.2591,355.33662 L 700.3554,355.33662"
id="path2441" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.78000402px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 699.02556,1010.8765 L 699.02556,358.49737"
id="path2443" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.8522172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 27.555326,1011.9764 L 699.7951,1011.9764"
id="path2445" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 32.324881,151.30611 L 454.56865,151.30611"
id="path2447" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 349.51278,151.30611 L 349.51278,260.40259"
id="path2451" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 454.56865,260.40259 L 30.304576,260.40259"
id="path2453" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 454.56865,353.33662 L 30.304576,353.33662"
id="path2455" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 242.43661,260.40259 L 242.43661,353.33662"
id="path2457" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 30.304576,448.29096 L 697.00526,448.29096"
id="path2459" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.89128971px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 30.304576,558.39759 L 697.00526,558.39759"
id="path2463" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 30.304576,617.99659 L 697.00526,617.99659"
id="path2465" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 34.345184,678.64635 L 701.04587,678.64635"
id="path2467" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 30.284265,737.19459 L 696.98496,737.19459"
id="path2469" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 28.284264,793.76313 L 694.98496,793.76313"
id="path2471" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 28.284263,850.33167 L 694.98496,850.33167"
id="path2473" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 28.284262,910.94083 L 694.98496,910.94083"
id="path2475" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 30.304567,965.52968 L 697.00526,965.52968"
id="path2477" />
<image
y="77.468559"
x="475.68542"
id="image2437"
height="256.77161"
width="238.58885"
sodipodi:absref="D:\ICF_AutoCapsule_disabled\temptemptemp\chameleon.jpg"
xlink:href="chameleon.jpg" />
</g>
</svg>

 
 
このテンプレートをrubyでパースしてtext要素とtspan要素を追加してやろうっていう作戦。とりあえずrailsアプリケーションを作成してscaffoldでまー適当に。ちなみにrails2.3.2。ここでは

script/generate scaffold user name:string hurigana:string sex:integer birthday:date honseki:string address:string url:string keireki1:string keireki2:string keireki3:string keireki4:string keireki5:string

てな感じ。
 
ほいでshow.html.erb にアクション呼び出しを追加。

<%= link_to 'PDF', :controller=>'users', :action=>'outpdf', :id=>@user.id %> 

 
browser.jpg

show.html.erb

 
users_controller にpdfを出力するアクションを追加。とりあえず今はsvgファイルを出力するだけにしとく。

    def outpdf
    @user = User.find(params[:id])

    require "rexml/document"

    now_time = Time.now.strftime("%Y%m%d_%H%M%S")
    out_file_name = "pdf/test"+ now_time +".svg"
    out_doc = REXML::Document.new(open('pdf/templete.svg'))
    
      element1 = REXML::Element.new "text"
      element1.attributes["xml:space"] = "preserve"
      element1.attributes["style"] = "font-size:58.93929672px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic"
      element1.attributes["x"] = "53.762455"
      element1.attributes["y"] = "228.96014"
      element1.attributes["id"] = "text2487"
      element1.attributes["sodipodi:linespacing"] = "125%"
      element1.attributes["transform"] = "scale(0.9982159,1.0017872)"
      
      element1_1 = REXML::Element.new "tspan"
      element1_1.attributes["sodipodi:role"] = "line"
      element1_1.attributes["id"] = "tspan2489"
      element1_1.attributes["x"] = "53.762455"
      element1_1.attributes["y"] = "228.96014"
      element1_1.text=@user.name

      element1.add_element element1_1

      element2 = REXML::Element.new "text"
      element2.attributes["xml:space"] = "preserve"
      element2.attributes["style"] = "font-size:35.4600563px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic"
      element2.attributes["x"] = "40.934238"
      element2.attributes["y"] = "183.43661"
      element2.attributes["id"] = "text2491"
      element2.attributes["sodipodi:linespacing"] = "125%"
      element2.attributes["transform"] = "scale(1.2948805,0.772272)"

      element2_1 = REXML::Element.new "tspan"
      element2_1.attributes["sodipodi:role"] = "line"
      element2_1.attributes["id"] = "tspan2493"
      element2_1.attributes["x"] = "40.934238"
      element2_1.attributes["y"] = "183.43661"
      element2_1.text=@user.hurigana

      element2.add_element element2_1

      element3 = REXML::Element.new "text"
      element3.attributes["xml:space"] = "preserve"
      element3.attributes["style"] = "font-size:58.10338211px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic"
      element3.attributes["x"] = "378.81317"
      element3.attributes["y"] = "226.55891"
      element3.attributes["id"] = "text2495"
      element3.attributes["sodipodi:linespacing"] = "125%"
      element3.attributes["transform"] = "scale(0.9971094,1.0028989)"

      element3_1 = REXML::Element.new "tspan"
      element3_1.attributes["sodipodi:role"] = "line"
      element3_1.attributes["id"] = "tspan2497"
      element3_1.attributes["x"] = "378.81317"
      element3_1.attributes["y"] = "226.55891"
      if @user.sex == 1
        element3_1.text='男性'
      else
        element3_1.text='女性'
      end
      element3.add_element element3_1

      element4 = REXML::Element.new "text"
      element4.attributes["xml:space"] = "preserve"
      element4.attributes["style"] = "font-size:51.12689209px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic"
      element4.attributes["x"] = "74.711197"
      element4.attributes["y"] = "228.45775"
      element4.attributes["id"] = "text2499"
      element4.attributes["sodipodi:linespacing"] = "125%"
      element4.attributes["transform"] = "scale(0.6941387,1.4406342)"

      element4_1 = REXML::Element.new "tspan"
      element4_1.attributes["sodipodi:role"] = "line"
      element4_1.attributes["id"] = "tspan2501"
      element4_1.attributes["x"] = "74.711197"
      element4_1.attributes["y"] = "228.45775"
      element4_1.text = @user.birthday

      element4.add_element element4_1

      element5 = REXML::Element.new "text"
      element5.attributes["xml:space"] = "preserve"
      element5.attributes["style"] = "font-size:45.07497787px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic"
      element5.attributes["x"] = "102.33903"
      element5.attributes["y"] = "363.53403"
      element5.attributes["id"] = "text2507"
      element5.attributes["sodipodi:linespacing"] = "125%"
      element5.attributes["transform"] = "scale(0.8609203,1.1615477)"

      element5_1 = REXML::Element.new "tspan"
      element5_1.attributes["sodipodi:role"] = "line"
      element5_1.attributes["id"] = "tspan2509"
      element5_1.attributes["x"] = "102.33903"
      element5_1.attributes["y"] = "363.53403"
      element5_1.text = @user.address

      element5.add_element element5_1

      element6 = REXML::Element.new "text"
      element6.attributes["xml:space"] = "preserve"
      element6.attributes["style"] = "font-size:43.30581665px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic"
      element6.attributes["x"] = "80.986237"
      element6.attributes["y"] = "549.51605"
      element6.attributes["id"] = "text2511"
      element6.attributes["sodipodi:linespacing"] = "125%"
      element6.attributes["transform"] = "scale(1.0713052,0.9334408)"

      element6_1 = REXML::Element.new "tspan"
      element6_1.attributes["sodipodi:role"] = "line"
      element6_1.attributes["id"] = "tspan2513"
      element6_1.attributes["x"] = "80.986237"
      element6_1.attributes["y"] = "549.51605"
      element6_1.text = @user.url

      element6.add_element element6_1

      element7 = REXML::Element.new "text"
      element7.attributes["xml:space"] = "preserve"
      element7.attributes["style"] = "font-size:45.51148224px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic"
      element7.attributes["x"] = "116.97383"
      element7.attributes["y"] = "715.46594"
      element7.attributes["id"] = "text2515"
      element7.attributes["sodipodi:linespacing"] = "125%"
      element7.attributes["transform"] = "scale(1.1898328,0.8404542)"

      element7_1 = REXML::Element.new "tspan"
      element7_1.attributes["sodipodi:role"] = "line"
      element7_1.attributes["id"] = "tspan2517"
      element7_1.attributes["x"] = "116.97383"
      element7_1.attributes["y"] = "715.46594"
      element7_1.text = @user.keireki1

      element7.add_element element7_1

      element8 = REXML::Element.new "text"
      element8.attributes["xml:space"] = "preserve"
      element8.attributes["style"] = "font-size:45.51148224px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic"
      element8.attributes["x"] = "109.71171"
      element8.attributes["y"] = "786.03296"
      element8.attributes["id"] = "text2519"
      element8.attributes["sodipodi:linespacing"] = "125%"
      element8.attributes["transform"] = "scale(1.1898328,0.8404542)"

      element8_1 = REXML::Element.new "tspan"
      element8_1.attributes["sodipodi:role"] = "line"
      element8_1.attributes["id"] = "tspan2521"
      element8_1.attributes["x"] = "109.71171"
      element8_1.attributes["y"] = "786.03296"
      element8_1.text = @user.keireki2

      element8.add_element element8_1

      element9 = REXML::Element.new "text"
      element9.attributes["xml:space"] = "preserve"
      element9.attributes["style"] = "font-size:62.85676575px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic"
      element9.attributes["x"] = "258.85812"
      element9.attributes["y"] = "357.03894"
      element9.attributes["id"] = "text2503"
      element9.attributes["sodipodi:linespacing"] = "125%"
      element9.attributes["transform"] = "scale(1.0984637,0.9103624)"

      element9_1 = REXML::Element.new "tspan"
      element9_1.attributes["sodipodi:role"] = "line"
      element9_1.attributes["id"] = "tspan2505"
      element9_1.attributes["x"] = "258.85812"
      element9_1.attributes["y"] = "357.03894"
      element9_1.text = @user.honseki

      element9.add_element element9_1


      out_doc.elements["svg/g"].add_element element1
      out_doc.elements["svg/g"].add_element element2
      out_doc.elements["svg/g"].add_element element3
      out_doc.elements["svg/g"].add_element element4
      out_doc.elements["svg/g"].add_element element5
      out_doc.elements["svg/g"].add_element element6
      out_doc.elements["svg/g"].add_element element7
      out_doc.elements["svg/g"].add_element element8
      out_doc.elements["svg/g"].add_element element9

   File.open(out_file_name,"w") do |outfile|
     out_doc.write(outfile, 0)
   end
  end

 
とにかく愚直に上でテンプレートファイル作るときに削除したtext要素とtspan要素を追加していった。文字幅とかどうするかなー。。これでshow画面から”PDF”をクリック。名前とかは特殊文字とかpdf-writerでダメだった文字に変えてみた。pdf/ に作成されたsvgファイルが↓

<?xml version='1.0' encoding='UTF-8'?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:cc='http://creativecommons.org/ns#' xmlns:xlink='http://www.w3.org/1999/xlink' xmlns:svg='http://www.w3.org/2000/svg' xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape' inkscape:output_extension='org.inkscape.output.svg.inkscape' id='svg2383' xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd' inkscape:version='0.46' sodipodi:version='0.32' height='297mm' sodipodi:docname='templete.svg' xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns='http://www.w3.org/2000/svg' width='210mm'>
<defs id='defs3'>
<inkscape:perspective inkscape:vp_x='0 : 526.18109 : 1' inkscape:persp3d-origin='372.04724 : 350.78739 : 1' inkscape:vp_y='0 : 1000 : 0' inkscape:vp_z='744.09448 : 526.18109 : 1' sodipodi:type='inkscape:persp3d' id='perspective2389'/>
<inkscape:perspective inkscape:vp_x='0 : 526.18109 : 1' inkscape:persp3d-origin='372.04724 : 350.78739 : 1' inkscape:vp_y='0 : 1000 : 0' inkscape:vp_z='744.09448 : 526.18109 : 1' sodipodi:type='inkscape:persp3d' id='perspective2550'/>
<inkscape:perspective inkscape:vp_x='0 : 526.18109 : 1' inkscape:persp3d-origin='372.04724 : 350.78739 : 1' inkscape:vp_y='0 : 1000 : 0' inkscape:vp_z='744.09448 : 526.18109 : 1' sodipodi:type='inkscape:persp3d' id='perspective2567'/>
<inkscape:perspective inkscape:vp_x='0 : 526.18109 : 1' inkscape:persp3d-origin='372.04724 : 350.78739 : 1' inkscape:vp_y='0 : 1000 : 0' inkscape:vp_z='744.09448 : 526.18109 : 1' sodipodi:type='inkscape:persp3d' id='perspective2429'/>
<inkscape:perspective inkscape:vp_x='0 : 526.18109 : 1' inkscape:persp3d-origin='372.04724 : 350.78739 : 1' inkscape:vp_y='0 : 1000 : 0' inkscape:vp_z='744.09448 : 526.18109 : 1' sodipodi:type='inkscape:persp3d' id='perspective2431'/>
<inkscape:perspective inkscape:vp_x='0 : 526.18109 : 1' inkscape:persp3d-origin='372.04724 : 350.78739 : 1' inkscape:vp_y='0 : 1000 : 0' inkscape:vp_z='744.09448 : 526.18109 : 1' sodipodi:type='inkscape:persp3d' id='perspective2435'/>
</defs>
<sodipodi:namedview inkscape:cy='623.80647' inkscape:current-layer='layer1' inkscape:window-width='974' pagecolor='#ffffff' showgrid='false' inkscape:pageshadow='2' inkscape:window-x='439' id='base' bordercolor='#666666' inkscape:window-y='-1' inkscape:document-units='mm' inkscape:zoom='0.49497475' inkscape:window-height='666' borderopacity='1.0' inkscape:cx='401.35844' inkscape:pageopacity='0.0'/>
<metadata id='metadata4'>
<rdf:RDF>
<cc:Work rdf:about=''>
<dc:format>
image/svg+xml
</dc:format>
<dc:type rdf:resource='http://purl.org/dc/dcmitype/StillImage'/>
</cc:Work>
</rdf:RDF>
</metadata>
<g inkscape:groupmode='layer' id='layer1' inkscape:label='Layer 1'>
<text transform='scale(1.0435025,0.9583111)' x='22.938391' y='83.420784' id='text2403' xml:space='preserve' sodipodi:linespacing='125%' style='font-size:65.77341461px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic'>
<tspan x='22.938391' y='83.420784' sodipodi:role='line' id='tspan2405'>
履歴書
</tspan>
</text>
<path d='M 26.263966,111.91017 L 458.60926,111.91017' id='path2433' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.89128971px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 30.26396,1010.1662 L 30.26396,113.05536' id='path2435' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5.60533047px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 456.58895,357.69693 L 456.58895,112.60063' id='path2439' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.92985797px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 455.2591,355.33662 L 700.3554,355.33662' id='path2441' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.92985797px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 699.02556,1010.8765 L 699.02556,358.49737' id='path2443' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.78000402px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 27.555326,1011.9764 L 699.7951,1011.9764' id='path2445' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.8522172px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 32.324881,151.30611 L 454.56865,151.30611' id='path2447' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 349.51278,151.30611 L 349.51278,260.40259' id='path2451' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 454.56865,260.40259 L 30.304576,260.40259' id='path2453' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 454.56865,353.33662 L 30.304576,353.33662' id='path2455' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 242.43661,260.40259 L 242.43661,353.33662' id='path2457' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 30.304576,448.29096 L 697.00526,448.29096' id='path2459' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 30.304576,558.39759 L 697.00526,558.39759' id='path2463' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.89128971px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 30.304576,617.99659 L 697.00526,617.99659' id='path2465' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 34.345184,678.64635 L 701.04587,678.64635' id='path2467' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 30.284265,737.19459 L 696.98496,737.19459' id='path2469' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 28.284264,793.76313 L 694.98496,793.76313' id='path2471' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 28.284263,850.33167 L 694.98496,850.33167' id='path2473' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 28.284262,910.94083 L 694.98496,910.94083' id='path2475' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<path d='M 30.304567,965.52968 L 697.00526,965.52968' id='path2477' style='fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1'/>
<image xlink:href='chameleon.jpg' x='475.68542' y='77.468559' id='image2437' sodipodi:absref='D:\ICF_AutoCapsule_disabled\temptemptemp\chameleon.jpg' height='256.77161' width='238.58885'/>
<text transform='scale(0.9982159,1.0017872)' x='53.762455' y='228.96014' id='text2487' xml:space='preserve' sodipodi:linespacing='125%' style='font-size:58.93929672px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic'>
<tspan x='53.762455' y='228.96014' sodipodi:role='line' id='tspan2489'>
薙野①⑳\¥十―
</tspan>
</text>
<text transform='scale(1.2948805,0.772272)' x='40.934238' y='183.43661' id='text2491' xml:space='preserve' sodipodi:linespacing='125%' style='font-size:35.4600563px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic'>
<tspan x='40.934238' y='183.43661' sodipodi:role='line' id='tspan2493'>
なぎのゆうき
</tspan>
</text>
<text transform='scale(0.9971094,1.0028989)' x='378.81317' y='226.55891' id='text2495' xml:space='preserve' sodipodi:linespacing='125%' style='font-size:58.10338211px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic'>
<tspan x='378.81317' y='226.55891' sodipodi:role='line' id='tspan2497'>
男性
</tspan>
</text>
<text transform='scale(0.6941387,1.4406342)' x='74.711197' y='228.45775' id='text2499' xml:space='preserve' sodipodi:linespacing='125%' style='font-size:51.12689209px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic'>
<tspan x='74.711197' y='228.45775' sodipodi:role='line' id='tspan2501'>
1985-01-20
</tspan>
</text>
<text transform='scale(0.8609203,1.1615477)' x='102.33903' y='363.53403' id='text2507' xml:space='preserve' sodipodi:linespacing='125%' style='font-size:45.07497787px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic'>
<tspan x='102.33903' y='363.53403' sodipodi:role='line' id='tspan2509'>
横浜市旭区
</tspan>
</text>
<text transform='scale(1.0713052,0.9334408)' x='80.986237' y='549.51605' id='text2511' xml:space='preserve' sodipodi:linespacing='125%' style='font-size:43.30581665px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic'>
<tspan x='80.986237' y='549.51605' sodipodi:role='line' id='tspan2513'>

http://bugcloud.com/

</tspan>
</text>
<text transform='scale(1.1898328,0.8404542)' x='116.97383' y='715.46594' id='text2515' xml:space='preserve' sodipodi:linespacing='125%' style='font-size:45.51148224px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic'>
<tspan x='116.97383' y='715.46594' sodipodi:role='line' id='tspan2517'>
みなぎ小学校卒業
</tspan>
</text>
<text transform='scale(1.1898328,0.8404542)' x='109.71171' y='786.03296' id='text2519' xml:space='preserve' sodipodi:linespacing='125%' style='font-size:45.51148224px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic'>
<tspan x='109.71171' y='786.03296' sodipodi:role='line' id='tspan2521'>
十文字中学校卒業
</tspan>
</text>
<text transform='scale(1.0984637,0.9103624)' x='258.85812' y='357.03894' id='text2503' xml:space='preserve' sodipodi:linespacing='125%' style='font-size:62.85676575px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:MS PGothic;-inkscape-font-specification:MS PGothic'>
<tspan x='258.85812' y='357.03894' sodipodi:role='line' id='tspan2505'>
福岡県
</tspan>
</text>
</g>
</svg>

 
firefoxで開くと
 
browse_svg.jpg

browse_svg

 
ん?いいんじゃないか?以外にも。特殊文字とかも普通に表示できてる。じゃあpdfにしてみようよってことで、rsvg-convert を実行。
 
pdf_adobe.jpg

pdf

 
んあ、ずれた。フリーズしたよわたしゃ。。librsvg なのか svg ファイルの問題なのか rexml がいらんことしたのか検討つかん。。単純にtext要素とtspan要素の属性yとかを変えてやればいいんだろうけど、テンプレート作った後に毎回調整っていのはださいなー。うーん、ゴールまでが東京 – 大阪間ぐらい遠い。
 
 

2009/06/12 追記

outpdfアクションで出力されたsvgファイルがおかしいみたい。手でtext要素とtspan要素の属性の順番を変えてみたらいい感じだった。属性の順番ってattributesのオプションとかで指定できるの?できなそうだけど。。
 
 

Technorati Tags: