iisで利用出来る、GIT Service
http://bonobogitserver.com/
VersionUPに伴い、開発が止まっているGITSharpから
gitlib2 に変更されていた。
これで最新のGITに対応出来ているので、助かります。
2013年7月17日水曜日
2013年7月12日金曜日
Converting Multipage TIFF image to PDF
// creation of the document with a certain size and certain margins
iTextSharp.text.Document document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4, 0, 0, 0, 0);
// creation of the different writers
iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(Server.MapPath("~/App_Data/result.pdf"), System.IO.FileMode.Create));
// load the tiff image and count the total pages
System.Drawing.Bitmap bm = new System.Drawing.Bitmap(Server.MapPath("~/App_Data/source.tif"));
int total = bm.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
document.Open();
iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent;
for (int k = 0; k < total; ++k)
{
bm.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, k);
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bm, System.Drawing.Imaging.ImageFormat.Bmp);
// scale the image to fit in the page
img.ScalePercent(72f / img.DpiX * 100);
img.SetAbsolutePosition(0, 0);
cb.AddImage(img);
document.NewPage();
}
document.Close();
元ネタ
http://atashbahar.com/post/Converting-Multipage-TIFF-image-to-PDF.aspx
iTextSharp.text.Document document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4, 0, 0, 0, 0);
// creation of the different writers
iTextSharp.text.pdf.PdfWriter writer = iTextSharp.text.pdf.PdfWriter.GetInstance(document, new System.IO.FileStream(Server.MapPath("~/App_Data/result.pdf"), System.IO.FileMode.Create));
// load the tiff image and count the total pages
System.Drawing.Bitmap bm = new System.Drawing.Bitmap(Server.MapPath("~/App_Data/source.tif"));
int total = bm.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
document.Open();
iTextSharp.text.pdf.PdfContentByte cb = writer.DirectContent;
for (int k = 0; k < total; ++k)
{
bm.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, k);
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bm, System.Drawing.Imaging.ImageFormat.Bmp);
// scale the image to fit in the page
img.ScalePercent(72f / img.DpiX * 100);
img.SetAbsolutePosition(0, 0);
cb.AddImage(img);
document.NewPage();
}
document.Close();
元ネタ
http://atashbahar.com/post/Converting-Multipage-TIFF-image-to-PDF.aspx
ラベル:
iTextSharp,
tiff,
画像
TIFFからPDFへ変換するには・・・
ファイル変換はよくある話で、画像ファイルからPDFともなるとほぼ王道。
有償ソフトは別として、フリーソフトでも多種多様なものが提供されているのだが、決められたルールに従って大量にPDF化する様なソフトは見当たらないようだ。(見つけられないだけかも・・・)
いつもの通り、「なければ作ればいい」という精神で試みる。
さすがにPDF変換を1から構築するのは大変なので、ツールかライブラリを探してみると以下のようなものがあった。
itextsharp を使うには参照設定に登録する必要がある。
「ソリューションエクスプローラ」窓から「参照設定」を右クリックし、「参照の追加」を選択する。
「参照」タブから、iTextSharp.dll を選択することで、前準備が完了する。
コーディングの基本形は以下の通り。
これだとA4サイズのTIFFファイルを上記のプログラムで作成すると、TIFF画像の一部しかPDF化されないことが分かる。
ちなみにA4サイズは、インチでいうと 8.3x11.5、mmで言うと 210x297 である。
で、TIFFファイルはあくまでも画像なので、用紙サイズなどの情報は保持せず、あくまで画像サイズなのだ。そのため、上記のプログラムでは端的に言うと解像度に比例して巨大化されてしまうのだ。
最終的には次のようになった。
腑に落ちない部分も多々あるのだが、これでスキャンした用紙サイズのTIFFファイルを同用紙サイズのPDFファイルに変換することができる。
元ネタ
http://yonaizumi.dip.jp/weblog/cappe/2010/11/ctiffpdf.html
有償ソフトは別として、フリーソフトでも多種多様なものが提供されているのだが、決められたルールに従って大量にPDF化する様なソフトは見当たらないようだ。(見つけられないだけかも・・・)
いつもの通り、「なければ作ればいい」という精神で試みる。
さすがにPDF変換を1から構築するのは大変なので、ツールかライブラリを探してみると以下のようなものがあった。
- iTextSharp ・・・ C#用PDF変換ライブラリ ※現時点で5.4.2が最新
- クラスライブラリリファレンス ・・・ iTextSharp用ヘルプ
itextsharp を使うには参照設定に登録する必要がある。
「ソリューションエクスプローラ」窓から「参照設定」を右クリックし、「参照の追加」を選択する。
「参照」タブから、iTextSharp.dll を選択することで、前準備が完了する。
コーディングの基本形は以下の通り。
01.
using
iTextSharp.text;
02.
using
iTextSharp.text.pdf;
03.
04.
// itextsharp::ドキュメントを作成
05.
Document doc =
new
Document();
06.
07.
// itextsharp::PDF保存先を指定
08.
PdfWriter.GetInstance(doc,
new
FileStream(@
"c:\hoge\test.pdf"
, FileMode.Create));
09.
10.
// itextsharp::PDFを開く
11.
doc.Open();
12.
13.
// itextsharp::画像データ取得
14.
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(
new
Uri(@
"c:\hoge\image.tif"
));
15.
16.
// itextsharp::書込み
17.
doc.Add(image);
18.
19.
// itextsharp::PDFを閉じる
20.
doc.Close();
ちなみにA4サイズは、インチでいうと 8.3x11.5、mmで言うと 210x297 である。
で、TIFFファイルはあくまでも画像なので、用紙サイズなどの情報は保持せず、あくまで画像サイズなのだ。そのため、上記のプログラムでは端的に言うと解像度に比例して巨大化されてしまうのだ。
最終的には次のようになった。
01.
using
iTextSharp.text;
02.
using
iTextSharp.text.pdf;
03.
04.
05.
{
06.
// ドキュメントを作成
07.
Document doc =
new
Document();
08.
09.
// PDF保存先を指定
10.
PdfWriter.GetInstance(doc,
new
FileStream(@
"c:\hoge\test.pdf"
, FileMode.Create));
11.
12.
// PDFを開く
13.
doc.Open();
14.
15.
// 画像データ取得
16.
iTextSharp.text.Image image = iTextSharp.text.Image.GetInstance(
new
Uri(@
"c:\hoge\image.tif"
));
17.
18.
// サイズを算出
19.
// itextsharpのサイズ定義の数値が合わないので2.834の差分を補正
20.
float
y = (image.PlainHeight / image.DpiY) * 25.4f * 2.834f;
21.
float
x = (image.PlainWidth / image.DpiX) * 25.4f * 2.834f;
22.
23.
// 用紙サイズを判定
24.
iTextSharp.text.Rectangle rect =
new
iTextSharp.text.Rectangle(myPaperSize(x, y));
25.
26.
// 縮尺率を判定
27.
// ※これでフィットするのだが理由は不明
28.
image.ScalePercent(35f);
29.
30.
// 配置個所指定(左下が起点)
31.
image.SetAbsolutePosition(0f, 0f);
32.
33.
// 用紙サイズを設定
34.
doc.SetPageSize(rect);
35.
36.
// 書込み
37.
//doc.NewPage(); ←サイズが異なる複数頁のときにこの位置で頁変更をする
38.
doc.Add(image);
39.
40.
// PDFを開く
41.
doc.Close();
42.
}
43.
44.
private
iTextSharp.text.Rectangle myPaperSize(
float
x,
float
y)
45.
{
46.
// 誤差範囲10%とする
47.
// ※スキャン状態によって多少の誤差があるため
48.
float
gosa = 0.9f;
49.
50.
if
(PageSize.A0.Height < (y * gosa))
return
PageSize.B0;
51.
if
(PageSize.B1.Height < (y * gosa))
return
PageSize.A0;
52.
if
(PageSize.A1.Height < (y * gosa))
return
PageSize.B1;
53.
if
(PageSize.B2.Height < (y * gosa))
return
PageSize.A1;
54.
if
(PageSize.A2.Height < (y * gosa))
return
PageSize.B2;
55.
if
(PageSize.B3.Height < (y * gosa))
return
PageSize.A2;
56.
if
(PageSize.A3.Height < (y * gosa))
return
PageSize.B3;
57.
if
(PageSize.B4.Height < (y * gosa))
return
PageSize.A3;
58.
if
(PageSize.A4.Height < (y * gosa))
return
PageSize.B4;
59.
if
(PageSize.B5.Height < (y * gosa))
return
PageSize.A4;
60.
if
(PageSize.A5.Height < (y * gosa))
return
PageSize.B5;
61.
if
(PageSize.B6.Height < (y * gosa))
return
PageSize.A5;
62.
if
(PageSize.A6.Height < (y * gosa))
return
PageSize.B6;
63.
if
(PageSize.B7.Height < (y * gosa))
return
PageSize.A6;
64.
if
(PageSize.A7.Height < (y * gosa))
return
PageSize.B7;
65.
if
(PageSize.B8.Height < (y * gosa))
return
PageSize.A7;
66.
if
(PageSize.A8.Height < (y * gosa))
return
PageSize.B8;
67.
68.
return
PageSize.A8;
69.
}
元ネタ
http://yonaizumi.dip.jp/weblog/cappe/2010/11/ctiffpdf.html
2013年7月11日木曜日
C#のsmtpclientでメール送信すると subjectで文字化けする
C#のsmtpclientでメール送信すると subjectで文字化けする。
どうも.NET4.0から、仕様が変わったそうです。
iso-2022-jpだと、smtpclient側で、自動エンコード を行うのが原因だとか。
http://blogs.technet.com/b/exchangeteamjp/archive/2012/10/05/3524293.aspx
今回は System.Net.Mail を利用してメールを送信する際に .NET Framework 4.5 で一部実装が変更されたことで発生する問題と対処方法についてご紹介いたします。
System.Net.Mail の MailMessage では SubjectEncoding を設定することで Subject で使用される文字コードを指定することができますが、SubjectEncoding に "iso-2022-jp" を設定した場合には Q エンコードが使用されてメールが送信されます。
Q エンコードに対応しているクライアントでは特に問題とはなりませんが、Q エンコードに対応していない一部の携帯端末やメーラーでは Subject が文字化けする問題が多数確認され、.NET Framework 4 までは以下のように SubjectEncoding は指定しないで Subject に B エンコードでエンコードした文字列を設定することで対応することができました。
.NET Framework 4.5 の System.Net.Mail では Subject
にエンコードされた文字列を指定してもクラス内部でデコードした値を内部で保持するように一部実装が変更されているため、上記のコードでも Q
エンコードが使用されてメールが送信される結果となります。
なお、.NET Framework 4.5 では以下のように二重にエンコードした文字列を Subject に設定することで以前と同様に日本語の件名を B エンコードを使用してメールを送信することができます。
どうも.NET4.0から、仕様が変わったそうです。
iso-2022-jpだと、smtpclient側で、自動エンコード を行うのが原因だとか。
http://blogs.technet.com/b/exchangeteamjp/archive/2012/10/05/3524293.aspx
今回は System.Net.Mail を利用してメールを送信する際に .NET Framework 4.5 で一部実装が変更されたことで発生する問題と対処方法についてご紹介いたします。
System.Net.Mail の MailMessage では SubjectEncoding を設定することで Subject で使用される文字コードを指定することができますが、SubjectEncoding に "iso-2022-jp" を設定した場合には Q エンコードが使用されてメールが送信されます。
Q エンコードに対応しているクライアントでは特に問題とはなりませんが、Q エンコードに対応していない一部の携帯端末やメーラーでは Subject が文字化けする問題が多数確認され、.NET Framework 4 までは以下のように SubjectEncoding は指定しないで Subject に B エンコードでエンコードした文字列を設定することで対応することができました。
using System.Net.Mail using System.Text.Encoding public static void SendMessage(string server) { string from = "userA@contoso.com"; string to = "userB@contoso.com"; string subject = "テスト メッセージ"; string body = "メッセージの本文" MailMessage msg = new MailMessage(from, to); msg.Subject = EncodeMailHeader(subject); msg.Body = body; // SubjectEncoding は指定しない // msg.SubjectEncoding = Encoding.GetEncoding("iso-2022-jp"); msg.BodyEncoding = Encoding.GetEncoding("iso-2022-jp"); SmtpClient sc = new SmtpClient(server); sc.Send(msg); } // 「=?iso-2022-jp?B?<エンコード文字列>?=」形式に変換 public static string EncodeMailHeader(string subject) { Encoding enc = Encoding.GetEncoding("iso-2022-jp"); string strBase64 = Convert.ToBase64String(enc.GetBytes(subject)); return string.Format("=?{0}?B?{1}?=", "iso-2022-jp", strBase64); } |
なお、.NET Framework 4.5 では以下のように二重にエンコードした文字列を Subject に設定することで以前と同様に日本語の件名を B エンコードを使用してメールを送信することができます。
using System.Net.Mail using System.Text.Encoding public static void SendMessage(string server) { string from = "userA@contoso.com"; string to = "userB@contoso.com"; string subject = "テスト メッセージ"; string body = "メッセージの本文" MailMessage msg = new MailMessage(from, to); msg.Subject = EncodeMailHeader(EncodeMailHeader(subject)); msg.Body = body; // SubjectEncoding は指定しない // msg.SubjectEncoding = Encoding.GetEncoding("iso-2022-jp"); msg.BodyEncoding = Encoding.GetEncoding("iso-2022-jp"); SmtpClient sc = new SmtpClient(server); sc.Send(msg); } // 「=?iso-2022-jp?B?<エンコード文字列>?=」形式に変換 public static string EncodeMailHeader(string subject) { Encoding enc = Encoding.GetEncoding("iso-2022-jp"); string strBase64 = Convert.ToBase64String(enc.GetBytes(subject)); return string.Format("=?{0}?B?{1}?=", "iso-2022-jp", strBase64); } |
Aipo スケジュールが登録出来ない
http://user.aipo.com/viewtopic.php?p=6148
設定ファイルが破損した為にスケジュールが登録出来ないそうだ。
tomcat/logs/all.log に、エラーが表示されている。
backup/xreg 以下にバックアップがある。
上記設定ファイルを、
C:\aipo\dpl702\tomcat\webapps\aipo\WEB-INF\conf にコピーする
今回は
C:\aipo\dpl702\tomcat\webapps\aipo\WEB-INF\conf\manhour.xreg
C:\aipo\dpl702\backup\xreg\manhour.xreg
設定ファイルが破損した為にスケジュールが登録出来ないそうだ。
tomcat/logs/all.log に、エラーが表示されている。
backup/xreg 以下にバックアップがある。
上記設定ファイルを、
C:\aipo\dpl702\tomcat\webapps\aipo\WEB-INF\conf にコピーする
今回は
C:\aipo\dpl702\tomcat\webapps\aipo\WEB-INF\conf\manhour.xreg
C:\aipo\dpl702\backup\xreg\manhour.xreg
2013年7月10日水曜日
ファイルをダウンロードする ASP.NET ページで日本語ファイル名が文字化けする
ファイルをダウンロードする ASP.NET ページで日本語ファイル名が文字化けする
元ネタ
http://support.microsoft.com/kb/436616/ja
修正箇所
Response.AppendHeader("Content-Disposition", "Attachment; filename*=utf-8''" + Server.UrlEncode(FileName));
filename*=utf-8 このおまじないが必要
.NETの内部文字列がutf-8になっている、IEのブラウザから file downloadする時に
出力先の文字コードがOS標準の、shift-jis と判断することから発生する。
ファイル名は、utf-8だよ~の宣言があれば、漢字が文字化けせずに済んだ。
登録:
投稿 (Atom)