2010年10月26日


VB.net : iTextSharp でPDF を出力する

dll のダウンロード

Browse iTextSharp Files on SourceForge.net

2010/10/26 現在で、2010-08-21 ぶんの itextsharp-5.0.4-dll.zip が最新です。
オリジナルのマニュアルは無いので、以下から CHM をダウンロードします。

iTextSharp クラスライブラリリファレンス : Vector


※ itextsharp-5.0.4.zip をダウンロードすると、C# のサンプルコードは付いていますが
※ VB.net はありません。


dll の参照

Ref_dll


VB.net サンプルコード
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports System.IO

Public Class Form1


	Private Sub Button1_Click(ByVal sender As System.Object, _
	   ByVal e As System.EventArgs) Handles Button1.Click

		' PDF 出力パス
		Dim pdf As String = My.Application.Info.DirectoryPath & "\pdftest.pdf"

		Dim doc As Document = New Document()

		' 出力先を指定し、文書をPDFとして出力する為のオブジェクト
		Dim pw As PdfWriter = _
		PdfWriter.GetInstance( _
		 doc, _
		 New FileStream(pdf, FileMode.Create) _
		)

		' 出力開始
		doc.Open()

		' フォント用のシステムフォルダ
		Dim windir As String = System.Environment.GetEnvironmentVariable("windir")


		' 日本語フォントの設定
		Dim font As Font = New Font( _
		  BaseFont.CreateFont( _
		  windir & "\Fonts\MSGOTHIC.TTC,0", _
		  BaseFont.IDENTITY_H, _
		  BaseFont.EMBEDDED))

		Dim font2 As Font = New Font( _
		  BaseFont.CreateFont( _
		  windir & "\Fonts\MSGOTHIC.TTC,1", _
		  BaseFont.IDENTITY_H, _
		  BaseFont.EMBEDDED))


		' *******************************************
		' 座標指定する為のオブジェクト
		' *******************************************
		' 一番上のレイヤー
		Dim pcb As PdfContentByte = pw.DirectContent

		' 一番上のレイヤーに直線を引く
		pcb.MoveTo(250, 10)
		pcb.LineTo(250, 800)
		pcb.Stroke()

		Dim ct As ColumnText = New ColumnText(pcb)

		Dim myText As Phrase = Nothing

		' MS GOTHIC
		myText = New Phrase("ABCDEFGHIJKLMN", font)
		ct.SetSimpleColumn( _
		 myText, _
		 100, 0, _
		 300, 820, _
		 0, _
		 Element.ALIGN_LEFT _
		)
		ct.Go()

		myText = New Phrase("漢字表示", font)
		ct.SetSimpleColumn( _
		 myText, _
		 100, 0, _
		 300, 810, _
		 0, _
		 Element.ALIGN_LEFT _
		)
		ct.Go()

		' MS P GOTHIC
		myText = New Phrase("ABCDEFGHIJKLMN", font2)
		ct.SetSimpleColumn( _
		 myText, _
		 100, 0, _
		 300, 800, _
		 0, _
		 Element.ALIGN_LEFT _
		)
		ct.Go()

		myText = New Phrase("漢字表示", font2)
		ct.SetSimpleColumn( _
		 myText, _
		 100, 0, _
		 300, 790, _
		 0, _
		Element.ALIGN_LEFT _
		)
		ct.Go()

		Dim top As Integer = 750
		myText = New Phrase("left:" & doc.PageSize.Left.ToString(), font2)
		ct.SetSimpleColumn( _
		 myText, _
		 100, 0, _
		 300, top, _
		 0, _
		 Element.ALIGN_LEFT _
		)
		ct.Go()

		top -= 10
		myText = New Phrase("right:" & doc.PageSize.Right.ToString(), font2)
		ct.SetSimpleColumn( _
		 myText, _
		 100, 0, _
		 300, top, _
		 0, _
		 Element.ALIGN_LEFT _
		)
		ct.Go()

		top -= 10
		myText = New Phrase("top:" & doc.PageSize.Top.ToString(), font2)
		ct.SetSimpleColumn( _
		 myText, _
		 100, 0, _
		 300, top, _
		 0, _
		 Element.ALIGN_LEFT _
		)
		ct.Go()

		top -= 10
		myText = New Phrase("bottom:" & doc.PageSize.Bottom.ToString(), font2)
		ct.SetSimpleColumn( _
		 myText, _
		 100, 0, _
		 300, top, _
		 0, _
		 Element.ALIGN_LEFT _
		)
		ct.Go()

		' 真ん中のレイヤー( 画像レイヤーの上 )
		' 自然な改行の出力
		Dim pg As Paragraph = New Paragraph("標準", font)
		doc.Add(pg)
		doc.Add(pg)
		doc.Add(pg)
		doc.Add(pg)
		doc.Add(pg)
		' 空文字は無視されるので " "
		pg = New Paragraph(" ")
		doc.Add(pg)
		doc.Add(pg)

		Dim p As Paragraph = New Paragraph()
		Dim i
		For i = 0 To 24
			p.Add( _
			 New Chunk( _
			  "一般テキスト   一般テキスト   一般テキスト" _
			  , font _
			 ) _
			)
		Next
		doc.Add(p)

		' 真ん中のレイヤー( 画像レイヤー )
		'Dim img As Image = _
		' Image.GetInstance(My.Application.Info.DirectoryPath & "\sample.png")
		'img.SetAbsolutePosition(120, 500)
		'doc.Add(img)

		' 一番上のレイヤー( 灰色の小さな円 )
		pcb.SetRGBColorFill(&HAA, &HAA, &HAA)
		pcb.Circle(250.0, 500.0, 50.0)
		pcb.Fill()

		' 一番下のレイヤー( 赤いおおきな円 )
		Dim cbu As PdfContentByte = pw.DirectContentUnder
		cbu.SetRGBColorFill(&HFF, &H0, &H0)
		cbu.Circle(250.0, 500.0, 100.0)
		cbu.Fill()

		' 一番上のレイヤーに直線を引く
		pcb.MoveTo(255, 10)
		pcb.LineTo(255, 800)
		pcb.Stroke()

		' 出力終了
		doc.Close()

		' PDF を拡張子実行
		System.Diagnostics.Process.Start(pdf)


	End Sub

End Class

以下は、上記処理より機能を抜粋した簡易的なクラスのサンプルです
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports System.IO

Public Class Class1

	Public doc As Document
	Public pw As PdfWriter
	Public pcb As PdfContentByte
	' フォント用のシステムフォルダ
	Public windir As String = System.Environment.GetEnvironmentVariable("windir")

	' *********************************************************
	' コンストラクタ
	' *********************************************************
	Public Sub New(ByVal pdf As String)

		doc = New Document()

		' 出力先を指定し、文書をPDFとして出力する為のオブジェクト
		pw = _
		 PdfWriter.GetInstance( _
		  doc, _
		  New FileStream(pdf, FileMode.Create) _
		 )

		' 出力開始
		doc.Open()

		' 
		pcb = pw.DirectContent

	End Sub

	' *********************************************************
	' 終了処理
	' *********************************************************
	Public Sub Close()

		' 出力終了
		doc.Close()

	End Sub

	' *********************************************************
	' 直線を引く
	' *********************************************************
	Public Sub Line( _
	 ByVal x1 As Integer, _
	 ByVal y1 As Integer, _
	 ByVal x2 As Integer, _
	 ByVal y2 As Integer)

		' 一番上のレイヤーに直線を引く
		pcb.MoveTo(x1, y1)
		pcb.LineTo(x2, y2)
		pcb.Stroke()

	End Sub

	' *********************************************************
	' 四角形を書く
	' *********************************************************
	Public Sub Box( _
	  ByVal x1 As Integer, _
	  ByVal y1 As Integer, _
	  ByVal x2 As Integer, _
	  ByVal y2 As Integer)

		' 一番上のレイヤーに直線を引く
		pcb.MoveTo(x1, y1)
		pcb.LineTo(x2, y1)
		pcb.LineTo(x2, y2)
		pcb.LineTo(x1, y2)
		pcb.LineTo(x1, y1)
		pcb.Stroke()

	End Sub

	' *********************************************************
	' フォントの取得(1) : デフォルトサイズ
	' *********************************************************
	Public Function GetFont(ByVal TTCName As String, ByVal FontNo As Integer) As Font

		' 日本語フォントの設定
		Dim font As Font = New Font( _
		  BaseFont.CreateFont( _
		  windir & "\Fonts\" & TTCName & "," & FontNo, _
		  BaseFont.IDENTITY_H, _
		  BaseFont.NOT_EMBEDDED))

		Return font

	End Function

	' *********************************************************
	' フォントの取得(2) : サイズ指定
	' *********************************************************
	Public Function GetFont(ByVal TTCName As String, ByVal FontNo As Integer, ByVal FontSize As Double) As Font

		' 日本語フォントの設定
		Dim font As Font = New Font( _
		  BaseFont.CreateFont( _
		  windir & "\Fonts\" & TTCName & "," & FontNo, _
		  BaseFont.IDENTITY_H, _
		  BaseFont.NOT_EMBEDDED), FontSize)

		Return font

	End Function

	' *********************************************************
	' 矩形内にテキスト出力( はみ出すと表示されない )
	' *********************************************************
	Public Sub SetCellText( _
	 ByVal x1 As Integer, _
	 ByVal y1 As Integer, _
	 ByVal x2 As Integer, _
	 ByVal y2 As Integer, _
	 ByVal text As String, _
	 ByVal font As Font)

		'SetSimpleColumn(
		'  Phrase phrase,  // コラムに設定するテキストを保持する Phrase オブジェクト
		'  float llx,      // 矩形の左下隅の X 座標
		'  float lly,      // 同、Y 座標
		'  float urx,      // 右上隅の X 座標
		'  float ury,      // 同、Y 座標
		'  float leading,  // レディング量
		'  int alignment // 整列方法
		');

		Dim ct As ColumnText = New ColumnText(pcb)
		Dim myText As Phrase = Nothing

		Dim offy As Double

		If font.Size = -1 Then
			offy = 12
		Else
			offy = font.Size
		End If

		myText = New Phrase(text, font)
		ct.SetSimpleColumn( _
		 myText, _
		 x1, y1 - offy, _
		 x2, y2 - offy, _
		 0, _
		 Element.ALIGN_LEFT _
		)
		ct.Go()

	End Sub


End Class



posted by at 2010-10-26 09:51 | Java/VB.net | このブログの読者になる | 更新情報をチェックする

2010年05月04日


Visual Studio 2008 の初期設定

Vs2008_01

どういうわけか、このチェックボックスが OFF になっているので、
Debug と Release を切り替えるダイアログが表示されずに、デバッグ
構成の設定ができないようになっていました( Release のみ表示 )

Vs2008_02

特に、ソース上で使う DEBUG 定数の設定はここからでないと設定
できません。

Vs2008_03



posted by at 2010-05-04 12:52 | Java/VB.net | このブログの読者になる | 更新情報をチェックする

2009年09月24日


Java : JSP が使うユーザパッケージのクラス

lightbox.Test
文字列の現在の日付を返すクラスとインスタンスのメソッド

package lightbox;

import java.util.*;
import java.io.*;
import java.text.*;

public class Test {

	// *****************************************************
	// 日付文字列 ( インスタンス )
	// *****************************************************
	public String getDateString( ) {

		Date myDate = null;
		String strDate = null;

		myDate = new Date();
		strDate = DateFormat.getDateInstance().format(myDate);

		return strDate;

	}

	// *****************************************************
	// 日付文字列 ( クラス )
	// *****************************************************
	public static String getDateSystem( ) {

		Date myDate = null;
		String strDate = null;

		myDate = new Date();
		strDate = DateFormat.getDateInstance().format(myDate);

		return strDate;

	}

}


JSP での利用
1) Import
2) useBean
3) useBean + getProperty

Import
<%@ page
	language="java"
	import="java.io.*"
	import="java.text.*"
	import="java.util.*"
	import="lightbox.*"
	contentType="text/html;charset=Windows-31J" %>
<%
response.setHeader( "Expires", "Wed, 31 May 2000 14:59:58 GMT" );
// *********************************************************
// 日付・時刻表示
// Test.java を通常のパッケージ(クラス)として利用
// ( ※ 6 行目の import で実装 )
// *********************************************************
// インスタンス作成
Test myTest = new Test();
// インスタンスのメソッドより取得
String strDate = myTest.getDateString();

%>
<HTML>
<BODY>

日付(インスタンス) = <%= strDate %><br>
日付(クラス) = <%= Test.getDateSystem() %><br>

</BODY>
</HTML>


useBean
<%@ page
	language="java"
	import="java.io.*"
	import="java.text.*"
	import="java.util.*"
	contentType="text/html;charset=Windows-31J" %>
<jsp:useBean id="myTest" scope="session" class="lightbox.Test" />
<%
response.setHeader( "Expires", "Wed, 31 May 2000 14:59:58 GMT" );
// *********************************************************
// 日付・時刻表示
// Test.java を Beans として実装
// ( ※ 7 行目のタグに注目 )
// jsp タグによって、myTest というインスタンスが作成される
// *********************************************************
String strDate = myTest.getDateString();

out.println(strDate+"<br>");
%>
<HTML>
<BODY>

日付 = <%= strDate %>

</BODY>
</HTML>


useBean + getProperty
<%@ page
	language="java"
	import="java.io.*"
	import="java.text.*"
	import="java.util.*"
	contentType="text/html;charset=Windows-31J" %>
<jsp:useBean id="myTest" scope="session" class="lightbox.Test" />
<%
response.setHeader( "Expires", "Wed, 31 May 2000 14:59:58 GMT" );
// *********************************************************
// 日付・時刻表示
// Test.java を Beans として実装
// ( ※ 7 行目のタグに注目 )
// jsp タグによって、myTest というインスタンスが作成される
// メソッドの結果をコードでは無く、タグで実装 ( 22 行目 )
// ※ タグのプロパティで使用する場合は、先頭を小文字にする
// *********************************************************
%>
<HTML>
<BODY>

日付 = <jsp:getProperty name="myTest" property="dateString" />

</BODY>
</HTML>



タグ:java Tomcat JSP
posted by at 2009-09-24 12:04 | Java/VB.net | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します