Redmineが 2.0.1にUPしました。
2012年5月30日水曜日
2012年5月21日月曜日
ExcelからPDFを作成
ExcelからPDFを作成するWebアプリを作成することになった。
Excel2010をサーバ側で、Excelオートメーションを利用して
PDF出力すれば良いのだが、何故かサンプルがうまく動作しない。
IISで作成したxlsxファイルを、直ぐに読み込む為にファイルロックがかかっているようだ。
※単体テストの場合、すんなり動作してくれる。
VBScriptから、Excelを起動してPDF作成するように修正。
VBScriptのソース
Set xl=CreateObject("Excel.Application")
xl.AutomationSecurity=2
Set bk=xl.WorkBooks.Open(WScript.Arguments.Item(0))
bk.ExportAsFixedFormat xlTypePDF, WScript.Arguments.Item(0) & ".pdf", xlQualityStandard, _
True, False, 1, 1, False
bk.Close
Set bk=Nothing
xl.Quit
Set xl=Nothing
bk.ExportAsFixedFormatがミソ
Excel2010をサーバ側で、Excelオートメーションを利用して
PDF出力すれば良いのだが、何故かサンプルがうまく動作しない。
IISで作成したxlsxファイルを、直ぐに読み込む為にファイルロックがかかっているようだ。
※単体テストの場合、すんなり動作してくれる。
VBScriptから、Excelを起動してPDF作成するように修正。
VBScriptのソース
Set xl=CreateObject("Excel.Application")
xl.AutomationSecurity=2
Set bk=xl.WorkBooks.Open(WScript.Arguments.Item(0))
bk.ExportAsFixedFormat xlTypePDF, WScript.Arguments.Item(0) & ".pdf", xlQualityStandard, _
True, False, 1, 1, False
bk.Close
Set bk=Nothing
xl.Quit
Set xl=Nothing
bk.ExportAsFixedFormatがミソ
2012年5月18日金曜日
2012年5月17日木曜日
SMSを送信する
今回は、Short Message Service (SMS)のメッセージを送信する方法をご紹介します。
Microsoft.WindowsMobile.PocketOutlook 名前空間の SmsMessage クラスを利用する事で、簡単にSMSメッセージを送信する事が出来ます。
以下に、実際にSMSのメッセージを送信するメソッドを示します。
この SendSMSMessage メソッドを呼ぶと、SMSのメッセージを送信します。
この SendSMSMessage メソッドを呼ぶと、SMSのメッセージを送信します。
元ネタ http://ch3cooh.jp/index.php/tips/windows-mobile/communication/send_sms/
Microsoft.WindowsMobile.PocketOutlook 名前空間の SmsMessage クラスを利用する事で、簡単にSMSメッセージを送信する事が出来ます。
以下に、実際にSMSのメッセージを送信するメソッドを示します。
VB.NET
' 以下の名前空間を指定しておいてください ' Imports Microsoft.WindowsMobile.PocketOutlook Public Sub SendSMSMessage(ByVal telNumber As String, ByVal message As String) Try Dim smsMsg As New SmsMessage(telNumber, message) ' メッセージの送信 smsMsg.Send() Catch ex As Exception ' 例外処理 End Try End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) SendSMSMessage("09012345678", "SMSテスト") End Sub
C#
// 以下の名前空間を指定しておいてください // using Microsoft.WindowsMobile.PocketOutlook public void SendSMSMessage(string telNumber, string message) { try { SmsMessage smsMsg = new SmsMessage(telNumber, message); // メッセージの送信 smsMsg.Send(); } catch (Exception ex) { // 例外処理 } }
private void Button1_Click(System.Object sender, System.EventArgs e) { SendSMSMessage("09012345678", "SMSテスト"); }
実行結果
上記のサンプルコードを実行すると、SMSメッセージを送信する事が出来ます。元ネタ http://ch3cooh.jp/index.php/tips/windows-mobile/communication/send_sms/
2012年5月16日水曜日
redmine 2.0.0
5月15日に、Redmineが、2.0.0にUpしていた。
大きな変更点 Ruby 1.8.7 -> 1.9系へ移行
Ruby on Rails 2.3.14 -> 3.2.3
最新の環境に追いついたので、今日の夜にでも、現在のRedmineをUpgradeしようっと。
大きな変更点 Ruby 1.8.7 -> 1.9系へ移行
Ruby on Rails 2.3.14 -> 3.2.3
最新の環境に追いついたので、今日の夜にでも、現在のRedmineをUpgradeしようっと。
2012年5月9日水曜日
PDFテキスト抽出の変換(cmaps)
PDFファイルからテキスト抽出する場合、adobeの変換テーブルを使用しないと
いけないらしい。
iTextには、 itext-asian.jar内に、cmapsがあるが、iTextharpの場合
iTextAsian-all-2.1.zipのdllに含まれているみたい。
sourceforgeから、downloadする必要がある。
ファイル名:iTextAsian-all-2.1.zip 2012年5月9日時点
いけないらしい。
iTextには、 itext-asian.jar内に、cmapsがあるが、iTextharpの場合
iTextAsian-all-2.1.zipのdllに含まれているみたい。
sourceforgeから、downloadする必要がある。
ファイル名:iTextAsian-all-2.1.zip 2012年5月9日時点
ラベル:
iTextSharp,
PDF,
Text
C# iTextSharp でテキストを抽出
文字コードらしきものはどうやらCIDというAdobe固有の文字コードテーブルのようで、計算して復元できるような代物ではないらしい。その変換テーブル情報を CMap と言うらしい。
そこで xpdf というサイトにある xpdf-japanese.tar.gz というのを入手して、そのなかにある Adobe-Japan1-UCS2 というテキストファイル(拡張子なし)がどうも、今回のCMAPとして使えそうだ。
イメージとしては 読み込んだPDFの中にもそういったCMAP情報があって、それを元にコード変換していくのがスマートにも思えるが、PDFファイルの中にCMAP情報があるのか?またどのクラスモジュールで抜き出すのかがいまいち分からない。
PDFによっては他のCMAPファイルで文字コードを復元しなくちゃいけないんだろうが、どの情報を見てどのCMAPを使うかは今後の課題としよう・・・。
とりあえず、コーディングしてみた。
ついでにページ単位にフォント情報を一覧取得できる方法も分かったので、コメントアウトしてあるが掲載してみた。利用方法は不明だけど。。。
とりあえずはテキスト文字を抽出できるようになったみたいだが、どこからどこまでが1行分なのかがよくわからない。
元ネタ:http://yonaizumi.dip.jp/weblog/cappe/2011/01/citextsharp-2.html
そこで xpdf というサイトにある xpdf-japanese.tar.gz というのを入手して、そのなかにある Adobe-Japan1-UCS2 というテキストファイル(拡張子なし)がどうも、今回のCMAPとして使えそうだ。
イメージとしては 読み込んだPDFの中にもそういったCMAP情報があって、それを元にコード変換していくのがスマートにも思えるが、PDFファイルの中にCMAP情報があるのか?またどのクラスモジュールで抜き出すのかがいまいち分からない。
PDFによっては他のCMAPファイルで文字コードを復元しなくちゃいけないんだろうが、どの情報を見てどのCMAPを使うかは今後の課題としよう・・・。
とりあえず、コーディングしてみた。
using System.IO; using iTextSharp.text; using iTextSharp.text.pdf; namespace PDFtoHTML { public partial class Form1 : Form { private string InPDF = @"C:hoge.pdf"; private string InCMAP = @"C:\Adobe-Japan1-UCS2"; private void button1_Click(object sender, EventArgs e) { // CMapの読込み iTextSharp.text.pdf.fonts.cmaps.CMap uCmap = new iTextSharp.text.pdf.fonts.cmaps.CMap(); iTextSharp.text.pdf.fonts.cmaps.CMapParser uCMapParser = new iTextSharp.text.pdf.fonts.cmaps.CMapParser(); StreamReader sr = new StreamReader(InCMAP, Encoding.GetEncoding("Shift-JIS")); uCmap = uCMapParser.Parse(sr.BaseStream); sr.Close(); // iTextSharp::PdfReader PDFの読込み iTextSharp.text.pdf.PdfReader uReader = new iTextSharp.text.pdf.PdfReader(InPDF); Console.Write("□GetPageContent\n"); for (int i = 0; i < uReader.NumberOfPages; i++) { Console.Write(string.Format(" Page No = {0}\n", (i + 1))); byte[] b = uReader.GetPageContent(i + 1); string s = iTextSharp.text.pdf.PdfEncodings.ConvertToString(b, PdfObject.TEXT_PDFDOCENCODING).Replace("\r\n", " "); Console.Write(string.Format("{0}\n", s)); // テキスト部分を抽出 System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(s, @"<[0-9A-F]*?>|\(.*?\)"); foreach (System.Text.RegularExpressions.Match m in mc) { byte[] bv = new byte[2]; string ss = ""; if (m.Value[0] == '<') { for (int j = 1; j < (m.Value.Length - 1); j = j + 4) { bv[0] = Convert.ToByte(Convert.ToInt32(m.Value.Substring(j, 2), 16)); bv[1] = Convert.ToByte(Convert.ToInt32(m.Value.Substring(j + 2, 2), 16)); ss += uCmap.Lookup(bv, 0, 2); } } else { ss += m.Value.Substring(1, m.Value.Length - 2); } Console.Write(string.Format("{0}\n", ss)); } } // フォント一覧情報 //List<object[]> uLisBaseFont = iTextSharp.text.pdf.BaseFont.GetDocumentFonts(uReader, (i)); // Ending uReader.Close(); Console.Write("■End\n"); } } }これでUnicodeだが文字としてちゃんと取得できるようになった。
ついでにページ単位にフォント情報を一覧取得できる方法も分かったので、コメントアウトしてあるが掲載してみた。利用方法は不明だけど。。。
とりあえずはテキスト文字を抽出できるようになったみたいだが、どこからどこまでが1行分なのかがよくわからない。
元ネタ:http://yonaizumi.dip.jp/weblog/cappe/2011/01/citextsharp-2.html
ラベル:
C#,
iTextSharp,
Text
2012年5月8日火曜日
Redmine On JRuby②(Redmine構築)
インストーラを用いて構築する方法もあるが、今回構築したRedmineを他の環境に展開しても稼働する状態にしたいので、可能な限り手動で展開・設定する方法で構築する。
今回はRedmineをインストールする前の準備段階を記載。
元ネタ:http://upstart.jp/blog/?p=211
今回はRedmineをインストールする前の準備段階を記載。
■環境
- Windows 7
- JRE 1.6.0_31
- JRuby 1.6.7
- MySQL 5.5.23
- Redmine 1.4.1
■フォルダ構成
C:Redmine
├--- Env
| ├--- jre6
| └--- jruby-1.6.7
└--- redmine-1.4.1
├--- Env
| ├--- jre6
| └--- jruby-1.6.7
└--- redmine-1.4.1
■インストール
<Redmineインストール>
・ダウンロード
バイナリの圧縮ファイルをダウンロードする→[Redmineダウンロード]
・インストール
ダウンロードした圧縮ファイルを C:Redmine に展開する。
→ C:Redmineredmine-1.4.1
→ C:Redmineredmine-1.4.1
・database.yml作成
C:helpdeskredmine-1.4.0config にある database.yml.example を
database.yml にコピーし、"production:"を下記のように編集し保存する。
database.yml にコピーし、"production:"を下記のように編集し保存する。
production:
adapter: mysql
database: redmine
host: localhost
username: redmine
password: redmine
encoding: utf8
adapter: mysql
database: redmine
host: localhost
username: redmine
password: redmine
encoding: utf8
・セッションストア秘密鍵を生成
>cd C:Redmineredmine-1.4.1
>jruby -S rake generate_session_store
>jruby -S bundle install --without development test
>jruby -S rake generate_session_store
>jruby -S bundle install --without development test
・セッション情報を追加
C:Redmineredmine-1.4.0configenvironment.rb の
"Rails::Initializer.run do |config|" から "if"の間に下記の内容を追記し保存する。
"Rails::Initializer.run do |config|" から "if"の間に下記の内容を追記し保存する。
config.action_controller.session = { :key => "_myapp_session", :secret => "abcdefghijklmnopqrstuvwxyz1234567890" }
※”:secret”値は任意の30桁以上の文字列。
※”:secret”値は任意の30桁以上の文字列。
・データベースにテーブルを作成
>jruby -S rake db:migrate RAILS_ENV="production"
・デフォルトデータをデータベースに登録
>jruby -S rake redmine:load_default_data RAILS_ENV="production"
…
Select language: ja[Enter]
…
Select language: ja[Enter]
・添付ファイル保存先設定
redmine-1.4.1\config\configuration.yml に下記の内容を追記する。
attachments_storage_path: "保存先フォルダのパス"
※(例)attachments_storage_path: C:\Redmine\tmp
※(例)attachments_storage_path: C:\Redmine\tmp
・WEBrickでWebサーバを起動
>jruby -S script/server webrick -e production
・Redmineにログイン
WEBブラウザから http://localhost:3000 にアクセスし、
ログイン:パスワード を admin:adminでログイン。
ログイン:パスワード を admin:adminでログイン。
環境変数設定バッチファイル作成
コマンドプロンプトを開く度にコマンドで環境変数を設定するのは手間なので
C:Redmine に下記の内容でバッチファイルを作成しておく。
C:Redmine に下記の内容でバッチファイルを作成しておく。
@echo off
SET JAVA_HOME=%~dp0Envjre6
SET PATH=%~dp0Envjruby-1.6.7bin;%~dp0Envglassfishbin;%PATH%
@echo on
SET JAVA_HOME=%~dp0Envjre6
SET PATH=%~dp0Envjruby-1.6.7bin;%~dp0Envglassfishbin;%PATH%
@echo on
元ネタ:http://upstart.jp/blog/?p=211
Redmine On JRuby①(準備)
インストーラを用いて構築する方法もあるが、今回構築したRedmineを他の環境に展開しても稼働する状態にしたいので、可能な限り手動で展開・設定する方法で構築する。
今回はRedmineをインストールする前の準備段階を記載。
今回はRedmineをインストールする前の準備段階を記載。
■環境
- Windows 7
- JRE 1.6.0_31
- JRuby 1.6.7
- MySQL 5.5.23
- Redmine 1.4.1
■フォルダ構成
C:\Redmine\
├--- Env\
| ├--- jre6\
| └--- jruby-1.6.7\
└--- redmine-1.4.1\
├--- Env\
| ├--- jre6\
| └--- jruby-1.6.7\
└--- redmine-1.4.1\
■インストール
<展開先フォルダ作成>
C:\Redmine と C:\Redmin\Envフォルダを作成する。
<JREインストール>
・ダウンロード
インストーラをダウンロードする→ [JREダウンロード]
・インストール
ダウンロードしたインストーラを実行し、ウィザードにそってインストールする。
・JREのコピー
インストールされたJREを C:\Redmine\Env にコピーする。
※デフォルトのインストール先は C:\Program File\Java\jre6
※デフォルトのインストール先は C:\Program File\Java\jre6
・JREアンインストール
[コントロールパネル]→[プログラムと機能]でJREをアンインストールする。
・環境変数設定
コマンドプロンプトで一時的に環境変数を設定する。
※コマンドプロンプトを閉じてしまった場合、再度設定する必要
※コマンドプロンプトを閉じてしまった場合、再度設定する必要
>set JAVA_HOME=C:\Redmine\Env\jre6
<JRubyインストール>
・ダウンロード
バイナリの圧縮ファイルをダウンロードする→[JRubyダウンロード]
・圧縮ファイルの展開
ダウンロードした圧縮ファイルを C:\Redmine\Env に展開する。
→ C:\Redmine\Env\jruby-1.6.7
→ C:\Redmine\Env\jruby-1.6.7
・環境変数設定
コマンドプロンプトで一時的に環境変数を設定する。
※コマンドプロンプトを閉じてしまった場合、再度設定する必要
※コマンドプロンプトを閉じてしまった場合、再度設定する必要
>set PATH=C:\Redmine\Env\jruby-1.6.7\bin;%PATH%
・インストール確認
コマンドプロンプトでJRubyのバージョンを確認する。
>jruby -v
jruby 1.6.7 (ruby-1.8.7-p357) (2012-02-22 3e82bc8)
(Java HotSpot(TM) 64-Bit Server VM 1.6.0_31) [Windows 7-amd64-java]
jruby 1.6.7 (ruby-1.8.7-p357) (2012-02-22 3e82bc8)
(Java HotSpot(TM) 64-Bit Server VM 1.6.0_31) [Windows 7-amd64-java]
<MySQLインストール>
・ダウンロード
インストーラをダウンロードする→ [MySQLダウンロード]
・インストール
ダウンロードしたインストーラを実行し、ウィザードにそってインストールする。
・環境変数設定
コマンドプロンプトで一時的に環境変数を設定する。
※コマンドプロンプトを閉じてしまった場合、再度設定する必要
※コマンドプロンプトを閉じてしまった場合、再度設定する必要
>set PATH=C:\Program Files\MySQL\MySQL Server 5.5\bin;%PATH%
・インストール確認
コマンドプロンプトでJRubyのバージョンを確認する。
>mysql –version
mysql Ver 14.14 Distrib 5.5.23, for Win64 (x86)
mysql Ver 14.14 Distrib 5.5.23, for Win64 (x86)
・Redmineのデータベースと接続ユーザを作成
コマンドプロンプトから下記のコマンドを入力する。
※ここでは接続ユーザ:パスを[redmine:redmine]で表記するが任意
※ここでは接続ユーザ:パスを[redmine:redmine]で表記するが任意
>mysql -uroot -p
Enter password: ”インストール時に設定したrootパスワード”[Enter]
…
mysql>create database redmine character set utf8 [Enter]
Query OK, 1 row affected (0.00 sec)
mysql>create user ‘redmine’@'localhost’ identified by ‘redmine’ [Enter]
Query OK, 1 row affected (0.00 sec)
mysql>grant all privileges on redmine.* to ‘redmine’@'localhost’ [Enter]
Query OK, 1 row affected (0.00 sec)
mysql>exit[Enter]
Enter password: ”インストール時に設定したrootパスワード”[Enter]
…
mysql>create database redmine character set utf8 [Enter]
Query OK, 1 row affected (0.00 sec)
mysql>create user ‘redmine’@'localhost’ identified by ‘redmine’ [Enter]
Query OK, 1 row affected (0.00 sec)
mysql>grant all privileges on redmine.* to ‘redmine’@'localhost’ [Enter]
Query OK, 1 row affected (0.00 sec)
mysql>exit[Enter]
<Gemインストール>
・Bundlerインストール
>jruby -S gem install bundler
・Gemfile作成
>cd C:\Redmine\Env\jruby-1.6.7
>jruby -S bundle init
Writing new Gemfile to C:/Redmine/Env/jruby-1.6.7/Gemfile
※Gemfileの作成場所は任意
>jruby -S bundle init
Writing new Gemfile to C:/Redmine/Env/jruby-1.6.7/Gemfile
※Gemfileの作成場所は任意
・Gemfile編集
Gemfileを編集し下記の内容で保存する。
source :rubygems
source "http://rubygems.org"
source :rubyforge
source "http://gems.rubyforge.org"
source :gemcutter
source "http://gemcutter.org"
gem 'rails','2.3.14'
source "http://rubygems.org"
source :rubyforge
source "http://gems.rubyforge.org"
source :gemcutter
source "http://gemcutter.org"
gem 'rails','2.3.14'
・必要なGemをインストール
>jruby -S gem install jruby-openssl
>jruby -S bundle install --without development test
>jruby -S bundle install --without development test
元ネタ:http://upstart.jp/blog/?p=13
2012年5月1日火曜日
SQLServer 2005 split 関数 独自版
********* 以下をそのまま実行 **********
create function [dbo].[split](@str as varchar(1000), @kugiri as char(1), @idx as int)
returns varchar(1000)
as
begin
declare @result varchar(1000)
declare @loop int
set @loop = 0
while (@loop < @idx)
begin
select @result = case when charindex(@kugiri, rtrim(@str)) > 0 then substring(rtrim(@str), 1, charindex(@kugiri, rtrim(@str)) -1) else rtrim(@str) end
select @str = case when charindex(@kugiri, @str) > 0 then substring(@str, charindex(@kugiri, @str)+1, 1000) else null end
set @loop = @loop + 1;
end
return @result
end
--使用例
-- select dbo.split('aaazbbbzccc', 'z', 2)
--結果
-- bbb
********* 以上、ここまで **********
元ネタ
http://blog.livedoor.jp/hashikure3/archives/20478.html
登録:
投稿 (Atom)