2009年06月29日


VB.NET : 印刷(3)

基本的なページコントロールと行コントロールの手法です。
古典的なものですが、ページの印字用に最適化しています
' ******************************************************
' 実際の印刷処理
' ******************************************************
Private Sub pd_PrintPage(ByVal sender As System.Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)

	' 左側余白
	leftMargin = e.MarginBounds.Left
	' 上側余白
	topMargin = e.MarginBounds.Top
	' 現在のコンテキストを取得
	prContext = e.Graphics
	' 余白を除いた高さをフォントの高さで割る
	pMax = e.MarginBounds.Height / pf.GetHeight(e.Graphics)


	' 初回処理( ページ = 0 )
	If pCnt = 0 Then
		Try
			' SHIFT_JIS 
			ReadFile = _
			 New StreamReader("C:\TMP\社員マスタ.csv", _
			 Encoding.GetEncoding(932))

		Catch ' e As Exception
			' ※ エラーの場合、空ページを出力してしまうので、
			' ※ 呼び出す以前にチェックする必要がある
			MessageBox.Show("入力エラーです")
			' データ終了
			e.HasMorePages = False
			Return
		End Try

	End If
	pCnt += 1

	' 印字処理は、条件が多様になる為、単純ループで優先順位の高い
	' 順序で処理を記述して行く( この場合、データが無い場合が最も優先順位が高い )
	Do
		' データがなくなった場合
		' ※ データが無い場合は、空ページを印字してしまうので
		' ※ 呼び出す以前にチェックする必要がある
		If ReadFile.EndOfStream Then
			ReadFile.Close()
			ReadFile.Dispose()
			' /////////////////////////////
			' ■重要 : 次の呼び出しに備える
			' /////////////////////////////
			pCnt = 0
			pRow = 1

			' データ終了なので完全脱出
			e.HasMorePages = False
			Return
		End If

		' 読んだデータがに印字できないと考えられる場合は
		' データを読み込まないようにする
		If pRow > pMax Then
			' /////////////////////////////
			' ■重要 : 次のページに備える
			' /////////////////////////////
			pRow = 1

			' ページ内にデータを印字できないので脱出
			Exit Do
		End If

		' 次行読み込み
		LineText = ReadFile.ReadLine()

		' 印字
		PrString(pRow, LineText)

		' /////////////////////////////
		' ■重要 : 1行印字したので、行ポインタを次に印字する位置に進める
		' /////////////////////////////
		pRow += 1

	Loop


	' 次のページがある
	e.HasMorePages = True


End Sub

全体のソースコード
■ 関連する記事 VB.NET : 印刷(1) VB.NET : 印刷(2) コントロールブレイクのセオリー
タグ:Print
posted by at 2009-06-29 18:33 | VB.NET Framework2.0 | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

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

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

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

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


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

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

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

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

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