部門 > Ruby > 名札自動作成プログラム

改訂版も作ってみました。

オナーのイベントの名札がExcelでつくられているのが気に食わなかったのでTeXでつくりたかった。使い方がめんどうなので誰も使ってくれず。(Dec.2010ごろの作)

プログラムの中身は以下のような感じ。
  1. #!/usr/bin/ruby
  2. # -*- coding: utf-8 -*-
  3. # オナーの名札作成プログラム
  4.  
  5. eventname = "2010年度卒業生送別会"
  6.  
  7. if ARGV[0] == nil then
  8. print "このプログラムの使い方
  9. 所属(半角カンマ)セミナー名(半角カンマ)氏名(改行)
  10. 例:物理学科3年,永宮G, 金森 順次郎
  11.   物理学科3年, 八木G, 湯川 秀樹
  12.  
  13. というようなファイルを引数に入れてくれると
  14. 名札を作るためのTeXソースファイルをつくります。
  15. あとはそれをコンパイルしてPDFにして印刷してね。
  16. 何かあれば
  17. foo@bar.com
  18. まで¥n"
  19.  
  20. else
  21.  
  22. f1 = File.open("#{ARGV[0]}.tex", "w")
  23. f1.print "¥¥documentclass[14pt,a4paper]{jsarticle}
  24.  
  25. ¥¥usepackage[dvipdfmx]{graphicx}
  26. ¥¥pagestyle{empty}
  27. ¥¥setlength{¥¥unitlength}{1truemm}
  28. ¥¥setlength{¥¥hoffset}{0in}
  29. ¥¥setlength{¥¥voffset}{0in}
  30. ¥¥setlength{¥¥headheight}{0in}
  31. ¥¥setlength{¥¥headsep}{0in}
  32. ¥¥setlength{¥¥oddsidemargin}{14truemm}
  33. ¥¥setlength{¥¥topmargin}{16truemm}
  34. ¥¥advance¥¥oddsidemargin -1in
  35. ¥¥advance¥¥topmargin -1in
  36. ¥¥setlength{¥¥footskip}{0in}
  37.  
  38. ¥¥begin{document}
  39. "
  40.  
  41. require "csv"
  42. CSV.open(ARGV[0], "r")
  43.  
  44. b=CSV.readlines(ARGV[0])
  45.  
  46. i = 0
  47. while b[i][0] != nil
  48. f1.print "¥¥begin{picture}(89.1,54.6)(0,0)
  49. ¥¥put(-0.45,-0.2){¥¥line(1,0){90}}
  50. ¥¥put(-0.45,-0.2){¥¥line(0,1){55}}
  51. ¥¥put(89.55,54.8){¥¥line(-1,0){90}}
  52. ¥¥put(89.55,54.8){¥¥line(0,-1){55}}
  53. ¥¥put(46,20){¥¥makebox(0,0){¥¥Huge ¥¥bf #{b[i][2]}}}
  54. ¥¥put(52,44){¥¥makebox(0,0)[]{¥¥small #{eventname}}}
  55. ¥¥put(52,35.5){¥¥makebox(0,0){¥¥large #{b[i][0]}}}
  56. ¥¥put(82,3.5){¥¥makebox(0,0)[r]{¥¥large #{b[i][1]}}}
  57. ¥¥put(5,28){¥¥includegraphics[width=20truemm]{001.eps}}
  58. ¥¥end{picture}
  59. ¥¥begin{picture}(89.1,54.6)(0,0)
  60. ¥¥put(-0.45,-0.2){¥¥line(1,0){90}}
  61. ¥¥put(-0.45,-0.2){¥¥line(0,1){55}}
  62. ¥¥put(89.55,54.8){¥¥line(-1,0){90}}
  63. ¥¥put(89.55,54.8){¥¥line(0,-1){55}}
  64. ¥¥put(46,20){¥¥makebox(0,0){¥¥Huge ¥¥bf #{b[i+1][2]}}}
  65. ¥¥put(52,45){¥¥makebox(0,0)[]{¥¥small #{eventname}}}
  66. ¥¥put(52,35.5){¥¥makebox(0,0){¥¥large #{b[i+1][0]}}}
  67. ¥¥put(82,3.5){¥¥makebox(0,0)[r]{¥¥large #{b[i+1][1]}}}
  68. ¥¥put(5,28){¥¥includegraphics[width=20truemm]{001.eps}}
  69. ¥¥end{picture}¥¥par
  70. "
  71. i += 2
  72. end
  73.  
  74. f1.print "¥¥end{document}
  75. "
  76. f1.close
  77. print "#{i}人分の名札ができた模様¥n"
  78. end
  79.  
csvの中身が偶数か奇数かのどっちかじゃないと動かないとか,色々問題がある。これを,
ruby nameplate.rb 2011farewell.txt
nkf -e --overwrite 2011farewell.txt.tex
platex 2011farewell.txt.tex;dvipdfmx 2011farewell.txt.dvi
というように実行すると,出力PDFのようなものが出来上がる。nkfっていうのは,RubyでUTF-8使ってて,TeXではEUCにしないといけないのでその変換をしている。

TeXのpicture環境はかなり正確にジオミトリーを指定できるので,そういう意味では素晴らしいと思うのだけど。。。まあExcel使いたいんなら使ってください。

コメント

名前:
コメント:

すべてのコメントを見る

タグ:

OK RUBY
最終更新:2012年03月01日 20:06
添付ファイル