SPREADには、シートのそのままをPDFに出力する機能が備わっています。 「SheetView」クラスの「PrintInfo」のPDF出力の指示を行えば、「SheetView」の印刷メソッドでPDF出力ができます。
以下のソースですが、「Button1_Click」の前までは以前のソースを踏襲していまして、 単に単一行選択表示で1000行3カラムのテストデータを表示しています。
「Button1_Click」の中で、PDFファイルへの出力処理を行っています。 「ActiveSheet.PrintInfo」の「PrintToPdf」をTrueに設定し、「PdfFileName」にPDF出力ファイル名を設定しています。 その後、SPREADコントロールの「PrintSheet」メソッドで「ActiveSheet」の印刷処理を行います。
ここで注意点があります。「PrintSheet」メソッドの直後でのPDFファイルの表示処理がコメントになっていますが、 コメント部分を実行に戻して処理すると、「AcrobatReader」は起動するのですがPDFファイルが見つからないとエラーになります。 「PrintSheet」メソッドの直後ではタイミング的に、まだPDFファイルの出力が終了していないので、エラーになる様です。
そこで解決方法として、「PrintSheet」メソッドの終了時点で「AcrobatReader」を起動することになります。 ちょうど「PrintMessageBox」イベントがそれに当たります。引数の「e」の「BeginPrinting」が「False」になった時が 「PrintSheet」が終わったことを通知してくれますので、そのタイミングで「AcrobatReader」起動の関数をコールします。
下図は、プログラムが起動しした時の表示です。
下図は、「Button1」をクリックした時の表示です。
=====
2016/03/07:の時の情報
以下のソースですが、「Button1_Click」の前までは以前のソースを踏襲していまして、 単に単一行選択表示で1000行3カラムのテストデータを表示しています。
「Button1_Click」の中で、PDFファイルへの出力処理を行っています。 「ActiveSheet.PrintInfo」の「PrintToPdf」をTrueに設定し、「PdfFileName」にPDF出力ファイル名を設定しています。 その後、SPREADコントロールの「PrintSheet」メソッドで「ActiveSheet」の印刷処理を行います。
ここで注意点があります。「PrintSheet」メソッドの直後でのPDFファイルの表示処理がコメントになっていますが、 コメント部分を実行に戻して処理すると、「AcrobatReader」は起動するのですがPDFファイルが見つからないとエラーになります。 「PrintSheet」メソッドの直後ではタイミング的に、まだPDFファイルの出力が終了していないので、エラーになる様です。
そこで解決方法として、「PrintSheet」メソッドの終了時点で「AcrobatReader」を起動することになります。 ちょうど「PrintMessageBox」イベントがそれに当たります。引数の「e」の「BeginPrinting」が「False」になった時が 「PrintSheet」が終わったことを通知してくれますので、そのタイミングで「AcrobatReader」起動の関数をコールします。
Imports FarPoint.Win.Spread Public Class Form1 'フォームロード時にSPREADの初期化 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'SPREADの初期化 Call InitilayzeSpread(Me.FpSpread1) '一覧データ表示 Call Me.DisplayData() End Sub 'SPREADの初期化 Private Sub InitilayzeSpread(ByVal spd As FpSpread) 'SPREADの設定 With spd 'スクロールバーの設定 .HorizontalScrollBarPolicy = ScrollBarPolicy.AsNeeded .VerticalScrollBarPolicy = ScrollBarPolicy.AsNeeded '分割ボックスの設定 .ColumnSplitBoxPolicy = SplitBoxPolicy.Never .RowSplitBoxPolicy = SplitBoxPolicy.Never 'カーソル設定 .SetCursor(CursorType.Normal, Windows.Forms.Cursors.Arrow) .SetCursor(CursorType.LockedCell, Windows.Forms.Cursors.Arrow) 'セルがアクティブ時に編集モードにしない .EditModePermanent = False 'セルがアクティブ時に既存の内容を選択しない .EditModeReplace = False End With 'アクティブシートの設定 With spd.ActiveSheet '選択状態 .SelectionStyle = SelectionStyles.SelectionRenderer '編集モードの設定 .OperationMode = OperationMode.SingleSelect '列のサイズ変更可、行のサイズ変更不可に設定する。 .Columns.Default.Resizable = True .Rows.Default.Resizable = False 'SPREADのアクティブシートのカラム数を3に設定 .ColumnCount = 3 'SPREADの行クリア .RowCount = 0 End With End Sub '一覧データ表示 Private Sub DisplayData() 'ソースが長くなるのでWith宣言 With Me.FpSpread1.ActiveSheet '描画を停止させる Me.FpSpread1.SuspendLayout() 'データの行数分の処理 For i As Integer = 0 To 999 '行数を増やす .RowCount += 1 '各セルへのデータ設定 .SetText(i, 0, "A" & i.ToString("000")) .SetText(i, 1, "B" & (i Mod 100).ToString("000")) '100で割った余り .SetText(i, 2, "C" & (i Mod 10).ToString("000")) '10で割った余り Next End With '描画を再開させる Me.FpSpread1.ResumeLayout(True) '先頭行を選択設定(1行目が選択色になる) Me.FpSpread1.ActiveSheet.AddSelection(0, 0, 1, 1) End Sub 'PDF出力ボタン Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'アクティブシートをPDFとして出力 Me.FpSpread1.ActiveSheet.PrintInfo.PrintToPdf = True 'PDFファイル名 Me.FpSpread1.ActiveSheet.PrintInfo.PdfFileName = "test.pdf" 'アクティブシートをPDFとして印刷 Me.FpSpread1.PrintSheet(Me.FpSpread1.ActiveSheet) ''PDF表示 'Call DispPdf("test.pdf") End Sub Private Sub FpSpread1_PrintMessageBox(ByVal sender As Object, ByVal e As FarPoint.Win.Spread.PrintMessageBoxEventArgs) Handles FpSpread1.PrintMessageBox '印刷終了タイミングか?? If e.BeginPrinting = False Then 'PDF表示 Call DispPdf("test.pdf") End If End Sub '拡張子PDFに関連付けられているAcrobatReader起動 Private Sub DispPdf(ByVal strFileName As String) Dim pStartInfo As New ProcessStartInfo Dim p As New Process With pStartInfo .FileName = strFileName .CreateNoWindow = False .WindowStyle = ProcessWindowStyle.Normal End With 'プロセスのStartInfoプロパティに設定 p.StartInfo = pStartInfo If p.Start() = True Then 'AcrobatReaderの終了を待つ p.WaitForExit() Else MsgBox("起動に失敗しました。") End If End Sub End Class
下図は、プログラムが起動しした時の表示です。
下図は、「Button1」をクリックした時の表示です。
=====
2016/03/07:の時の情報
PR
コメント